如何创建sql server数据库列的唯一组合

时间:2014-02-10 01:52:30

标签: sql sql-server indexing unique unique-constraint

我正在尝试创建连接用户的关系表。

我有以下结构:

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

请告知

2 个答案:

答案 0 :(得分:1)

您可以使用计算列执行此操作。添加“leastId”和“greatId”列,然后在它们上创建索引:

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 :(得分:1)