Ir para conteúdo

POWERED BY:

Arquivado

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

Lorena_rio

Associação

Recommended Posts

Boa tarde amigos, preciso urgente de uma ajuda de vocês.

Fiz todos os procedimentos, mas não estou conseguindo fazer um relacionamento.

 

Tenho as seguintes tabelas:

 

"series", "materias" e "periodos"

 

e tenho outra que é a "periodo_materia", que indica se determinada matéria vai estar em todos os períodos ou não.

 

Tive de criar mais 4 tabelas, sendo: tabela "unioes", essa tabela é aonde vou indicar os relacionamentos das outras 3 tabelas que criei que foram: "serie_uniao" "materia_uniao" e "periodo_uniao"

 

Creio que a tabela "materia_periodo" poderia ser descartada. Pois eu quero informar o seguinte:

 

Vou dar um exemplo aqui que eu teria uma série com o nome PRIMEIRA SÉRIE, duas matérias MATEMÁTICA e FÍSICA, e 4 períodos

 

Então eu quero dizer que na PRIMEIRA SÉRIE tenha a matéria MATÉMATICA, mas que esta vai estar somente em 3 períodos, e que a matéria FÍSICA vai estar em 4 períodos. Nesse caso a tabela UNIOES seria para esse sentido, pois eu primeiro crio uma associação para a MATEMÁTICA e depois outra para FÍSICA e assim por diante..

 

As tabelas atualmente são essas abaixo.

 

