criar relacionamento entre tabelas
Como vai pessoal?
seguinte tenho essas tabelas
CREATE TABLE IF NOT EXISTS trabalho.modalidade (
CodModalidade INT(11) NULL AUTO_INCREMENT ,
Nome CHAR(20) NOT NULL ,
PRIMARY KEY (CodModalidade) ,
UNIQUE INDEX CodModalidade_UNIQUE (CodModalidade ASC) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE TABLE IF NOT EXISTS `trabalho`.`modalidadedsemana` (
Codmodalidadedsemana INT(11) NOT NULL ,
modalidade_CodModalidade INT(11) NOT NULL ,
Domingo TINYINT(1) NULL DEFAULT NULL ,
Segunda TINYINT(1) NULL DEFAULT NULL ,
Terca TINYINT(1) NULL DEFAULT NULL ,
Quarta TINYINT(1) NULL DEFAULT NULL ,
Quinta TINYINT(1) NULL DEFAULT NULL ,
Sexta TINYINT(1) NULL DEFAULT NULL ,
Sabado TINYINT(1) NULL DEFAULT NULL ,
PRIMARY KEY (Codmodalidadedsemana, modalidade_CodModalidade) ,
INDEX fk_modalidadedsemana_modalidade1_idx (modalidade_CodModalidade ASC) ,
CONSTRAINT fk_modalidadedsemana_modalidade1
FOREIGN KEY (modalidade_CodModalidade )
REFERENCES trabalho.modalidade (CodModalidade )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE TABLE IF NOT EXISTS `trabalho`.`modalidadeturno` (
CodModalidade INT(11) NOT NULL ,
Manha TINYINT(1) NULL ,
Tarde TINYINT(1) NULL DEFAULT NULL ,
Noite TINYINT(1) NULL DEFAULT NULL ,
ManhaT TIME NULL DEFAULT NULL ,
TardeT TIME NULL DEFAULT NULL ,
NoiteT TIME NULL DEFAULT NULL ,
PRIMARY KEY (CodModalidade) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
A tabela modalidadedseman é só para verificação se o dia foi selecionado.
A tabela modalidadeturno é para os dias da semana que pode ir ate 7 de cada modalidade é nessa parte que não estou conseguindo pois cada modalidade pode ter ate 7 referencias nessa tabela ficando uma especia de matriz [x-modalidades],[dias_da_semana] não sei se é possível criar esse tipo de matriz em uma mesma tabela tipo duas primary key na mesma tabela
e outra como fica o relacionamento já que temos a tabela modalidade MUITOS --para-- modalidadedseman MUITOS ate 7 na verdade
tinha feito no mysql-workbench o relacionamento de muito para muitos com essa tabela abaixo
CREATE TABLE IF NOT EXISTS trabalho.modalidade_has_modalidadeturno (
modalidade_CodModalidade INT(11) NOT NULL ,
modalidadeturno_CodModalidade INT(11) NOT NULL ,
PRIMARY KEY (modalidade_CodModalidade, modalidadeturno_CodModalidade) ,
INDEX fk_modalidade_has_modalidadeturno_modalidadeturno1_idx (modalidadeturno_CodModalidade ASC) ,
INDEX fk_modalidade_has_modalidadeturno_modalidade1_idx (modalidade_CodModalidade ASC) ,
CONSTRAINT fk_modalidade_has_modalidadeturno_modalidade1
FOREIGN KEY (modalidade_CodModalidade )
REFERENCES trabalho.modalidade (CodModalidade )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_modalidade_has_modalidadeturno_modalidadeturno1
FOREIGN KEY (modalidadeturno_CodModalidade )
REFERENCES trabalho.modalidadeturno (CodModalidade )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
ai comecei a cadastrar
INSERT INTO modalidade(Nome) VALUES('teste');
INSERT INTO modalidadeturno(CodDiaSemana,Manha,Tarde,Noite,ManhaT,TardeT,NoiteT) VALUES(1,false,false,true,"00:00:00","00:00:00","12:12:00");
INSERT INTO modalidade_has_modalidadeturno(modalidade_CodModalidade,modalidadeturno_CodDiaSe
mana) VALUES(1,1);
INSERT INTO modalidadeturno(CodDiaSemana,Manha,Tarde,Noite,ManhaT,TardeT,NoiteT) VALUES(2,true,false,true,"10:10:10","00:00:00","12:12:00");
INSERT INTO modalidade_has_modalidadeturno(modalidade_CodModalidade,modalidadeturno_CodDiaSe
mana) VALUES(1,2);
INSERT INTO modalidadeturno(CodDiaSemana,Manha,Tarde,Noite,ManhaT,TardeT,NoiteT) VALUES(3,true,false,true,"10:10:10","00:00:00","12:12:00");
INSERT INTO modalidade_has_modalidadeturno(modalidade_CodModalidade,modalidadeturno_CodDiaSe
mana) VALUES(1,3);
INSERT INTO modalidadeturno(CodDiaSemana,Manha,Tarde,Noite,ManhaT,TardeT,NoiteT) VALUES(4,true,false,true,"10:10:10","00:00:00","12:12:00");
INSERT INTO modalidade_has_modalidadeturno(modalidade_CodModalidade,modalidadeturno_CodDiaSe
mana) VALUES(1,4);
INSERT INTO modalidadeturno(CodDiaSemana,Manha,Tarde,Noite,ManhaT,TardeT,NoiteT) VALUES(5,true,false,true,"10:10:10","00:00:00","12:12:00");
INSERT INTO modalidade_has_modalidadeturno(modalidade_CodModalidade,modalidadeturno_CodDiaSe
mana) VALUES(1,5);
INSERT INTO modalidadeturno(CodDiaSemana,Manha,Tarde,Noite,ManhaT,TardeT,NoiteT) VALUES(6,true,false,true,"10:10:10","00:00:00","12:12:00");
INSERT INTO modalidade_has_modalidadeturno(modalidade_CodModalidade,modalidadeturno_CodDiaSe
mana) VALUES(1,6);
INSERT INTO modalidadeturno(CodDiaSemana,Manha,Tarde,Noite,ManhaT,TardeT,NoiteT) VALUES(7,true,false,true,"10:10:10","00:00:00","12:12:00");
INSERT INTO modalidade_has_modalidadeturno(modalidade_CodModalidade,modalidadeturno_CodDiaSe
mana) VALUES(1,7);
Nessa parte fiz um select para testar
SELECT modalidade.Nome,Modalidadeturno.Manha,Modalidadeturno.Tarde,Modalidadeturno.Noit
e,Modalidadeturno.ManhaT,Modalidadeturno.TardeT,Modalidadeturno.NoiteT
FROM Modalidade,Modalidadeturno,
INNER JOIN modalidade_has_modalidadeturno ON (modalidade_has_modalidadeturno.modalidadeturno_CodDiaSemana = modalidadeturno.CodDiaSemana and modalidade_has_modalidadeturno.modalidade_CodModalidade=1);
ate ai funciona normal
mas agora tenho que inserir uma nova modalidade
INSERT INTO modalidade(Nome) VALUES('teste1');
INSERT INTO modalidadeturno(CodDiaSemana,Manha,Tarde,Noite,ManhaT,TardeT,NoiteT) VALUES(1,false,false,true,"00:00:00","00:00:00","12:12:00");
INSERT INTO modalidade_has_modalidadeturno(modalidade_CodModalidade,modalidadeturno_CodDiaS[
code][/code]emana) VALUES(2,1);
já não vai, a tabela modalidadeturno não aceita duplicar o campo CodDiaSemana
como ficaria a resolução desse problema ? e sobre la em cima também se é possível criar matriz no banco de dados?
se alguém tiver ideias de como simplificar essas tabelas agradeço.
Discussão (1)
Carregando comentários...