1
votes

Numéro d'erreur: 3780 La colonne de référence '% s' et la colonne référencée '% s' dans la contrainte de clé étrangère '% s' sont incompatibles

DROP DATABASE IF EXISTS ProviderPatients;
CREATE DATABASE ProviderPatients;
USE ProviderPatients;

CREATE TABLE IF NOT EXISTS Date_Dim (
    Date_ID  integer not null,
    Date_ date,
    Full_Date_Des varchar(25) not null,
    Day_Of_Week int(11) not null,
    Calender_Year int(11) not null,
    Weekday_Indicator int(11) not null,
    primary key(Date_ID));

CREATE TABLE IF NOT EXISTS Insurer_DIM (
    Insurer_ID  int(11) not null,
    Insurer_Name varchar(25) not null,
    Line_Of_Buissness varchar(25) not null,
    primary key(Insurer_ID));

CREATE TABLE IF NOT EXISTS Member_DIM (
    Member_ID   int(11) not null,
    Member_Name varchar(25) not null,
    Age         int(11) not null,
    Ethnicity   varchar(25) not null,
    Health_Condition varchar(25) not null,
    primary key(Member_ID));

CREATE TABLE IF NOT EXISTS Geography_Dim (
    Geography_ID varchar(25) not null,
    Country     varchar(25) not null,
    State       varchar(10) not null,
    State_Code  int(11) not null,
    County_Code int(11) not null,
    primary key(Geography_ID));

CREATE TABLE Provider_Dim (
    Provider_ID int(11) not null, 
    Provider_Name VARCHAR(45) NOT NULL, 
    Gender Varchar(25) Not Null,
    NPI     Varchar(25) Not Null,
    Credential Varchar(25) Not Null, 
PRIMARY KEY(Provider_ID));

CREATE TABLE Eval_Fact_Table(
Date_ID int(11) not null,
Member_ID int(11) not null,
Provider_ID int(11) not null,
Insurer_ID int(11) not null,
Geography_ID int(11) not null,
Num_Visits int(11) not null,
Eval_Costint int(11) not null,
Eval_Start date not null,
Eval_End date not null, 
FOREIGN KEY (Date_ID) References Date_Dim (Date_Id) on delete restrict,
FOREIGN KEY (Member_ID) References Member_Dim (Member_ID) on delete restrict,
FOREIGN KEY (Geography_ID) References Geography_Dim (Geography_ID) on delete restrict,
FOREIGN KEY (Provider_ID) References Proveider_Dim (Provider_ID) on delete restrict,
FOREIGN KEY (Insurer_ID) References Insurer_Dim (Insurer_ID)on delete restrict);
Error number: 3780; Symbol: ER_FK_INCOMPATIBLE_COLUMNS; SQLSTATE: HY000Message:Error Code: 3780. Referencing column 'Geography_ID' and referenced column 'Geography_ID' in foreign key constraint 'eval_fact_table_ibfk_3' are incompatible.

0 commentaires

3 Réponses :


3
votes

Erreur Le Referencing column 'Geography_ID' and referenced column 'Geography_ID' in foreign key constraint 'eval_fact_table_ibfk_3' are incompatible.

est assez clair, les colonnes sont incompatibles:

CREATE TABLE IF NOT EXISTS Geography_Dim (
    Geography_ID varchar(25) not null,

CREATE TABLE Eval_Fact_Table(
... truncated
    Geography_ID int(11) not null,

Faites-les du même type ou supprimez la contrainte de clé étrangère.

Vous pouvez en savoir plus sur les contraintes de clé étrangère dans la documentation , la partie la plus intéressante est

Les colonnes correspondantes dans la clé étrangère et la clé référencée doivent avoir des types de données similaires.

Ce n'est pas vrai dans votre cas: varchar(25) vs int(11)


0 commentaires

1
votes

Changez simplement Geograpy_ID sur la table Geography_Dim en Geography_ID int(11) ou changez Geograpy_ID sur Eval_Fact_Table en Geography_ID varchar(25) pour résoudre le problème.


0 commentaires

0
votes

J'ai essayé toutes les autres méthodes, mais j'ai trouvé cela utile car cela fonctionnait pour moi. Il s'applique également à la nouvelle version de MySQL (v8.0)

 CREATE TABLE Customers(
    Customers_ID INT(10) PRIMARY KEY AUTO_INCREMENT,
    Customers_name varchar(40) not null,
    Customers_phone INT(10) not null,
    Customers_email varchar(40) not null,
    date_became_customer DATE not null,
    login varchar(40) not null,
    password varchar(40) not null,
    other_details varchar(40) not null,
    Customer_Types_code int(10) not null
REFERENCES Customer_types(Customer_Types_code));


0 commentaires