0

我需要使用 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?

4

3 回答 3

1

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

create table Relation
(
  ID int identity primary key,
  Contact1 int not null,
  Contact2 int not null,
  unique (Contact1, Contact2),
  check (Contact1 < Contact2)
)
于 2012-05-13T14:50:40.710 回答
1

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

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

如果 5, 3 已经存在,此解决方案将允许输入 5, 3 但不能输入 3, 5。

于 2012-05-13T15:34:55.437 回答
0

你在建模什么逻辑/规则?如果不知道这个问题的答案,就很难确切地知道问题是什么。

话虽如此,看起来您的表已非规范化,并且可能会使应用约束变得复杂。如果您试图简单地强制执行“联系人对于 id 是唯一的”,则取出 Contact 2 列并在 Contact 1 上设置唯一约束

于 2012-05-13T16:50:41.590 回答