Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lorena_rio

Associação

Recommended Posts

Minha sugestão:

 

print.png

 

Com isto, você poderá colocar qualquer disciplina em qualquer turma em qualquer período.

Abaixo, códigos em PHP de exemplo de inserção (utilizei Lumine para ficar mais fácil)

 

 

 

header('Content-Type: text/plain');

include 'Lumine_ApplicationContext.php';

new Lumine_ApplicationContext();

// função para ver os SQL's feitos pelo Lumine
$conn = Lumine_ConnectionManager::getInstance()->getConfiguration('entidades')->getConnection();
$conn->addEventListener(Lumine_Event::PRE_EXECUTE, function(Lumine_Events_ConnectionEvent $evt){
	echo $evt->sql, ';', PHP_EOL, PHP_EOL;
});

// criando series
$serie = new Serie();
foreach(array('1 EF','2 EF','3 EF','4 EF','5 EF','6 EF','7 EF','8 EF','1 EM','2 EM','3 EM') as $nome){
	$serie->nome = $nome;
	$serie->addMultiInsertItem();
}
$serie->multiInsert();

// criando as turmas 
// turnos: 1 => manha, 2 => tarde, 3 => noite
// vamos criar 5 turmas para cada serie
$turmas = array('A'=>1,'B'=>1,'C'=>2,'D'=>2,'E'=>3);

$serie->reset();
$serie->find();
$turma = new Turma();

while($serie->fetch()){
	foreach($turmas as $nome => $turno){
		$turma->nome = $nome;
		$turma->turno = $turno;
		$turma->codserie = $serie->codserie;
		$turma->addMultiInsertItem();
	}
}
$turma->multiInsert();

// disciplinas
$disciplinas = array('Matematica','Ingles','Portugues','Frances','Espanhol','Ciencias','Geografia','Historia');
sort($disciplinas);

$disciplina = new Disciplina();

foreach($disciplinas as $nome){
	$disciplina->nome = $nome;
	$disciplina->addMultiInsertItem();
}

$disciplina->multiInsert();

// criando os bimestres 
// decidi por bimestre para ficar mais fácil de entender, mas
// voce pode cadastrar os periodos como desejar
// a partir de fevereiro deste ano (2013)
$bimestres = array(
	array('descricao' => 'Primeiro Bimestre','dtainicio'=>'2013-02-01', 'dtatermino' => '2013-03-31'),
	array('descricao' => 'Segundo Bimestre','dtainicio'=>'2013-04-01', 'dtatermino' => '2013-05-31'),
	array('descricao' => 'Terceiro Bimestre','dtainicio'=>'2013-07-01', 'dtatermino' => '2013-08-31'),
	array('descricao' => 'Quarto Bimestre','dtainicio'=>'2013-09-01', 'dtatermino' => '2013-11-31'),
);

$periodo = new Periodo();

foreach($bimestres as $item){
	$periodo->populateFrom($item);
	$periodo->addMultiInsertItem();
}
$periodo->multiInsert();

// cadastrando um docente
$docente = new Docente();
$docente->nome = 'Hugo';
$docente->email = 'meu@superdominio.com.br';
$docente->dtanasc = '06/07/1970'; // Lumine já converte a data
$docente->ativo = 1;
$docente->save();

// cadastrando disciplinas.
// vou colocar que a turma 1 EF A vai ter ingles no primeiro bimestre
// professor = hugo
$turma->reset();
$turma->alias('t')
	->join(new Serie(),'inner','s')
	->select('t.codturma,s.codserie')
	->where('s.nome = ? AND t.nome = ?', '1 EF', 'A')
	->find(true);

$disciplina->reset();
$disciplina->get('nome','Ingles');

$periodo->reset();
$periodo->get('descricao','Primeiro Bimestre');

