我有3個表:一個外鍵引用多個唯一鍵
class_a
CREATE TABLE class_a (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
std_id INT NOT NULL UNIQUE,
name varchar(225) NOT NULL)
class_b
CREATE TABLE class_b (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
std_id INT NOT NULL UNIQUE,
name varchar(225) NOT NULL)
sn_number
CREATE TABLE sn_number (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
pin INT NOT NULL UNIQUE,
serial VARCHAR(255) NOT NULL UNIQUE,
std_id INT NULL DEFAULT NULL,
FOREIGN KEY(std_id) REFERENCES class_a(std_id)
)
我如何引用獨特std_id
在class_a
和class_b
表中作爲外鍵在sn_number
表中。
我想實現像ALTER TABLE sn_number ADD FOREIGN KEY(std_id) REFERENCES class_a(std_id), class_b(std_id)
我試圖這樣做ALTER TABLE sn_number ADD FOREIGN KEY(std_id) REFERENCES class_a(std_id)
其次
ALTER TABLE sn_number ADD FOREIGN KEY(std_id) REFERENCES class_b(std_id)
上sn_number
表,但會繼續互相覆蓋。
我已閱讀這些: Foreign Key Referencing Multiple Tables和
Composite key as foreign key (sql) 但我不能找到解決問題的辦法時遇到。
有這個問題是提示你,你有一個數據庫設計的錯誤。一個班不是學生。所以你通常不會引用類表的std_id,而是引用學生表。你應該考慮爲什麼你有兩個類表,因爲當你想要連接時,你可能會遇到同樣的問題。老師或房間上課。基本上:存在類。有學生。存在sn_numbers。每個表都有一個表格,並鏈接它們(如果你願意,你可以從字面上繪製它們並用線條連接它們)。如果您需要專業化,您可以稍後添加它們。 – Solarflare
謝謝。這真的幫了我很多。 – Abk
@ Abk與@Solarflare&另一個答案的評論相反,您需要來自同一個表和列列表的兩個外鍵不是不良設計的症狀。 (雖然你的設計很差)。對於你的代碼的問題,請參閱我的答案。 – philipxy