避免在SQL中的自反关系中重复记录

时间:2014-07-06 20:24:34

标签: sql sqlite

在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

1 个答案:

答案 0 :(得分:3)

最简单的方法是要求id_person_1 < id_person_2。您可以通过向create table语句添加检查约束来执行此操作:

check (id_person_1 < id_person_2);

请注意,如果您这样做,那么您期望工作的一些插入语句可能不起作用。您可以通过添加insert触发器来解决此问题,该触发器将交换两个人的值,因此较小的是第一个。