$turmaDisciplina = new TurmaDisciplina();
$turmaDisciplina->coddisciplina = $disciplina->coddisciplina;
$turmaDisciplina->coddocente = $docente->coddocente;
$turmaDisciplina->codperiodo = $periodo->codperiodo;
$turmaDisciplina->codturma = $turma->codturma;
$turmaDisciplina->insert();


// consultando geral
$serie->reset();
$turma->reset();
$disciplina->reset();
$turmaDisciplina->reset();
$periodo->reset();

$turmaDisciplina->alias('td')
	->join($turma->alias('t')
		->join($serie,'inner','s')
	)
	->join($periodo,'inner','p')
	->join($disciplina,'inner','d')
	->select('s.nome as serie, t.nome as turma, p.descricao as periodo, d.nome as disciplina')
	->order('p.dtainicio, s.nome, t.nome, d.nome')
	->find();

// mostrando uma tabelinha simples
$rows = $turmaDisciplina->allToArray(false,true);
$first = reset($rows);

echo '<table border="1"><tr>';
foreach($first as $key => $value){
	echo '<th>',$key,'</th>';
}
echo '<tr>';

foreach($rows as $row){
	echo '<tr>';
	foreach($row as $value){
		echo '<td>',$value,'</td>';
	}
	echo '</tr>';
}
echo '</table>'; 

 

 

 

E abaixo, o SQL gerado para os códigos em PHP exemplificados:

 

 

 

INSERT INTO serie(nome) VALUES ('1 EF'), 
('2 EF'), 
('3 EF'), 
('4 EF'), 
('5 EF'), 
('6 EF'), 
('7 EF'), 
('8 EF'), 
('1 EM'), 
('2 EM'), 
('3 EM');

SELECT serie.codserie as "codserie", serie.nome as "nome"
 FROM serie
;

INSERT INTO turma(codserie, nome, turno) VALUES (1, 'A', 1), 
(1, 'B', 1), 
(1, 'C', 2), 
(1, 'D', 2), 
(1, 'E', 3), 
(2, 'A', 1), 
(2, 'B', 1), 
(2, 'C', 2), 
(2, 'D', 2), 
(2, 'E', 3), 
(3, 'A', 1), 
(3, 'B', 1), 
(3, 'C', 2), 
(3, 'D', 2), 
(3, 'E', 3), 
(4, 'A', 1), 
(4, 'B', 1), 
(4, 'C', 2), 
(4, 'D', 2), 
(4, 'E', 3), 
(5, 'A', 1), 
(5, 'B', 1), 
(5, 'C', 2), 
(5, 'D', 2), 
(5, 'E', 3), 
(6, 'A', 1), 
(6, 'B', 1), 
(6, 'C', 2), 
(6, 'D', 2), 
(6, 'E', 3), 
(7, 'A', 1), 
(7, 'B', 1), 
(7, 'C', 2), 
(7, 'D', 2), 
(7, 'E', 3), 
(8, 'A', 1), 
(8, 'B', 1), 
(8, 'C', 2), 
(8, 'D', 2), 
(8, 'E', 3), 
(9, 'A', 1), 
(9, 'B', 1), 
(9, 'C', 2), 
(9, 'D', 2), 
(9, 'E', 3), 
(10, 'A', 1), 
(10, 'B', 1), 
(10, 'C', 2), 
(10, 'D', 2), 
(10, 'E', 3), 
(11, 'A', 1), 
(11, 'B', 1), 
(11, 'C', 2), 
(11, 'D', 2), 
(11, 'E', 3);

INSERT INTO disciplina(nome) VALUES ('Ciencias'), 
('Espanhol'), 
('Frances'), 
('Geografia'), 
('Historia'), 
('Ingles'), 
('Matematica'), 
('Portugues');

INSERT INTO periodo(descricao, dtainicio, dtatermino) VALUES ('Primeiro Bimestre', '2013-02-01', '2013-03-31'), 
('Segundo Bimestre', '2013-04-01', '2013-05-31'), 
('Terceiro Bimestre', '2013-07-01', '2013-08-31'), 
('Quarto Bimestre', '2013-09-01', '2013-12-01');

