My SQL Error 1215: Cannot add Foreign key Constraint!

Asked

Viewed 134 times

-3

Well when I’m adding the references he gives this error, the error appears from the 3rd alter table what 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);

1 answer

-1

Problem

To establish relationships between tables, fields must contain indexes.

Checks the documentation in: https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html

Solution

For that you will have to index to columns that are part of the relationships you refer

After creating the tables add the following indexes or change the SQL of creating the tables 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);

...

Browser other questions tagged

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