基本上我有以下问题要作为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。 我已经阅读过关于在某处创建函数的内容,但我对它们并不熟悉。如果他们是唯一的选择,将尝试。
答案 0 :(得分:1)
终于找到了自己的答案。这听起来很愚蠢,但我希望它可以帮助那些在这种情况下苦苦挣扎的人。
添加:
UNIQUE(attr1,attr2)
在table1
内我们正在创建一个唯一键,但由于主要只是attr1,所以不可能存在具有不同attr2
s的相同元组的重复。
重点是,现在这两者的组合是一个唯一的密钥,而不会影响数据库的其余部分。因此,table2
中的检查约束可以毫无问题地完成。