我正在使用 Postgres 并且我有一个包含几列布尔类型的表。c1,c2,c3,c4 是列 (BOOLEAN)。
在我的模型中,我必须有其中之一,并且只有一个设置为 true。其他三个一定是假的。
我在表的其他列上添加了类似的检查(针对 null,而不是 bool)案例,如下所示:
ADD CONSTRAINT only_one_name_not_null CHECK (num_nonnulls(n1, n2, n3, n4) = 1)
Run Code Online (Sandbox Code Playgroud)
我还没有找到做同样事情的解决方案,但使用布尔类型。
有没有办法强制一个布尔值为真,其他为假?
您可以转换为数字和计数:
check (( n1::int) + (n2::int) + (n3::int) + (n4::int) = 1)
Run Code Online (Sandbox Code Playgroud)
注意:这假设值不是NULL。如果NULL允许使用s,则可以使用类似的逻辑。他们大概会被视为虚假的。
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |