Но это не обеспечило бы уникальность AID. Ключ в родительской таблице (aId, bId) не является aId.
тим, у нас есть эти таблицы:
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
не более одной ссылки наParent
имея некоторую ценностьaId
? Другими словами, можно ли создать уникальное ограничение, чтобы в объединении вышеприведенных таблиц не было дубликатовaId
? Я думаю, что нет - грамматика каждой базы данных, которую я могу найти, кажется, привязана к одной таблице на ограничение - но это может быть недостатком воображения с моей стороны. (Денормализация включитьaId
наChild
это одно из решений, конечно.)