假设我们有这些表:
```sql CREATE TABLE A ( id SERIAL NOT NULL PRIMARY KEY ); CREATE TABLE B ( id SERIAL NOT NULL PRIMARY KEY ); CREATE TABLE Parent ( id SERIAL NOT NULL PRIMARY KEY, aId INTEGER NOT NULL REFERENCES A (id), bId INTEGER NOT NULL REFERENCES B (id), UNIQUE(aId, bId) ); CREATE TABLE Child ( parentId INTEGER NOT NULL REFERENCES Parent (id), createdOn TIMESTAMP NOT NULL ); ```
是否可以在
```sql CREATE TABLE A ( id SERIAL NOT NULL PRIMARY KEY ); CREATE TABLE B ( id SERIAL NOT NULL PRIMARY KEY ); CREATE TABLE Parent ( id SERIAL NOT NULL PRIMARY KEY, aId INTEGER NOT NULL REFERENCES A (id), bId INTEGER NOT NULL REFERENCES B (id), UNIQUE(aId, bId) ); CREATE TABLE Child ( parentId INTEGER NOT NULL REFERENCES Parent (id), createdOn TIMESTAMP NOT NULL ); ```
是否可以在
Child
上创建一个唯一约束,使得对于 Child
中的所有行,最多只有一行引用了具有某个值的 aId
的Parent
?换句话说,我能否创建一个唯一约束,以便上述表的连接没有重复的 aId
?我认为不行 - 我能找到的每个数据库的语法似乎都与每个约束绑定单个表 - 但这可能是我缺乏想象力。(当然,将 aId
包含在 Child
中是一种解决方法。)