[英]SQL Database Systems
我的关系中有三个布尔属性,我只希望其中一个具有真实值,否则表应该给出错误。 我怎样才能做到这一点?
如果您的DBMS支持它们,则可以使用检查约束(大多数都支持)。 在其中检查是否有其中一个标志正确。 为此,您可以使用布尔表达式。
CREATE TABLE elbat
(...
CHECK (flag1 = true
AND flag2 = false
AND flag3 = false
OR flag1 = false
AND flag2 = true
AND flag3 = false
OR flag1 = false
AND flag2 = false
AND flag3 = true));
(只是为了理解这一点,语法可能因DBMS而异。)
您可以为此使用检查约束。
create table some_table
(
flag1 boolean not null,
flag2 boolean not null,
flag3 boolean not null,
constraint only_one_true
check ( (flag1,flag2,flag3) IN ( (true, false, false),
(false, true, false),
(false, false, true)) )
);
以上是标准SQL。
一些DBMS系统还允许将布尔值强制转换为表示0
或1
在这种情况下,您可以将它们相加并且总和必须等于1(确保将一个标志设置为true)
create table some_table
(
flag1 boolean not null,
flag2 boolean not null,
flag3 boolean not null,
constraint only_one_true
check ( cast(flag1 as integer) +
cast(flag2 as integer) +
cast(flag3 as integer) = 1 )
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.