我需要使用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的错误数据?
答案 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上添加唯一约束