我正在尝试创建连接用户的关系表。
我有以下结构:
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
请告知
答案 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)
使用“INSTEAD OF INSERT触发器”
http://technet.microsoft.com/en-us/library/ms175089(v=sql.105).aspx