Mysql
約束 2 個外鍵具有相同的輔助列值
假設我有一個表,例如使用者,它有一個 id 和一個 company_id,我想創建一個第二個表,其中包含一對使用者 id 的 ex:(primary_key_id,user1_id,user2_id)。
這些使用者對的使用者 ID 必須在同一家公司。
如何向我的數據庫添加一個約束來要求這個?
您可以在表中創建唯一約束
company_id
,然後創建兩個引用它們的外鍵。id``User
MySQL 的語法
CREATE TABLE `User` ( id int PRIMARY KEY, company_id int, UNIQUE KEY (company_id, id) ); CREATE TABLE UserPair ( company_id int, user1_id int, user2_id int, PRIMARY KEY (company_id, user1_id, user2_id), FOREIGN KEY (company_id, user1_id) REFERENCES `User` (company_id, id), FOREIGN KEY (company_id, user2_id) REFERENCES `User` (company_id, id) );
INSERT `User` (id, company_id) VALUES (1,1), (2,1), (3,2);
INSERT UserPair (company_id, user1_id, user2_id) VALUES(1,1,2);
INSERT UserPair (company_id, user1_id, user2_id) VALUES(1,1,3); -- Cannot add or update a child row: a foreign key constraint fails
db<>fiddle(對於 SQL Server,語法略有不同)
約束失敗,因為
company_id
每個外鍵只使用一個,但對應的父行之一具有不同的company_id
.