我有一个多对多表,它将person表连接到自身:
CREATE TABLE IF NOT EXISTS friendship(
person_id INTEGER NOT NULL,
friend_id INTEGER NOT NULL,
date_friendship DATE NOT NULL DEFAULT CURRENT_DATE,
PRIMARY KEY(person_id, friend_id),
FOREIGN KEY(person_id) REFERENCES person(id),
FOREIGN KEY(friend_id) REFERENCES person(id),
UNIQUE(friend_id, person_id)
);
INSERT INTO friendship (person_id, friend_id)
VALUES (1, 2),
(1, 3),
(2, 3),
(4, 2);
应该禁止插入像(person_id,friend_id)(2,1)这样的行。因为我们已经插入了(1,2)。我的意思是如果1是2的朋友,那么2也是1的朋友。
我无法强制这样的约束。我尝试了UNIQUE(friend_id, person_id)
,但仍然可以插入:
INSERT INTO friendship (person_id, friend_id)
VALUES (2, 1);
我应该如何处理这种情况?我应该使用不同的数据库吗?
1条答案
按热度按时间eanckbw91#
您可以在两个值的“规范化”组合上创建唯一索引:
然后,您可以从表定义中删除
unique(friend_id, person_id)
。