多个可互换列上的Sqlite主键

时间:2017-04-26 19:43:54

标签: sql sqlite primary-key composite-primary-key

您可以将主键指定为多个可互换的列吗?

我创建了一个存储用户之间友谊的表格:

CREATE TABLE FRIENDSHIPS (
    AN_USER_ID TEXT NOT NULL,
    ANOTHER_USER_ID TEXT NOT NULL,
    PRIMARY KEY (AN_USER_ID, ANOTHER_USER_ID)
);

我不想拥有重复的友谊,所以如果有以下条目:' John',' Jack'我不想要杰克'约翰'待补充。

最好的方法是什么?谢谢!

2 个答案:

答案 0 :(得分:1)

我无法通过UNIQUEPRIMARY KEY约束找到任何方法。您可以使用触发器(除了PRIMARY KEY约束):

CREATE TRIGGER insertCheck
BEFORE INSERT ON FRIENDSHIPS
BEGIN
    SELECT RAISE(ROLLBACK, 'There can be only one combination.')
    WHERE EXISTS (SELECT *
                  FROM FRIENDSHIPS
                  WHERE ANOTHER_USER_ID = NEW.AN_USER_ID AND AN_USER_ID = NEW.ANOTHER_USER_ID);
END;

答案 1 :(得分:0)

为确保您没有重复对,您可以添加第一个值必须始终小于第二个值的约束:

CREATE TABLE Friendships (
    A_User_UD       TEXT NOT NULL,
    Another_User_ID TEXT NOT NULL,
    PRIMARY KEY (A_User_ID, Another_User_ID),
    CHECK (A_User_ID < Another_User_ID)
);