Tabelas já existentes para se fazer essas novas
CREATE TABLE IF NOT EXISTS `series` (
`id_serie` int(10) NOT NULL auto_increment,
`serie` varchar(255) NOT NULL,
PRIMARY KEY (`id_materia`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `materias` (
`id_materia` int(10) NOT NULL auto_increment,
`materia` varchar(255) NOT NULL,
PRIMARY KEY (`id_materia`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `periodos` (
`id_periodo` int(10) NOT NULL auto_increment,
`periodo` varchar(255) NOT NULL,
PRIMARY KEY (`id_materia`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT= ;
E outras 4 tabelas que seriam os relacionamentos.
CREATE TABLE IF NOT EXISTS `unioes` (
`id_uniao` int(10) NOT NULL auto_increment,
`uniao` varchar(150) NOT NULL,
PRIMARY KEY (`id_uniao`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `serie_uniao` (
`id_serie` int(10) NOT NULL,
`id_uniao` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `materia_uniao` (
`id_materia` int(10) NOT NULL,
`id_uniao` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `periodo_uniao` (
`id_periodo` int(10) NOT NULL,
`id_uniao` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Fora a tabela que já existia que era a periodo_materia, que no caso agora acho que não precisaria mais dela, mas se alguém tiver duas opções, com ela e sem ela.
CREATE TABLE IF NOT EXISTS `periodo_materia` (
`id_periodo` int(10) NOT NULL,
`id_materia` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

Quem me da uma luz aí? pq estou perdidinha em como fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar de não ser PHP vai lá.

 

Acho desnecessário criar mais 4 tabelas(tabela "unioes", "serie_uniao" "materia_uniao" e "periodo_uniao");

 

Contudo testa o seguinte. Altere a tabela periodo materia ,acrescentando o campo id periodo materia, não é legal ficar sem um indice.

Outra coisa, não precisa tantos digitos nos campos int(você setou int(10),). Leia http://forum.imasters.com.br/topic/500615-tipos-de-dados-mysql/.

Seguindo....

 

Eu costumo usar CHARSET=utf-8 pra evitar problemas com acentuação.

CREATE TABLE IF NOT EXISTS `periodo_materia` (
 `id_periodo_materia` int(2) NOT NULL auto_increment,  
 `id_periodo` int(2) NOT NULL,
  `id_materia` int(2) NOT NULL,
  `id_serie` int(2) NOT NULL,
   PRIMARY KEY  (`id_periodo_materia`)
) ENGINE=MyISAM DEFAULT CHARSET=utf-8;

Um select simples pra você visualisar as materias de determinada serie

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Marcos, a tabela periodo_materia já tinha e eu tinha descartada, pois ele na verdade informava em quais períodos aquelas matérias estariam, porém ela globalizava, então matemática por exemplo se eu dizia que ia estar em 3 períodos ele fazia isso, mas teria turma que ela estaria em 4,, e ele não fazia isso.

 

No que entendi morreriam todas as tabelas e só ficaria essa com as tabelas series, períodos e matérias não é isso? Vou ver se consigo por em prática o que vc postou.

 

shini, é uma continuação sim, mas lá me abandonaram. Rsrs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Repare que eu adicionei o campo

 `id_serie` int(2) NOT NULL

 

Creio que ainda dá pra melhorar essa modelagem ae

  • b_sbrowse.png materias pode estar em 1 ou n periodos
  • b_sbrowse.png periodos pode ter 1 ou n series
  • b_sbrowse.png series pode conter n ou n materias (N para N cria-se uma nova entidade).

 

Comenta ae galera!

Compartilhar este post


Link para o post
Compartilhar em outros sites

um modelo de 'escola' eu modelaria, assim:

 

um curso(jardim, pre, pre I, 1 serie) possui varias turmas ( A1, A2, D2, D4).

uma turma possui varios periodos(semestre, bimestres etc) em um periodo existem varias disciplinas(portugues, matematica, ciencias)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa.

Na verdade falei besteira o correto é:

 

 

  • b_sbrowse.png 1 materia pode estar em 1 ou n periodos
  • b_sbrowse.png 1 periodo1 pode ter 1 ou n series
  • b_sbrowse.png 1 materia pode estar em 1 ou n serie

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou verificar, mas acho que dessa forma não vai dar. Pois na verdade é preciso que se informe que na turma x, vai ter tantos períodos e que a matéria x vai estar no período tal e a matéria y vai estar no outro período



Marcos, eu não entendi bem sua lógica. eu crio a tabela que vc informou

 

CREATE TABLE IF NOT EXISTS `periodo_materia` ( `id_periodo_materia` int(2) NOT NULL auto_increment, `id_periodo` int(2) NOT NULL, `id_materia` int(2) NOT NULL, `id_serie` int(2) NOT NULL,  PRIMARY KEY (`id_periodo_materia`) ) ENGINE=MyISAM DEFAULT CHARSET=utf-8;

 

Mas quais elimino e quais das outras deixo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você utilizará as tabelasmaterias, periodos, periodo_materia, series(não elimine as demais,vai que não funfa).

Fiz um pequeno exemplo aqui e inseri os seguintes dados para fins de teste, veja se confere

#SELECT *
FROM `series`

id_serie 	serie
 	1 	1
	2 	2
        3 	3
	4 	4
	5 	5
	6 	6
	7 	7
	8 	8


##SELECT *
FROM `materias`

id_materia 	materia
1 	portugues
2 	geografia
3 	artes
4 	ingles
5 	fisica
6 	matematica


#SELECT *
FROM `periodos`
id_periodo 	periodo
1 	       manha
2 	       tarde
3 	       noite


A tabela periodo matéria possuirá os campos abaixo que, no select, estarão relacionados(direta ou indiretamente ) com as demais tabelas

s_fulltext.png
id_periodo_materia id_periodo id_materia id_serie

 

Um exemplo

id_periodo_materia id_periodo id_materia id_serie
1 2 4 2

 

 

id_periodo = 2 (manhã)

id_materia=4 (ingles)

id_serie=2 (1 que seria primeira)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consigo ver seus exemplos das imagens que vc posta, somem



Os exemplos mostrador por vc é o que já acontece normalmente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal então agora você vai ter que implementar a lógica ao inserir os dados.

Insira as matérias, periodos se séries respectivamente.

Por fim você insere em periodo materia onde estará toda relação de matérias x séries x períodos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segundo seu exemplo, é só um pouquinho mais simples que o @shini sugeriu:

  Em 11/08/2013 at 20:55, Lorena_rio disse:

Vou dar um exemplo aqui que eu teria uma série com o nome PRIMEIRA SÉRIE, duas matérias MATEMÁTICA e FÍSICA, e 4 períodos

Então eu quero dizer que na PRIMEIRA SÉRIE tenha a matéria MATÉMATICA, mas que esta vai estar somente em 3 períodos, e que a matéria FÍSICA vai estar em 4 períodos. Nesse caso a tabela UNIOES seria para esse sentido, pois eu primeiro crio uma associação para a MATEMÁTICA e depois outra para FÍSICA e assim por diante..

Séries (primeiro, segundo, terceiro) têm períodos/turmas (a, b, c, d) e implementam matérias (matemática, física).

uma tabela para as disciplinas.
uma tabela para as séries.
uma tabela para as turmas que referenciam as séries
uma tabela para as implementações disciplina-turma

 

chart.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso já tem, porém não é possível se definir que tal matéria vai estar em determinada turma somente em tais períodos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Lorena!

 

Considerando que:

-série, sendo uma o ano em que o aluno se encontra (1ª, 2ª, etc...);

-matéria, o que será estudado (matemática, física, química, ...)

-período, se é matutino, vespertino ou noturno (esse eu tenho dúvida do que seja. Caso seja o bimestre ou coisa assim, a modelagem será diferente). Pois bem, definidos os papéis, aqui vamos.

 

uma série tem várias matérias assim como uma matéria pode estar em várias séries, certo?! logo fiz uma tabela associativa chamada "turma" - que vai ter o código da série e o da matéria; também, entre turma e matérias, ocorre um relacionamento n:n, logo fiz outra tabela associativa chamada matéria_turma. Então ficando as duas tabelas associativas:

 

- turma (id_série(FK), id_turma(PK), turma varchar(15) );

- materia_turma (cod_turma(FK), cod_materia(FK), cod_mat_turma(PK));

 

logo a tabela turma se relacionará com período.

 

Nesse caso interpretei período como matutino, vespertino. Caso período não for isto, e sim como se fosse uma divisão do período letivo, então a tabela período se relacionaria com materia_turma ficando assim:

____________ _______

|materia_turma| 1-----------* |periodo|

 

os campos de periodo, seriam:

- cod_mat_turma(FK);

- cod_periodo(PK);

- periodo varchar (20);

- descricao_periodo varchar(255);

 

na prática seria:

 

tabela: materia_turma
cod_mat_turma = 1, cod_turma = 1, cod_materia = 1

 

tabela: periodo

cod_mat_turma = 1, cod_periodo = 1, periodo = "primeiro bimestre", descricao_periodo = "algebra linear"

 

Bem, em suma seria mais ou menos desse jeito. Se puder me explique o conceito de período(papel dele no sistema).

Espero ter ajudado :)

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 12/08/2013 at 20:17, Lorena_rio disse:

Isso já tem, porém não é possível se definir que tal matéria vai estar em determinada turma somente em tais períodos.

Por favor, defina período e no que ele se diferencia da turma. Pra mim não faz muito sentido o pessoal da manhã ter mais disciplinas que o pessoal da tarde.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Período no caso não é manhã, tarde ou noite. Uma faculdade por exemplo pode ter 8 períodos que são os semestres, mas que são chamados de períodos. Nesse caso seria bimestres mesmo só para um exemplo. E também não da para criar séries e turma, já que quando é para algum curso ele não vai ser série somente turma.

 

Então resumindo.

 

Preciso da série/turma, isso é uma tabela mesmo que continua sendo o série, mas que vale tanto para um quanto para outro dependendo da situação.

 

As matérias que são: matemática. física, pode ser qualquer outra matéria de um curso, etc....

 

E os períodos que serão como se fossem bimestres, porém eu poderia colocar 4, 5, 6 ou sei lá quantos, mas para cursos eu tenho de usar períodos e que não seria manhã, tarde ou noite.

 

Ele já faz quase tudo, determina quantos períodos o curso ou a série/turma vai ter.

 

Determina quais matérias o curso ou série/turma vai ter

 

Mas o problema é que do jeito que ele está, se eu definir que matemática vai estar somente no 3º período da TURMA A, ele vai definir matemática somente no 3º período em todas as outras.

 

Aqui só o Fabio pegou rápido, e até conseguiu adiantar bem, porém ele deu uma sumida e eu fiquei orfã.

 

E isso é um trabalho que estou fazendo para uma escola no qual trabalho, e no caso a mudança é preciso pq ela vai operar alguns cursos, e nesse caso as mudanças seriam necessárias. Nesse caso é um problema para mim, pois tenho pouco conhecimento, e não teria tempo para aprender isso, e também já que programação não faz parte de minha profissão atual,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá lorena, td bem?!

Então, pelo que entendi, vou postar a solução

 

Há duas entidades distintas (série e curso), porém ambas possuem turma (uma ou mais turmas) que possuem vários períodos.

 

Então:

 

um curso / série tem uma ou várias turmas, logo formo duas tabelas:

 

- tbl_curso

* cod_curso_pk int not null auto increment

* curso varchar(50)

 

- tbl_serie

* cod_serie_pk -> int not null auto_increment

* serie varchar(50)

 

Bem, nestas duas coloquei apenas os campos necessários para fazer um relacionamento

 

Continuando...

 

Um curso ou uma série pode ter várias turmas

- tbl_turma

* tipo enum('curso', 'serie') -> é um sub identificador que distingue se a turma é de um curso ou série

* cod_turma_pk int not null auto increment

* cod_cur_ser_fk1 int not null

 

Uma turma pode ter vários períodos, que pode ter várias matérias e várias matérias pode estar em vários períodos. Logo temos um n:n, logo será necessário uma tabela associativa chamada materia_periodo. Ficando assim a sintaxe básica das tabelas:

 

- tbl_periodo

* cod_per_pk int not null auto increment

* cod_turma_fk1 int not null

* periodo varchar (30)

 

- tbl_materia

* cod_mat_pk int not null auto increment

* materia varchar(30)

 

- tbl_materia_periodo

* cod_per_fk1 int not null

* cod_mat_fk1 int not null

* assunto varchar(80) - que será dado dessa matéria no período, ex: em matemática, será dada adição

 

OBS: os campos terminados em _fk1 são chaves estrangeiras, elas servem para distinguir a tabela pai na tabela filha, auxiliando na indexação.

 

outra coisa: esse é um modelo bem básico, dependendo da necessidade pode-se incrementar a solução pretendida.

 

 

Espero ter ajudado :D

qualquer coisa só dar um grito

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 13/08/2013 at 15:27, Lorena_rio disse:

 

Preciso da série/turma, isso é uma tabela mesmo que continua sendo o série, mas que vale tanto para um quanto para outro dependendo da situação.

 

Aqui reside um erro, talvez apenas um potencial erro, mas é algo indesejado mesmo assim. Vale tanto para um quanto para outro é um pensamento equivocado na modelagem de dados. O que vale para um é uma tabela. O que vale para outro é outra tabela. O que vale para ambos é um relacionamento ou uma união de tabelas.

 

  Em 13/08/2013 at 15:27, Lorena_rio disse:

Período no caso não é manhã, tarde ou noite. Uma faculdade por exemplo pode ter 8 períodos que são os semestres, mas que são chamados de períodos. Nesse caso seria bimestres mesmo só para um exemplo. E também não da para criar séries e turma, já que quando é para algum curso ele não vai ser série somente turma.

 

Período, então, pode ser chamado de turma. Uma faculdade que tenha uma sala por período vai ter apenas o nº semestre do curso tal. Outra que pode ter um curso muito concorrido pode ter nº semestre a e nº semestre b do curso tal. Pra mim é um caso claro das referidas turmas.

 

 

  Em 13/08/2013 at 15:27, Lorena_rio disse:

 

Mas o problema é que do jeito que ele está, se eu definir que matemática vai estar somente no 3º período da TURMA A, ele vai definir matemática somente no 3º período em todas as outras.

 

Adaptando para a modelagem que eu propus, TURMA A estaria na tabela série, que você pode chamar de turma sem o menor problema. 3º período estaria na tabela que eu chamei de turma e você chama de período.

 

2diagram.png

 

 

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.

 

Vou simplificar ao máximo e informar o que o sistema já faz

 

Em Séries eu criei a série chamada: PRIMEIRA SÉRIE DO ENSINO MÉDIO e criei outra. SEGUNDA SÉRIE DO ENSINO MÉDIO

 

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

 

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.

 

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.

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.