【发布时间】:2012-12-15 18:33:15
【问题描述】:
假设我有一张带有地址的表,我希望所有者只有一个主要地址。 我先定义索引/键还是检查约束? 这是什么表达方式?
TABLE_Address
--OwnerId
--IsMain (not null able)
--City etc....
所以我需要一个独特的 (IsMain ==true AND ownerId) 组合
【问题讨论】:
-
请说明 SQL Server 的版本,因为答案各不相同。如果 2008+ 可以使用过滤索引,如果 2000/2005 可以使用索引视图。
-
这是 SQL Server 2012。过滤索引是否要求除唯一值之外的所有其他值都为 Null?
-
对不起,我以为我选择了一个副本,其中包含两个示例语法。对于过滤索引,您只需要
CREATE UNIQUE INDEX ix ON TABLE_Address(ownerId) WHERE IsMain=1 -
该语句还将 IsMain=false 值限制为唯一值,所以我不能有多个非主地址......这应该只适用于 Null 值吗?
-
不,它并不限制 IsMain=false 是唯一的,因为它们根本不包含在过滤索引中。它们被
WHERE子句排除在外。 SQL Server 没有布尔数据类型和false。您实际使用的是什么数据类型?我假设bit因此1或0
标签: sql sql-server unique-constraint check-constraints