【问题标题】:How to create unique combination of sql server database columns如何创建 sql server 数据库列的唯一组合
【发布时间】:2014-03-07 05:32:00
【问题描述】:

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

我有以下结构:

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

请指教

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 虽然您的链接可能在技术上回答了这个问题,但如果您能在此处用您自己的话解释答案的基本部分会更好。这样,信息就在此处,即使链接的页面某天被移动,信息也将保持可用。
      猜你喜欢
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 2012-07-30
      • 2010-09-09
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      相关资源
      最近更新 更多