多列中的唯一索引键

时间:2012-05-13 14:18:51

标签: sql sql-server unique-constraint unique-index multiple-columns

我需要使用SQL Server在我的表中定义唯一的索引键。

例如:

ID    Contact1     Contact2    RelationType
-------------------------------------------------------------------
1     1            2           sister       // 1 is the 2nd sister
2     3            4           brother      // 3 is the 4th brother
3     5            1           father       // 5 is the 1st father
4     2            1           sister       // bad entry !!!

现在,我如何禁止使用唯一索引键插入上表中第4个ID的错误数据?

3 个答案:

答案 0 :(得分:1)

您可以将唯一键与检查约束结合使用,使您在Contact1中具有较低的值。

create table Relation
(
  ID int identity primary key,
  Contact1 int not null,
  Contact2 int not null,
  unique (Contact1, Contact2),
  check (Contact1 < Contact2)
)

答案 1 :(得分:1)

您可以创建一个计算列,其中包含两个数字(首先是较小的一个)的字符表示,然后在计算列上创建一个唯一约束。

case when Contact1 > Contact2 then convert(varchar, Contact2) + convert(varchar, Contact1)
else convert(varchar, Contact1) + convert(varchar, Contact2)

此解决方案允许输入5,3但不是3,5 IF 5,3已经存在。

答案 2 :(得分:0)

你在建模什么逻辑/规则?在不知道答案的情况下,很难确切地知道问题是什么。

话虽这么说,看起来你的表是非规范化的,可能会使约束条件变得复杂。如果您尝试简单地强制执行“联系人对于ID唯一”,请取出联系人2列并在联系人1上添加唯一约束