INSERT INTO docente(nome, email, dtanasc, ativo) VALUES ('Hugo', 'meu@superdominio.com.br', '1970-07-06', '1');

select last_insert_id() as id;

SELECT t.codturma, s.codserie
 FROM turma t
INNER JOIN serie s ON s.codserie = t.codserie
 WHERE s.nome = '1 EF' AND t.nome = 'A'
	
;

SELECT disciplina.coddisciplina as "coddisciplina", disciplina.nome as "nome"
 FROM disciplina
 WHERE disciplina.nome = 'Ingles'
;

SELECT periodo.codperiodo as "codperiodo", periodo.descricao as "descricao", periodo.dtainicio as "dtainicio", periodo.dtatermino as "dtatermino"
 FROM periodo
 WHERE periodo.descricao = 'Primeiro Bimestre'
;

INSERT INTO turma_disciplina(coddisciplina, codturma, codperiodo, coddocente) VALUES (6, 1, 1, 1);

SELECT s.nome as serie, t.nome as turma, p.descricao as periodo, d.nome as disciplina
 FROM turma_disciplina td
INNER JOIN turma t ON t.codturma = td.codturma
INNER JOIN serie s ON s.codserie = t.codserie
INNER JOIN periodo p ON p.codperiodo = td.codperiodo
INNER JOIN disciplina d ON d.coddisciplina = td.coddisciplina
 ORDER BY p.dtainicio, s.nome, t.nome, d.nome
;

 

 

 

Dê uma estudada

Acho que uma modelagem seguindo esta linha é o caminho.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só um comentário em relação a um post que li neste tópico:

Fiz a modelagem deste jeito porque, no meu ponto de vista e nas instituições onde já trabalhei, série e turma são coisas distintas.

 

Uma turma é um agrupamento/divisão de alunos de uma determinada série.

Uma série pode conter uma ou mais turmas.

 

Exemplificando:

 

1ª série do ensino fundamental - turmas A, B e C

2ª série do ensino médio - turmas A e B

 

Sendo que:

1ª série do ensino fundamental - turmas A - turno diurno

1ª série do ensino fundamental - turmas B - turno diurno

1ª série do ensino fundamental - turmas C - turno vespertino

2ª série do ensino médio - turma A - turno diurno

2ª série do ensino médio - turma B - turno noturno

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não tem erro, Turma, série, curso, isso independe, isso pode ficar como está que é a série. Fechou aqui.

 

Período é como está, bimestres, então vou simplificar, vou deixar só bimestres. Assim continua como está que é o períodos.

 

E as matérias. Pronto.

Tranquilo. Nomenclatura é à vontade.

 

Em períodos eu criei o 1ª BIMESTRE, 2ª BIMESTRE, 3ª BIMESTRE, 4ª BIMESTRE

A menos que eles tenham alguma outra informação relevante, para o cenário proposto são desnecessários

 

E em matérias eu criei MATEMÁTICA, FÍSICA, INGLÊS E PORTUGUÊS.

 

Até aí o sistema é funcional e sempre trabalhou assim maravilhosamente.

 

Mas o que acontece é que eu consigo dizer que a PRIMEIRA SÉRIE DO ENSINO MÉDIO vai trabalhar com MATEMÁTICA, FÍSICA, E PORTUGUÊS.

 

Já a SEGUNDA SÉRIE DO ENSINO MÉDIO com MATEMÁTICA FÍSICA, INGLÊS E PORTUGUÊS.

Isso porque você associa matéria à série. A associação deve ser feita com a turma/período/bimestre/chame-do-que-quiser

