Error creating tables with foreign keys

0

Running the script below the error occurs:

  

Can not 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;
    
asked by anonymous 15.06.2018 / 05:14

1 answer

1

You have two errors in your script .

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

Second, in your table Filme called id_filmes to 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 s more).

Your updated script (and working in 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 ;
    
15.06.2018 / 11:57