Ir ao conteúdo

Posts recomendados

Postado

Me deparei com esse exercício passado pelo professor:

image.png.ca9efb3a87023270b9472af9f9b5d0eb.png

Eu consigo criar e popular todas as tabelas menos a tabela Histórico.

meu código está assim:

 

create table Historico(
mat int not null,
cod_disc varchar(50) not null,
cod_turma int not null,
cod_prof int not null,
ano int not null,
frequencia int not null,
nota int not null,
CONSTRAINT  mat FOREIGN KEY (mat) REFERENCES aluno (mat),
CONSTRAINT cod_disc FOREIGN KEY (cod_disc) REFERENCES Disciplina ( cod_disc),
CONSTRAINT cod_turma FOREIGN KEY (cod_turma) REFERENCES turma (cod_turma),
CONSTRAINT cod_prof FOREIGN KEY (cod_prof) REFERENCES professor (cod_prof),
CONSTRAINT ano FOREIGN KEY (ano) REFERENCES turma (cod_turma)
);

 

Quando eu tento criar essa tabela, ele me apresenta o seguinte erro:

Citação

13:58:46    create table Historico( mat int not null, cod_disc varchar(50) not null, cod_turma int not null, cod_prof int not null, ano int not null, frequencia int not null, nota int not null, CONSTRAINT  mat FOREIGN KEY (mat) REFERENCES aluno (mat), CONSTRAINT cod_disc FOREIGN KEY (cod_disc) REFERENCES Disciplina ( cod_disc), CONSTRAINT cod_turma FOREIGN KEY (cod_turma) REFERENCES turma (cod_turma), CONSTRAINT cod_prof FOREIGN KEY (cod_prof) REFERENCES professor (cod_prof), CONSTRAINT ano FOREIGN KEY (ano) REFERENCES turma (cod_turma) )    Error Code: 1005. Can't create table `db_itens`.`historico` (errno: 150 "Foreign key constraint is incorrectly formed")    0.062 sec

 

Caso haja a necessidade posso postar aqui também o script que criei e popular as outras tabelas.

 

Queria saber como consertar esse erro, enquanto satisfaço essa a imagem com aquelas FK.

Postado

Acho que você esta referenciando a coluna errada, CONSTRAINT ano FOREIGN KEY (ano) REFERENCES turma (cod_turma) você esta referenciando o ano com o código da turma, já existe uma chave estrangeira referenciando essa coluna CONSTRAINT cod_turma FOREIGN KEY (cod_turma) REFERENCES turma (cod_turma)

Postado

@aerolipe O código da professora está assim

create table if not exists Historico(
	FK_MAT varchar(10) not null,
    FK_COD_DISC varchar(05) not null,
    FK_COD_TURMA smallint not null,
    FK_COD_PROF varchar(07) not null,
    FK_ANO year not null,
    frequencia float not null,
    nota float not null,
    primary key (FK_MAT, FK_COD_DISC,FK_COD_TURMA,FK_COD_PROF,FK_ANO),
    
    constraint fk_mat_historico 
    foreign key(FK_MAT)
    references Alunos(MAT),
    
    constraint fks_turma_historico 
    foreign key(FK_COD_DISC, FK_COD_TURMA, FK_COD_PROF, FK_ANO) 
    references Turma(COD_DISC, COD_TURMA, COD_PROF, ano));

E como ela é péssima na explicação, se enrolou toda pra explicar o motivo de ter que criar os campos de atributos com FK_MAT... e assim por diante.

 

Nessa parte:

primary key (FK_MAT, FK_COD_DISC,FK_COD_TURMA,FK_COD_PROF,FK_ANO),

No caso ela determina que os atributos que FK são PK's dessa tabela Histórico.

 

Nesse caso abaixo a FK_MAT está em outra 'construção' pois ela pertence a outra tabela, por isso a divisão

    constraint fk_mat_historico 
    foreign key(FK_MAT)
    references Alunos(MAT),

 

Fiquei confuso de qual seria a explicação dela colocar como FK as Keys (FK_COD_DISC por exemplo), sendo que foram atributos criados nessa mesma tabela, e declaradas como PK.

    constraint fks_turma_historico 
    foreign key(FK_COD_DISC, FK_COD_TURMA, FK_COD_PROF, FK_ANO) 
    references Turma(COD_DISC, COD_TURMA, COD_PROF, ano));

 

Peço desculpas pelo modo como estou comentando, é basicamente pra ver se eu entendi a 'solução' dela.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...