Então no modelo atual ele faz isso na boa, porém ele só trabalhava com todos os bimestres criados, o Fábio Pratta fez uma modificação no qual eu consigo dizer que a PRIMEIRA SÉRIE DO ENSINO MÉDIO vai trabalhar com 3 bimestres e a SEGUNDA SÉRIE DO ENSINO MÉDIO pode trabalhar com 4. Com isso essa possibilidade já foi criada. Mas o que ainda falta é que por exemplo na SEGUNDA SÉRIE DO ENSINO MÉDIO eu só iria ter INGLÊS no 3º bimestre. Mas aí é que está sendo o problema, pq tem que se criar alguma nova tabela e outro relacionamento. Nessa parte eu travei.

Se eu entendi direito desta vez, você quer apenas montar uma grade curricular. Eu estava pensando em algo muito mais complexo, tipo o que o @hufersil propôs.

 

Como eu já anotei acima, se o objetivo da tabela de bimestres (que você chamou de turma) for apenas armazenar bimestres, sem mais nada, eu não vejo necessidade/utilidade.

 

Por conta d'eu não ter incluído uma tabela para bimestres na modelagem, o resultado final acaba sendo exatamente o mesmo como proposto anteriormente:

 

3diagram.png

 

Caso por qualquer motivo seja necessário manter a tabela que contém os bimestres, a modelagem diverge pouco, ou quase nada...

 

4diagram.png

 

