我的关系中有三个布尔属性,我只希望其中一个具有真实值,否则表应该给出错误。我怎样才能做到这一点?
答案 0 :(得分:2)
如果您的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而异。)
答案 1 :(得分:0)
您可以为此使用检查约束。
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(确保只设置了一个标志)变为真实)
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 )
);