【问题标题】:SQL constraint to check another table column用于检查另一个表列的 SQL 约束
【发布时间】:2014-11-22 07:35:33
【问题描述】:

所以基本上我有以下问题要作为 oracle sql 数据库的一部分来实现:

table1(attr1, attr2)

table2(attr3, table1_attr1)

约束:一个 table2 元组只能有一些 table1_attr1,其中 table1 attr2 中的元组不为空。

我已经尝试了以下方法(以及其他被注释掉的可能性),但它显然不起作用,因为 attr2 不是唯一值:

CREATE TABLE table1 (
  attr1                VARCHAR(100)  NOT NULL,
  attr2             VARCHAR(200),
  PRIMARY KEY(attr1)
);

CREATE TABLE table2 (
  attr3                  INTEGER       NOT NULL,
  table1_attr1       VARCHAR(100)  NOT NULL,
  table1_attr2         VARCHAR(50),  --REFERENCES table1(attr2),

  FOREIGN KEY (table1_attr1, table1_attr2) REFERENCES table1(attr1, attr2),
    CONSTRAINT const_table1 CHECK(table1_attr2 IS NOT NULL),

  PRIMARY KEY(attr3)
);

我需要一些帮助,因为不能让 attr2 独一无二。 我读过关于在某处制作函数的文章,但我对它们不是很熟悉。如果他们是唯一的选择,我会尝试。

【问题讨论】:

    标签: sql oracle constraints


    【解决方案1】:

    终于自己找到了答案。这听起来很傻,但我确实希望它可以帮助其他在此案中苦苦挣扎的人。

    通过添加:

    唯一(attr1,attr2)

    table1 内部,我们正在创建一个唯一键,但由于主键只是 attr1,因此不可能存在具有不同attr2s 的相同元组的重复项。

    重点是,现在这两者的组合是唯一键,不会影响数据库的其余部分。因此table2 中的检查约束可以毫无问题地完成。

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多