MySQL error 1824 - Failed to open the referenced table

SQL

06/08/2021

olá, sou bem iniciente em sql e tenho um trabalho para entregar, porém meu script está com esse erro: error 1824 - failed to open the referenced table ''docente''

acredito que tenha mais erros no código além desse...





drop database victor_hugo_barbosa_da_silva;
create database victor_hugo_barbosa_da_silva;
use victor_hugo_barbosa_da_silva;



create table departamento(
dep_id int not null,
dep_nome varchar(45),
fk_docente_id int,
primary key (dep_id),
foreign key(fk_docente_id) references docente (docente_id)
);



create table docente(
doc_id int not null,
doc_nome varchar(45),
fk_dep_id int not null,
primary key (doc_id),
foreign key (fk_dep_id) references departamento (dep_id)
);



create table curso(
cur_id int not null,
cur_nome varchar(45),
fk_dep_id int,
primary key (cur_id),
foreign key (fk_dep_id) references departamento (dep_id)
);



create table discente (
disc_ra int not null,
disc_nome varchar(45),
fk_curso_id int,
primary key (disc_ra),
foreign key (fk_curso_id) references curso (curso_id),
dis_email varchar(30)
);



create table atribuicao(
primary key (pk_fk_disciplina_cod),
primary key (pk_fk_docente_id)
);



create table disciplina(
disc_cod int not null,
disc_nome varchar(45),
fk_curso_id int,
primary key (disc_cod),
foreign key (fk_curso_id) references curso (curso_id)
);



create table matricula(
primary key (pk_fk_discente_ra),
primary key (pk_fk_disciplina_cod)
);
Victor Hugo

Victor Hugo

Curtidas 0

Melhor post

Luiz Santos

Luiz Santos

06/08/2021

Boa tarde Vitor Hugo.
Em que momento da o erro?

Uma sugestão, vai rodando um pedaço do código de cada vez.
Lembrando que o SQL, o que determina que "um comando" terminou são os ";" (ponto e vírgula)
Então mesmo que vc pegue um comando CREATETABLE, se tentar executar uma linha vai dar erro, vc tem que pegar o comando do "CREATE TABLE", até o ";".

Execute dessa forma, bloco por bloco, e veja onde vai parar.

Espero ter conseguido te dar uma luz.

Grande abs
GOSTEI 1

Mais Respostas

Victor Hugo

Victor Hugo

06/08/2021

Boa tarde Vitor Hugo.
Em que momento da o erro?

Uma sugestão, vai rodando um pedaço do código de cada vez.
Lembrando que o SQL, o que determina que "um comando" terminou são os ";" (ponto e vírgula)
Então mesmo que vc pegue um comando CREATETABLE, se tentar executar uma linha vai dar erro, vc tem que pegar o comando do "CREATE TABLE", até o ";".

Execute dessa forma, bloco por bloco, e veja onde vai parar.

Espero ter conseguido te dar uma luz.

Grande abs


Então, quando eu tento executar a partir do ";" ali do fim da tabela departamento ele me da esse erro, e quando tento qualquer uma das outras tabelas ele também apresenta este erro. Eu dei uma mudada no código, mas ainda continua os erros.

DROP DATABASE VICTOR_HUGO_BARBOSA_DA_SILVA;
CREATE DATABASE VICTOR_HUGO_BARBOSA_DA_SILVA;
USE VICTOR_HUGO_BARBOSA_DA_SILVA;

CREATE TABLE DEPARTAMENTO(
DEP_ID INT NOT NULL,
DEP_NOME VARCHAR(45),
FK_DOC_ID INT,
PRIMARY KEY (DEP_ID),
FOREIGN KEY(FK_DOC_ID) REFERENCES DOCENTE (DOC_ID)
);

CREATE TABLE DOCENTE(
DOC_ID INT NOT NULL,
DOC_NOME VARCHAR(45),
FK_DEP_ID INT NOT NULL,
PRIMARY KEY (DOC_ID),
FOREIGN KEY (FK_DEP_ID) REFERENCES DEPARTAMENTO (DEP_ID)
);

CREATE TABLE CURSO(
CUR_ID INT NOT NULL,
CUR_NOME VARCHAR(45),
FK_DEP_ID INT NOT NULL,
PRIMARY KEY (CUR_ID),
FOREIGN KEY (FK_DEP_ID) REFERENCES DEPARTAMENTO (DEP_ID)
);

