我的关系中有三个布尔型属性,我希望其中只有一个属性为真,否则表将显示错误。我该怎么做呢?
发布于 2018-12-15 14:39:36
如果您的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的语法可能有所不同。)
发布于 2018-12-15 18:06:06
为此,您可以使用check约束。
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 )
);https://stackoverflow.com/questions/53790066
复制相似问题