是否可以在SQL中生成唯一约束,从而允许一个用户(user_id
)最多启用两个()条目enabled
?一个例子如下
user_id | enabled
------------------
123 | true
123 | true
123 | false
456 | true
以上将是有效的,但加入另一个user_id = 123
和enabled = true
会失败,因为将有三个条目。另外添加user_id = 123
和enabled = false
将是有效的,因为该表仍将满足该规则。
您不能允许两个值“启用”。但这是一种无需使用触发器即可接近所需解决方案的解决方案。想法是将值编码为数字,并对其中两个值实施唯一性:
create table t (
user_id int,
enabled_code int,
is_enabled boolean as (enabled_code <> 0),
check (enabled_code in (0, 1, 2))
);
create unique index unq_t_enabled_code_1
on t(user_id, enabled_code)
where enabled_code = 1;
create unique index unq_t_enabled_code_2
on t(user_id, enabled_code)
where enabled_code = 2;
插入新值有点棘手,因为您需要检查该值是放在插槽“ 1”还是“ 2”中。但是,您可以将其is_enabled
用作布尔值进行查询。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句