SQL数据库系统

时间:2018-12-15 06:18:39

标签: sql database schema

我的关系中有三个布尔属性,我只希望其中一个具有真实值,否则表应该给出错误。我怎样才能做到这一点?

2 个答案:

答案 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系统还允许将布尔值转换为表示01的数字,在这种情况下,您可以将它们相加并且总和必须等于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 )
);