MySQL error 1824 - Failed to open the referenced table
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)
);
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
Curtidas 0
Melhor post
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
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
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
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
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.
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
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.
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
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.
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
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:
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