Restrição única sobre várias tabelas
Digamos que temos estas tabelas:
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
);
É possível criar uma restrição única emChild
tal que para todas as linhas emChild
no máximo uma referência aParent
tendo algum valor deaId
? Em outras palavras, posso criar uma restrição exclusiva para que a junção das tabelas acima não tenha duplicadoaId
? Acho que não - as gramáticas de todos os bancos de dados que pude encontrar parecem vinculadas a uma tabela por restrição - mas isso pode ser uma falta de imaginação da minha parte. (Desnormalizando para incluiraId
emChild
é uma solução, é claro.)