Dump de exemplo:

 

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`serie`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`serie` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `nome` VARCHAR(45) BINARY NOT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `nome` (`nome` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`bimestre`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`bimestre` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `nome` VARCHAR(45) BINARY NOT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `nome` (`nome` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`materia`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`materia` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `nome` VARCHAR(45) BINARY NOT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `nome` (`nome` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`turma`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`turma` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `serie` INT NOT NULL ,
  `bimestre` INT NOT NULL ,
  `nome` VARCHAR(45) BINARY NOT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `nome` (`nome` ASC, `serie` ASC, `bimestre` ASC) ,
  INDEX `serie` (`serie` ASC) ,
  INDEX `bimestre` (`bimestre` ASC) ,
  CONSTRAINT `serie`
    FOREIGN KEY (`serie` )
    REFERENCES `mydb`.`serie` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `bimestre`
    FOREIGN KEY (`bimestre` )
    REFERENCES `mydb`.`bimestre` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`turma-materia`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`turma-materia` (
  `turma` INT NOT NULL ,
  `materia` INT NOT NULL ,
  PRIMARY KEY (`turma`, `materia`) ,
  INDEX `turma` (`turma` ASC) ,
  INDEX `materia` (`materia` ASC) ,
  UNIQUE INDEX `turma-materia` (`turma` ASC, `materia` ASC) ,
  CONSTRAINT `turma`
    FOREIGN KEY (`turma` )
    REFERENCES `mydb`.`turma` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `materia`
    FOREIGN KEY (`materia` )
    REFERENCES `mydb`.`materia` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

-- -----------------------------------------------------
-- Data for table `mydb`.`serie`
-- -----------------------------------------------------
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`serie` (`id`, `nome`) VALUES (1, 'Primeira série do ensino médio');
INSERT INTO `mydb`.`serie` (`id`, `nome`) VALUES (2, 'Segunda série do ensino médio');

COMMIT;

-- -----------------------------------------------------
-- Data for table `mydb`.`bimestre`
-- -----------------------------------------------------
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`bimestre` (`id`, `nome`) VALUES (1, 'Primeiro Bimestre');
INSERT INTO `mydb`.`bimestre` (`id`, `nome`) VALUES (2, 'Segundo Bimestre');
INSERT INTO `mydb`.`bimestre` (`id`, `nome`) VALUES (3, 'Terceiro Bimestre');
INSERT INTO `mydb`.`bimestre` (`id`, `nome`) VALUES (4, 'Quarto Bimestre');

COMMIT;

-- -----------------------------------------------------
-- Data for table `mydb`.`materia`
-- -----------------------------------------------------
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`materia` (`id`, `nome`) VALUES (1, 'Matemática');
INSERT INTO `mydb`.`materia` (`id`, `nome`) VALUES (2, 'Inglês');

COMMIT;

-- -----------------------------------------------------
-- Data for table `mydb`.`turma`
-- -----------------------------------------------------
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`turma` (`id`, `serie`, `bimestre`, `nome`) VALUES (1, 1, 1, 'Primeiro Bimestre da Primeira Série');
INSERT INTO `mydb`.`turma` (`id`, `serie`, `bimestre`, `nome`) VALUES (2, 1, 2, 'Segundo Bimestre da Primeira Série');
INSERT INTO `mydb`.`turma` (`id`, `serie`, `bimestre`, `nome`) VALUES (3, 2, 1, 'Primeiro Bimestre da Segunda Série');
INSERT INTO `mydb`.`turma` (`id`, `serie`, `bimestre`, `nome`) VALUES (4, 2, 2, 'Segundo Bimestre da Segunda Série');
INSERT INTO `mydb`.`turma` (`id`, `serie`, `bimestre`, `nome`) VALUES (5, 2, 3, 'Terceiro Bimestre da Segunda Série');

COMMIT;

-- -----------------------------------------------------
-- Data for table `mydb`.`turma-materia`
-- -----------------------------------------------------
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`turma-materia` (`turma`, `materia`) VALUES (1, 1);
INSERT INTO `mydb`.`turma-materia` (`turma`, `materia`) VALUES (1, 2);
INSERT INTO `mydb`.`turma-materia` (`turma`, `materia`) VALUES (2, 1);
INSERT INTO `mydb`.`turma-materia` (`turma`, `materia`) VALUES (3, 1);
INSERT INTO `mydb`.`turma-materia` (`turma`, `materia`) VALUES (3, 2);
INSERT INTO `mydb`.`turma-materia` (`turma`, `materia`) VALUES (4, 1);
INSERT INTO `mydb`.`turma-materia` (`turma`, `materia`) VALUES (5, 2);

COMMIT;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hufersil, O sistema me permite da o nome que quiser, então eu posso dar o nome PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA A, não precisando ter uma nova tabela para turmas, e criar outra PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA B, sem ser necessário criar mais uma tabela que só vai dar mais trabalho. Isso somente em séries.

 

Se quiser eu posso denominar PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA A - MANHÃ ou PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA A - TARDE

 

Em períodos eu posso ter os Bimestres como já falado para uma escola, mas posso precisar trabalhar com uma faculdade que vai usar períodos, o sistema me permite criar os dois se eu quiser.

 

E em matéria que não preciso explicar.

 

O Fábio já colocou em prática eu determinar que a série PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA A por exemplo possa ter um número N de períodos e com determinadas matérias. Mas no caso essas matérias automaticamente entram em todos os períodos que foram designados a essa série, e no caso eu preciso é agora dizer que tal matéria vai estar somente em determinado período e não em todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hufersil, O sistema me permite da o nome que quiser, então eu posso dar o nome PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA A, não precisando ter uma nova tabela para turmas, e criar outra PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA B, sem ser necessário criar mais uma tabela que só vai dar mais trabalho. Isso somente em séries.

 

Se quiser eu posso denominar PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA A - MANHÃ ou PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA A - TARDE

 

Hum, e se quiser pegar todos os alunos da primeira série, independente da turma?

E se quiser pegar todos da segunda série noturno, independente da turma?

Com like? :closedeyes:

 

[ momento filosófico ]

O que você acha que pode te dar mais trabalho agora, vai te trazer vários benefícios amanhã!

[ / momento filosófico ]

 

Do meu ponto de vista, você está tendo uma visão muito restrita no que diz respeito a séries e turmas. E, principalmente, no que tange a banco de dados. Está praticamente chamando uma "série" como se fosse um simples rótulo para indicar onde um aluno está, quando, na verdade, a prática é bem mais abrangente (na verdade, nem é onde o aluno está, e sim onde ele está matriculado, tanto que no meu exemplo coloquei uma tabela para matricula).

 

A questão de ter "uma tabela a mais" para isso, é até melhor! Afinal, da forma como você está indicando, teria-se um registro a mais na série (erroneamente, na minha opinião) somente para diferenciar turmas! Da forma como sugeri, você define bem o que é uma turma do que é uma série.

 

Veja, trabalhando somente com nomenclaturas você terá um problema sério de performance posteriormente.

 

Acredite, trabalhei 5 anos em um colégio e 2 anos em uma faculdade - ambos no setor de desenvolvimento. E a sugestão postada, é apenas um norte para que você tenha noção do que se trata. Se fosse postar aqui um ERD completo, a resolução do browser ia ser pequena hehehe.

 

 

Em períodos eu posso ter os Bimestres como já falado para uma escola, mas posso precisar trabalhar com uma faculdade que vai usar períodos, o sistema me permite criar os dois se eu quiser.

 

Sim, tanto que, na minha tabela "periodo", eu defino o inicio e fim, que pode ser trimestre, semestre, anual, semanal... do jeito que precisar. Coloquei isso no meu exemplo.

 

O Fábio já colocou em prática eu determinar que a série PRIMEIRA SÉRIE DO ENSINO MÉDIO - TURMA A por exemplo possa ter um número N de períodos e com determinadas matérias. Mas no caso essas matérias automaticamente entram em todos os períodos que foram designados a essa série, e no caso eu preciso é agora dizer que tal matéria vai estar somente em determinado período e não em todos.

 

Isso eu mostrei como fazer na ultima parte do meu exemplo.

Tanto a inserção quanto a consulta :coolio:

 

Mas no final das batatas, o que postei foi apenas uma sugestão, porque (pelas experiências que já tive na área educacional) acredito que este norte que te passei é o princípio do melhor caminho a seguir. Se quiser chamar ou fazer de outro jeito, be my guest!

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo da bagaça funcionando.

 

http://www.silvaebrisch.com.br/labs/escola/

 

beeeem simples, não fiz validação de cadastro.

 

lá tem um exemplo de como você poderia configurar as turmas (uma disciplina, numa turma em um periodo com um docente).

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá lorena!

nesse caso a tabela que vai dar o pulo do gato é a tabela associativa matéria_periodo, já que exemplo que eu citei, ela vai pegar os códigos da tabela periodos e das matérias.

então nesse cas fiz a indexação via foreign key :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hufer, entendi sua ideia e acho muito boa, mas acontece que esse sistema já roda na escola faz um tempo, e nesse caso teria de mudar quase tudo, reconstruir o sistema, vai trabalho com backups, etc.. E no caso do que eu preciso é uma coisa que não alteraria praticamente o que está hoje, apenas ampliaria seu uso para outra modalidade dentro da escola sem mexer no que se tem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, a tabela que foi informada duas vezes (post #2 e post #8) resolve o seu problema.

 

Nela você tem o período, a matéria e a série.

Assim você consegue especificar o que você quer (qual matéria entra em determinado período para determinada série).

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não. nesse caso não pode ter o auto_increment, no exemplo do post 2. Ele define a série, um bimestre e um período, e caso eu preciso relacionar outro período vai se cria outro id. Já testei aqui e se mostrou falho. deixando sem o auto_increment, já se tem melhorias, mas mesmo assim o selec informado não trás o nome do período ou bimestre que deve ser informado

Compartilhar este post


Link para o post
Compartilhar em outros sites

O auto increment é só quando vc quer fazer uma chave primária que não se repita (no caso do MySQL).

Acredito que ele tenha colocado ele para ficar mais fácil futuras consultas, mas ele não impede que você use a mesma tabela.

 

É só criar um unique index para o conjunto periodo - serie - materia, assim, aquele campo auto increment não vai ter problema nenhum.

 

Cada registro representaria um conjunto do que você pediu.

1 bimestre para 1 serie para 1 materia.

 

E trazer o nome do bimestre, serie ou materia, é só você fazer um join, que traz tudo ué...

Ela é uma tabela de união, logo, os dados das tabelas ficam em suas tabelas, e você os recupera conforme necessidade.

 

select m.nome as materia, p.nome as periodo, s.nome as serie
from periodo_materia pm
join serie s using(id_serie)
join materia m using(id_materia)
join periodo p using(id_periodo)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não. nesse caso não pode ter o auto_increment, no exemplo do post 2. Ele define a série, um bimestre e um período, e caso eu preciso relacionar outro período vai se cria outro id. Já testei aqui e se mostrou falho. deixando sem o auto_increment, já se tem melhorias, mas mesmo assim o selec informado não trás o nome do período ou bimestre que deve ser informado

Qual foi a falha apresentada Lorena?

O novo id ou o novo registro serve justamente pra referenciar determinado registro na tabela, facilita nossa vida!!

 

Dá uma lida ae primary keys e indices http://webaserio.com/programacao/mysql-where-e-indices/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está dando certo, na verdade ele está gravando no bd corretamente, porém cada associação que vou fazendo ele vai criando um período para o professor. Tenho 4 bimestres e já aparecem 9 para o professor.



Ele insere corretamente no bd como eu falei, porém no select informado pelo Marcos é que ele está trazendo s informações erradas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você colocar os resultados e a consulta que está fazendo, ajudará a te ajudar :D

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

A consulta que postei não tinha a ver com o professor, somente com periodos X serie X materia. Segue:

 


SELECT pm.id_periodo, pm.id_materia, pm.id_serie, m.materia
FROM periodo_materia AS pm
INNER JOIN materias AS m ON pm.id_serie =1
AND m.id_materia = pm.id_materia
LIMIT 0 , 30

Porém para listar relacionar o professor com isso tudo creio que isso resolva:

 

 

SELECT pm.id_periodo, pm.id_materia, pm.id_serie, m.materia, prof.professor
FROM periodo_materia AS pm
INNER JOIN materias AS m ON pm.id_materia =m.id_materia
INNER  JOIN  series as s ON s.id_serie=pm.id_serie
INNER JOIN professor_serie  AS prs ON prs.id_serie =pm.id_serie
INNER  JOIN professores AS prof ON prs.id_professor = 1  AND prs.id_serie=1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não está sendo com o professor Marcos. na sua consulta anterior a cada vez que crio uma associação no periodo_materia ele vai acrescentando um bimestre a mais, eu posso associar de uma turma diferente ele associa para todos, logo eu tenho cinco 1º bimestres cinco 2º bimestres e por aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Evandro, deixei ele aqui hospedado para quem quiser pegar o BD e ver. Já está criada a tabela periodo_materia que o Marcos falou, nesse caso a tabela periodo_serie morreria eu acho.

 

Mas nesse método de inserir os relacionamentos na tabela eu não consigo editar, já que ele apenas cria o relacionamento pelo ID.

 

Bom o link do BD aqui http://depositfiles.org/files/ei3atix33



O que deu certinho até o momento foi o que o Fábio Pratta fez, mas nesse caso foi dentro do que tinha, que era eu poder definir o número de períodos em cada série/turma, e ficou perfeito. Mas para informar que a matéria tem que ficar somente nesse ou naquele período é diferente.

 

SELECT
P.id_periodo,P.periodo,
PM.id_periodo,PM.id_materia,
M.id_materia,M.materia,
S.id_serie,S.serie,
PS.id_periodo, PS.id_serie
FROM
periodos as P,
periodo_materia as PM,
materias as M,
series as S,
periodo_serie as PS
WHERE
PM.id_periodo = P.id_periodo AND
PM.id_materia = M.id_materia AND
PM.id_periodo = PS.id_periodo AND
PS.id_serie = S.id_serie AND
PM.id_materia = '".$_SESSION[id_materia]."' AND
S.id_serie = '".$_SESSION[id_serie]."'
ORDER BY P.periodo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.