2014-02-10 53 views
0

我正在嘗試創建連接用戶的關係表。如何創建sql server數據庫列的唯一組合

我有以下結構:

1. id 
2. fromuserid 
3. touserid 
4. state (none, send, accepted, rejected) 

我想有約束,從/到任何一對應該是唯一的。我的意思是不應該有這樣的條目

1, **123,124**, send 
2, **124,123**, send 

首先,我創建了約束,從!=到。它完美的作品:

CONSTRAINT [CK__FromUserId_ToUserId] CHECK (FromUserId != ToUserId), 

然後我試圖創建唯一索引,約束等,沒有任何幫助。

CONSTRAINT [CK_FromUserId_ToUserId_Combination] UNIQUE (FromUserId, ToUserId) 

CREATE UNIQUE NONCLUSTERED INDEX [IX_FromUserId_ToUserId_Combination] 
    ON USERLINKS (FromUserId, ToUserId) 

兩個工作正常,拒絕像記錄:

1, 123,124,send 
2, 123,124,send 

但沒有工作拒絕像記錄:

1, 123,124,send 
2, 124,123,send 

請告知

回答

1

您可以使用計算列進行此操作。添加「leastId」和「greatestId」列,然後在其上創建索引:

alter table relationships 
    add leastId as (case when fromuserid < touserid then fromuserid else touserid end); 

alter table relationships 
    add greatestId as (case when fromuserid < touserid then touserid else fromuserid end); 

create unique index relatinonships_leastId_greastestId_Combination 
    on relationships(leastId, greatestId, combination); 
1
+0

雖然你的鏈接可能在技術上回答這個問題,它如果你可以用你自己的話在這裏解釋答案的重要部分,那將是更可取的。這樣,信息就在這裏,即使鏈接頁面有一天被移動,它仍然可用。 –

相關問題