Eri*_*son 2 mysql database-design constraint
假设我有一个像 Users 这样的表,它有一个 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)
);
Run Code Online (Sandbox Code Playgroud)
INSERT `User` (id, company_id) VALUES
(1,1),
(2,1),
(3,2);
Run Code Online (Sandbox Code Playgroud)
INSERT UserPair (company_id, user1_id, user2_id) VALUES(1,1,2);
Run Code Online (Sandbox Code Playgroud)
INSERT UserPair (company_id, user1_id, user2_id) VALUES(1,1,3);
-- Cannot add or update a child row: a foreign key constraint fails
Run Code Online (Sandbox Code Playgroud)
db<>fiddle(对于 SQL Server,语法略有不同)
该约束失败,因为每个外键仅使用一个company_id
,但相应的父行之一具有不同的company_id
.
归档时间: |
|
查看次数: |
1375 次 |
最近记录: |