CREATE TABLE DISCENTE (
DISC_RA INT NOT NULL,
DISC_NOME VARCHAR(45),
FK_CURSO_ID INT NOT NULL,
PRIMARY KEY (DISC_RA),
FOREIGN KEY (FK_CURSO_ID) REFERENCES CURSO (CURSO_ID),
DIS_EMAIL VARCHAR(30)
);

CREATE TABLE ATRIBUICAO(
PK_FK_DISCIP_COD INT NOT NULL,
PK_FK_DOC_ID INT NOT NULL,
PRIMARY KEY (PK_FK_DISCIP_COD, PK_FK_DOC_ID),
FOREIGN KEY (PK_FK_DISCIP_COD) REFERENCES DISCIPLINA (DISCIP_ID),
FOREIGN KEY (PK_FK_DOC_ID) REFERENCES DOCENTE (DOC_ID)
);

CREATE TABLE DISCIPLINA(
DISCIP_COD INT NOT NULL,
DISCIP_NOME VARCHAR(45),
FK_CUR_ID INT NOT NULL,
PRIMARY KEY (DISCIP_COD),
FOREIGN KEY (FK_CUR_ID) REFERENCES CURSO (CUR_ID)
);

CREATE TABLE MATRICULA(
PK_FK_DISC_RA INT NOT NULL,
PK_FK_DISCIP_COD INT NOT NULL,
PRIMARY KEY (PK_FK_DISC_RA, PK_FK_DISCIP_COD),
FOREIGN KEY (PK_FK_DISC_RA) REFERENCES DISCENTE (DISC_ID),
FOREIGN KEY (PK_FK_DISCIP_COD) REFERENCES DISCIPLINA (DISCIP_COD)
);


GOSTEI 0
Luiz Santos

Luiz Santos

06/08/2021

Ok.
Vamos por partes.

Fui analisar melhor seu código.

Dica 1, nunca crie as chaves estrangeiras (FOREIGN KEY) durante a criação das tabelas.
Pra você pode criar uma chave primária, vc precisa que as 2 tabelas estejam criadas, a tabela que "cede" a chave e a tabela que "recebe" a chave.

Seu primeiro comando é esse (descontando o "create database" e o "use":


CREATE TABLE DEPARTAMENTO(
DEP_ID INT NOT NULL,
DEP_NOME VARCHAR(45),
FK_DOC_ID INT,
PRIMARY KEY (DEP_ID),
FOREIGN KEY(FK_DOC_ID) REFERENCES DOCENTE (DOC_ID)
);

Você não tem como colocar a chave estrangeira ai, porque a a tabela docente ainda não existe.

Mude o código, crie as chaves estrangeiras depois de ter criado todas as tabelas.

Só isso já vai te ajudar bastante.
GOSTEI 1
Victor Hugo

Victor Hugo

06/08/2021

Ok.
Vamos por partes.

Fui analisar melhor seu código.

Dica 1, nunca crie as chaves estrangeiras (FOREIGN KEY) durante a criação das tabelas.
Pra você pode criar uma chave primária, vc precisa que as 2 tabelas estejam criadas, a tabela que "cede" a chave e a tabela que "recebe" a chave.

Seu primeiro comando é esse (descontando o "create database" e o "use":


CREATE TABLE DEPARTAMENTO(
DEP_ID INT NOT NULL,
DEP_NOME VARCHAR(45),
FK_DOC_ID INT,
PRIMARY KEY (DEP_ID),
FOREIGN KEY(FK_DOC_ID) REFERENCES DOCENTE (DOC_ID)
);

Você não tem como colocar a chave estrangeira ai, porque a a tabela docente ainda não existe.

Mude o código, crie as chaves estrangeiras depois de ter criado todas as tabelas.

Só isso já vai te ajudar bastante.


Fiz isso, retirei as chaves estrangeiras, ai ele criou as tabelas. Porem, quando adiciono elas e executo, ele me diz que a tabela em questão já existe. Isso para qualquer uma das tabelas.
GOSTEI 0
Luiz Santos

Luiz Santos

06/08/2021

Outra coisa que eu observei.

Vc tem uma FK em docente que referencia departamento, e uma FK em departamento que referencia docente.
Você não pode fazer isso.
Tem que respeitar a cardinalidade.
Seria o que 1 docente em N departamentos ou 1 departamento com N docentes.
GOSTEI 0
Luiz Santos

Luiz Santos

06/08/2021

Pela descrição do erro, vc está tentando criar a chave primeira com o CREATE.
Depois que a tabela já existe, vc tem que usar o comando ALTER

Assim:

alter table departamento
add constraint fk_docente foreign key(fk_docente_id) references docente (docente_id)
GOSTEI 0
POSTAR