Error creating tables with foreign keys

Asked

Viewed 38 times

0

While running the script below occurs the error:

Cannot add Foreign key Constraint

when creating the last two tables.

create database Cinema;
use Cinema;

create table Filme (
    id_filmes int primary key auto_increment not null,
    nome_BR varchar (45) not null,
    nome_EN varchar (45) not null,
    anoLanccamento int not null,
    sinopse varchar (45) not null,
    fk_id_diretor int,
    fk_id_genero int,
    constraint foreign key (fk_id_diretor) references diretor (id_diretor),
    constraint foreign key (fk_id_genero) references genero (id_genero)
)engine = InnoDB;

create table Funcionario (
    id_funcionario  int primary key auto_increment,
    nome varchar (45) not null,
    carteiraTrabalho int not null,
    dataContratacao date not null,
    salario float not null
)engine = InnoDB; 

create table diretor (
    id_diretor int primary key auto_increment,
    nome varchar (45) not null
)engine = InnoDB;

create table genero (
id_genero int primary key auto_increment,
nome varchar (45) not null
)engine = InnoDB;

create table funcao (
    id_funcao int primary key auto_increment,
    nome varchar (45) not null
)engine = InnoDB;

create table horario (
    id_horario int primary key auto_increment,
    hora time not null
)engine = InnoDB;

create table sala (
    id_sala int primary key auto_increment,
    nome varchar (45) not null,
    capacidade int 
)engine = InnoDB;

create table premiacao (
    id_premiacao int primary key auto_increment,
    nome varchar (45) not null,
ano int 
)engine = InnoDB;

create table horario_trabalho_funcionario(
    fk_id_horario int,
    fk_id_funcionario int,
    fk_id_funcao int ,
    constraint foreign key (fk_id_horario) references horario (id_horario),
    constraint foreign key (fk_id_funcionario) references funcionario (id_funcionario),
    constraint foreign key (fk_id_funcao) references  funcao (id_funcao)
) engine = InnoDB; 

create table filmes_exibido_sala (
    fk_id_filmes int,
    fk_id_sala int,
    fk_id_horario int,
    constraint foreign key (fk_id_filmes) references filme (id_filme),
    constraint foreign key (fk_id_sala) references sala (id_sala),
    constraint foreign key (fk_id_horario) references  horario (id_horario)
)engine = InnoDB ;

create table filmes_has_premiacao (
    fk_id_filmes int primary key auto_increment,
    fk_id_premiacao int,
    ganhouBOOL varchar (45),
    constraint foreign key (fk_id_filmes) references filme (id_filme),
    constraint foreign key (fk_id_premiacao) references premiacao (id_premiacao)
)engine = InnoDB;
  • try to specify more your problem and ident the code so that it is easier for the community to understand and so try to help you =)

1 answer

1

There are two mistakes in yours script.

First, create tables without foreign keys first. As is, when trying to create the table Filme will fail given that tables director and genero do not yet exist.

Second, in your table Filme calling for id_filmes the primary key. However, in the tables that refer to Filme used id_filme as the primary key of the foreign table (that is, it has a s the most).

Your script updated (and running on Sqlfiddle):

create table funcao (
    id_funcao int primary key auto_increment,
    nome varchar (45) not null
)engine = InnoDB;

create table horario (
    id_horario int primary key auto_increment,
    hora time not null
)engine = InnoDB;

create table sala (
    id_sala int primary key auto_increment,
    nome varchar (45) not null,
    capacidade int 
)engine = InnoDB;

create table premiacao (
    id_premiacao int primary key auto_increment,
    nome varchar (45) not null,
ano int 
)engine = InnoDB;

create table Funcionario (
    id_funcionario  int primary key auto_increment,
    nome varchar (45) not null,
    carteiraTrabalho int not null,
    dataContratacao date not null,
    salario float not null
)engine = InnoDB; 

create table diretor (
    id_diretor int primary key auto_increment,
    nome varchar (45) not null
)engine = InnoDB;

create table genero (
id_genero int primary key auto_increment,
nome varchar (45) not null
)engine = InnoDB;

create table Filme (
    id_filme int primary key auto_increment not null,
    nome_BR varchar (45) not null,
    nome_EN varchar (45) not null,
    anoLanccamento int not null,
    sinopse varchar (45) not null,
    fk_id_diretor int,
    fk_id_genero int,
    constraint foreign key (fk_id_diretor) references diretor (id_diretor),
    constraint foreign key (fk_id_genero) references genero (id_genero)
)engine = InnoDB;


create table horario_trabalho_funcionario(
    fk_id_horario int,
    fk_id_funcionario int,
    fk_id_funcao int ,
    constraint foreign key (fk_id_horario) references horario (id_horario),
    constraint foreign key (fk_id_funcionario) references funcionario (id_funcionario),
    constraint foreign key (fk_id_funcao) references  funcao (id_funcao)
) engine = InnoDB; 

create table filmes_has_premiacao (
    fk_id_filmes int primary key auto_increment,
    fk_id_premiacao int,
    ganhouBOOL varchar (45),
    constraint foreign key (fk_id_filmes) references filme (id_filme),
    constraint foreign key (fk_id_premiacao) references premiacao (id_premiacao)
)engine = InnoDB;

create table filmes_exibido_sala (
    fk_id_filmes int,
    fk_id_sala int,
    fk_id_horario int,
    constraint foreign key (fk_id_filmes) references filme (id_filme),
    constraint foreign key (fk_id_sala) references sala (id_sala),
    constraint foreign key (fk_id_horario) references  horario (id_horario)
)engine = InnoDB ;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.