SQL数据库系统

SQL数据库系统,sql,database,schema,Sql,Database,Schema,我的关系中有三个布尔属性,我只希望其中一个具有真值,否则表会给出错误。我该怎么做 如果DBMS支持检查约束(大多数都支持),则可以使用检查约束。在它中,您检查,恰好有一个标志是正确的。为此,可以使用布尔表达式 CREATE TABLE elbat (... CHECK (flag1 = true AND flag2 = false AND flag3 = fa

我的关系中有三个布尔属性,我只希望其中一个具有真值,否则表会给出错误。我该怎么做

如果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的语法可能有所不同。)

如果您的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 ( (flag1,flag2,flag3) IN ( (true, false, false), 
                                       (false, true, false),
                                       (false, false, true)) ) 
);
以上是标准SQL

某些DBMS系统还允许将布尔值强制转换为表示
0
1
的数字。在这种情况下,您可以将它们相加,并且总和必须等于1(确保恰好有一个标志设置为true)


你的关系数据库管理系统是什么?@paulsm4:当然,这可以用SQL来完成,这叫做检查constraint@GordonLinoff:是的。布尔类型是在SQL:1999中引入的,请参见示例。-具有讽刺意味的是,它来自Oracle,尽管Oracle仍然缺少真正的布尔类型。您的RDBMS是什么?@paulsm4:当然可以使用SQL完成这一操作—它被称为检查constraint@GordonLinoff:是的。布尔类型是在SQL:1999中引入的,请参见示例。-具有讽刺意味的是,它来自Oracle,尽管Oracle仍然缺少真正的布尔类型。