我正在尝试创建一个包含两个字段(id1、id2)的表,其中它们都将 id 引用为其他表中的外键,并且两者都是唯一的。
简单示例:
表“people”,包含字段 id 和 name。表“婚姻”具有字段 id1 和 id2。现在,如果我知道 id=3 的某人与 id=6 结婚,那么就不需要在“婚姻”表中包含 (id1=3, id2=6) 和 (id1=6, id2=3)。
最佳答案
在大多数数据库中,您可以通过 check
约束来完成此操作。像这样的东西:
alter table t add constraint chk_t_id1_id2 check (id1 < id2)
或者,使用表达式或计算列的唯一索引:
create unique index unq_t_id1_id2 on (least(id1, id2), greatest(id1, id2));
最新版本的 MySQL 支持生成列,因此您可以对生成列执行与上述类似的操作。
否则,您需要使用触发器。这绝对是可行的,但是您需要考虑插入和更新的逻辑。触发器比约束更重要。
关于mysql - 创建具有两个双向唯一字段的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44102891/