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
中的检查约束可以毫无问题地完成。