簡體   English   中英

無法將外鍵添加到mysql

[英]Can't add foreign key to mysql

我有多個表,它們似乎都很好,但是我正在嘗試創建一個表,但是它無法正常工作,因為我一直在不斷收到Error1005 "Foreign key constraint is incorrectly formed"

這是兩個表。 我不知道這是什么問題。

CREATE TABLE Patient(             
ID INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
Name VARCHAR(255) NOT NULL, 
Age TINYINT UNSIGNED,
Sex VARCHAR(10),
Contact INT(11),
Email TEXT(2083), 
PRIMARY KEY(ID) 
);


CREATE TABLE Appointments (
Appointment_No INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
Name VARCHAR(255) NOT NULL,
Contact INT(11),
Date DATE NOT NULL,
Time TIME NOT NULL,
Reason TEXT(2083), 
PRIMARY KEY(Appointment_No),
FOREIGN KEY (Name, Contact) REFERENCES Patient (Name, Contact)

); 

按照我的說法,表結構應如下所示:

CREATE TABLE Patient(             
ID INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
Name VARCHAR(255) NOT NULL, 
Age TINYINT UNSIGNED,
Sex VARCHAR(10),
Contact INT(11),
Email TEXT(2083), 
PRIMARY KEY(ID) 
);

CREATE TABLE Appointments (
Appointment_No INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
Patient_ID INT UNSIGNED NOT NULL,
Date DATE NOT NULL,
Time TIME NOT NULL,
Reason TEXT(2083), 
PRIMARY KEY(Appointment_No),
FOREIGN KEY (Patient_ID) REFERENCES Patient (ID)

); 
FOREIGN KEY (Name, Contact) REFERENCES Patient (Name, Contact)

“患者”表中引用的列必須是鍵的一部分。 理想情況下,您希望Patient(姓名,聯系人)是唯一鍵,因為這樣可以保證外鍵恰好引用了Patient表中的一行。

但是在表定義中,“名稱”和“聯系人”列不是鍵的一部分。 這就解釋了為什么在您的表格設計中出現錯誤。

但是您的桌子設計不好。 名稱和聯系方式不是唯一的選擇,因為兩個人可以共享一個名字,因此從理論上講,您甚至可以讓兩個人具有相同的姓名,並且具有相同的聯系方式(例如,前拳擊手喬治·福爾曼(George Foreman)將他的五個喬治兒子)。

@Shadow是正確的,它是一個更好的主意,而是引用Patient(id) ,因為它已經保證是唯一的。

嘗試將兩個外鍵分成兩行,如下所示:

FOREIGN KEY (Contact) REFERENCES Patient (Contact) 
FOREIGN KEY (Name) REFERENCES Patient (Name)

定義引擎,使sql語句以ENGINE = MyISAM結尾;

它應該解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM