在SQLite3中,我有一个代表自反关系的表。这就是我创建它的方式:
CREATE TABLE relationships (
id_relationship INT,
id_person_1 INT NOT NULL,
id_person_2 INT NOT NULL,
description VARCHAR2(300),
PRIMARY KEY(id_relationship),
FOREIGN KEY(id_person_1) REFERENCES people(id_person),
FOREIGN KEY(id_person_2) REFERENCES people(id_person),
CONSTRAINT relationship_not_repeated UNIQUE(id_person_1, id_person_2),
CONSTRAINT ids_not_equal CHECK(id_person_1 != id_person_2)
);
我想添加一个约束以避免重复,因为我有两个相同类型的外键,并且可能会发生以下情况:
ID_RELATIONSHIP ID_PERSON_1 ID_PERSON_2 DESCRIPTION
--------------- --------------- ------------- ---------------
1 114 115 family
2 115 114 family
最佳答案
最简单的方法是要求该id_person_1 < id_person_2
。您可以通过在create table
语句中添加检查约束来做到这一点:
check (id_person_1 < id_person_2);
请注意,如果执行此操作,则可能无法正常运行某些插入语句。您可以通过添加
insert
触发器来解决此问题,该触发器将交换两个人的值,因此较小者优先。
关于sql - 避免在SQL的自反关系中重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24600010/