给出以下表格列。当且仅当UserId是唯一的时,我如何确保active
只能设置为true?注意,orgId和UserId是多对多关系的复合键,userId也可以是重复的。
OrgId int
UserId int
Active bit
示例1 - 无效,因为userid出现2次,active被设置为true两次。
orgId userId active
1 2 1
2 2 1
示例:2有效。
orgId userId active
1 2 1
2 2 0
3 3 1
答案 0 :(得分:5)
您希望确保userId
的最多一个值为active = 1
。您可以使用筛选的唯一索引执行此操作:
create unique index idx_table_userId_active
on table(userId)
where active = 1;
答案 1 :(得分:0)
这必须由trigger
完成。 Check
约束依赖于同一行上的数据 - 这不是您的情况。