SQL约束检查另一个表列

问题描述:

所以基本上我有以下问题,以实现作为Oracle SQL数据库的一部分:SQL约束检查另一个表列

表1(attR1位,attR2位)

表2(attr3,table1_attr1)

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

我曾尝试以下(连同其他注释掉的可能性),但它显然是行不通的,因为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(attR1位,attR2位)

table1我们正在创造一个独特的密钥,但由于主要是刚attR1位,有没有办法将有与不同的attr2 s相同的元组的副本。

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