繁体   English   中英

SQL数据库系统

[英]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系统还允许将布尔值强制转换为表示01在这种情况下,您可以将它们相加并且总和必须等于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM