可能重复:
简单的 CHECK 约束不是那么简单
我们有一个包含用户角色的表。它看起来像这样:
Id, RoleId, PersonId, Active
活动列用于软删除功能:当您删除用户的角色时,您实际上设置active
为false
. 因此,您可以有多个具有相同roleid-personid-active
组合的行,但仅当活动位设置为 false 时。所以这是有效的数据:
Id RoleId PersonId Active
1 1 1 false
2 1 1 false
3 1 1 false
4 1 1 false
但这不是,因为您在任何时候都只能拥有一个活动角色(因此不应插入记录 3):
Id RoleId PersonId Active
1 1 1 false
2 1 1 true
3 1 1 true
我的问题是:我可以在RoleId, PersonId and Active
, where active
equals上创建一个唯一的约束true
吗?
附言。sql server 版本是2005