2017-04-26 61 views
0

您可以指定一個主鍵爲多個可互換的列嗎?多個可互換的列上的Sqlite主鍵

我已經創建了一個用戶之間的友誼存儲表:

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

我不想有重複的友誼,所以如果有喜歡的條目:「約翰」,「傑克」我不想要添加「傑克」,「約翰」。

這樣做的最佳方法是什麼?謝謝!

+1

這是一個常見問題解答。例如谷歌「stackoverflow sql對稱關係」。 – philipxy

回答

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; 
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) 
); 
+0

我的問題在於,我不會總是有兩種組合。如果你是傑克和約翰的朋友,他們都會告訴你他們的友誼,但如果你只知道約翰,那麼你就不會知道他是傑克的朋友。 –

+0

但我想我可以在將它們插入表格之前排序這些字符串。 –