给定第一个表
CREATE TABLE table1 (
column1 INTEGER,
column2 TEXT,
PRIMARY KEY (column1, column2));
SQL 是否有一种惯用的方式来约束column3
第二个表
CREATE TABLE table2 (
column3 INTEGER,
column4 TEXT,
PRIMARY KEY (column3, column4));
这样column3
⊆ column1
?
我目前的解决方案是这个kludge:
CREATE TABLE table0 (
column0 SERIAL PRIMARY KEY);
CREATE TABLE table1 (
column1 INTEGER REFERENCES table0 (column0),
column2 TEXT,
PRIMARY KEY (column1, column2));
CREATE TABLE table2 (
column3 INTEGER REFERENCES table0 (column0),
column4 TEXT,
PRIMARY KEY (column3, column4));
我学到了外键不能只引用复合主键的一个值的艰难方法:https ://stackoverflow.com/questions/3996774/foreign-key-relationship-with-composite-primary-keys-in-sql -服务器-2005。
如果这很重要,我正在使用 PostgreSQL。
编辑 (2020-04-26)
一条评论建议我添加一个具体的例子。
该表table1
包含别名。多人可以被命名为“Jane Doe”,任何一个“Jane Doe”也可以被称为“Jane Smith”和“Jane1990”。每个人都由 中的数字唯一标识column1
。任一列都可以有重复项,但不允许重复行。
该表table2
列出了 中的人出版的书籍table1
,但table1
可以包括从未出版过书籍的人,等等column3
⊆ column1
。再次不允许重复行。