用于检查另一个表列的SQL约束

时间:2014-11-22 07:35:33

标签: sql oracle constraints

基本上我有以下问题要作为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 unique。 我已经阅读过关于在某处创建函数的内容,但我对它们并不熟悉。如果他们是唯一的选择,将尝试。

1 个答案:

答案 0 :(得分:1)

终于找到了自己的答案。这听起来很愚蠢,但我希望它可以帮助那些在这种情况下苦苦挣扎的人。

添加:

  

UNIQUE(attr1,attr2)

table1内我们正在创建一个唯一键,但由于主要只是attr1,所以不可能存在具有不同attr2 s的相同元组的重复。

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