【问题标题】:Check constraint to allow only one combination of two columns检查约束以仅允许两列的一种组合
【发布时间】:2016-02-22 21:29:39
【问题描述】:

我有一张桌子来存储人的电话号码。有一个标志 (IsDefault) 将电话标记为默认电话。每个人应该只有一部手机被标记为默认手机。 是否可以创建一个检查约束以仅允许 PersonId 和 IsDefault = True 的一种组合?

【问题讨论】:

  • 检查约束?不。您想要断言关于 multiple 行的某些内容(有些人尝试使用 UDF 来执行此操作,但他们经常误认为边缘情况)。索引视图或过滤索引,是的。

标签: sql-server data-modeling check-constraint


【解决方案1】:

使用过滤索引,如下所示:

CREATE TABLE PhoneNumber (
ID int primary key,
PhoneNumber nvarchar(20),
PersonID int,
IsDefault bit
)
GO

CREATE UNIQUE INDEX UX_Default_PhoneNumber
ON PhoneNumber(PersonID)
WHERE IsDefault = 1
GO

这仅在 IsDefault 为 true 时强制使用唯一的 PersonID。

【讨论】:

  • 谢谢,这正是我所需要的! :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 2012-05-17
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多