假设有一个表AVATARS,其他列中有user_id
(用户表的外键)和state
,其中state可以是0到6之间的任何值。想要创建一个约束,以便用户只能拥有2个头像,其中一个状态为= 0而另一个具有任何状态!= 0.我想知道是否可以使用唯一索引实现?或者我将不得不添加一些布尔列?
答案 0 :(得分:1)
您可以使用带表达式的唯一索引:
CREATE UNIQUE INDEX avatars_userid_state_0_idx ON avatars(user_id,(state<>0));
(或state = 0
,最终结果相同)。
答案 1 :(得分:0)
您可以使用过滤的唯一索引来执行此操作。
对于state = 0的一个值:
create unique index unq_avatars_user_state0
on avatars(user_id, state)
where state = 0;
对于状态为&lt;&gt;的一个值0:
create unique index unq_avatars_user_state0
on avatars(user_id, state)
where state <> 0;
注意:这些值并不保证这些值存在,只是每个值中最多只有一个。