My SQL Error 1215: Can not add foreign key constraint!

-3

Well when I'm adding the references it gives this error, the error appears from the 3rd alter table that I do!

create database tipoUber_bd;

use tipoUber_bd;

create table users(

    CPFUsuario char(11),
    NomeUsuario varchar(30),
    NumeroUsuario varchar(14),
    SenhaUsuario varchar(25),
    DataNascimentoUsuario date,
    primary key(CPFUsuario)

);

create table cliente(

    IDCliente int not null auto_increment,
    CreditosCliente float,
    AvaliacaoCliente float not null,
    IDUsuarioCliente char(11) not null,
    primary key(IDCliente)

);

create table motorista(

    IDMotorista int not null auto_increment,
    CarteiraAtualizada boolean not null,
    AvaliacaoMotorista float not null,
    PlacaCarro varchar(7) not null,
    NomeCarro varchar(30) not null,
    AnoCarro int not null,
    CorCarro varchar(15) not null,
    IDUsuarioMotorista char(11) not null,
    primary key(IDMotorista)

);

create table central(

    IDAvaliado int not null,
    IDCentral int default '1',
    CPFAvaliadoCliente char(11) not null,
    CPFAvaliadoMotorista char(11) not null,
    AvaliacaoClienteCentral float not null,
    AvaliacaoMotoristaCentral float not null,
    CorridaFeita int not null,
    primary key(IDAvaliado)

);

create table FuncionarioCentral(

    CPFFuncionario varchar(11) not null,
    NomeFuncionario varchar(30) not null,
    DataNascemento date not null,
    FuncaoFuncionario varchar(20) not null,
    LocalTrabalho int not null,
    primary key(CPFFuncionario)

);

create table Corrida(

    IDCorrida int not null auto_increment, 
    Origem varchar(50) not null, 
    Destino varchar(50) not null, 
    NomeCliente varchar(30) not null, 
    NomeMotorista varchar(30) not null, 
    FeedBack text, 
    Tipo varchar(30) not null, 
    Valor float not null,
    Distancia float not null,
    primary key(IDCorrida)

);

create table recebe(

    IDRecebe int not null,
    MotoristaRecebe int not null,
    CorridaRecebe int not null,
    primary key(IDRecebe)

);

create table realiza(

    IDrealiza int not null,
    ClienteRealiza int not null,
    CentralRealiza int not null,
    primary key(IDrealiza)

);

create table realizaCentral(

    IDrealizaCentral int not null,
    CentralRealizou int not null,
    CorridadeRealizou int not null,
    primary key(IDrealizaCentral)

);


alter table cliente add foreign key(IDUsuarioCliente) references users(CPFUsuario);

alter table motorista add foreign key(IDUsuarioMotorista) references users(CPFUsuario);

alter table central add foreign key(CPFAvaliadoCliente) references cliente(IDUsuarioCliente);
alter table central add foreign key(AvaliacaoClienteCentral) references cliente(AvaliacaoCliente);
alter table central add foreign key(CPFAvaliadoMotorista) references motorista(IDUsuarioMotorista);
alter table central add foreign key(AvaliacaoMotoristaCentral) references motorista(AvaliacaoMotorista);
alter table central add foreign key(CorridaFeita) references Corrida(IDCorrida);

alter table FuncionarioCentral add foreign key(LocalTrabalho) references central(IDCentral);

alter table Corrida add foreign key(NomeCliente) references users(NomeUsuario);
alter table Corrida add foreign key(NomeMotorista) references users(NomeUsuario);

alter table recebe add foreign key(MotoristaRecebe) references motorista(IDMotorista);
alter table recebe add foreign key(CorridaRecebe) references Corrida(IDCorrida);

alter table realiza add foreign key(ClienteRealiza) references cliente(IDCliente);
alter table realiza add foreign key(CentralRealiza) references central(IDAvaliado);

alter table realizaCentral add foreign key(CentralRealizou) references central(IDAvaliado);
alter table realizaCentral add foreign key(CorridadeRealizou) references Corrida(IDCorrida);
    
asked by anonymous 15.07.2018 / 07:47

1 answer

0

Problem

To establish relationships between tables, fields must contain indexes.

Check the documentation in: link

Solution

To do this you will have to index the columns of the relationships you refer to

After creating the tables, add the following indexes or change the tables creation SQL to contain the same indexes,

...

create table realizaCentral(

IDrealizaCentral int not null,
CentralRealizou int not null,
CorridadeRealizou int not null,
primary key(IDrealizaCentral)
);


 CREATE INDEX AvaliacaoCliente ON cliente (AvaliacaoCliente);

 CREATE INDEX AvaliacaoMotorista ON motorista (AvaliacaoMotorista);

 CREATE INDEX IDCentral ON central (IDCentral);

 CREATE INDEX NomeCliente ON Corrida (NomeCliente);
 CREATE INDEX NomeMotorista ON Corrida (NomeMotorista);
 CREATE INDEX NomeUsuario ON users (NomeUsuario);

alter table cliente add foreign key(IDUsuarioCliente) references users(CPFUsuario);

...
    
15.07.2018 / 10:59