PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Vincolo unico su più tabelle

Potresti provare quanto segue. Devi creare un vincolo UNIQUE ridondante su (id, aId) in Parent (SQL è piuttosto stupido, vero?!).

CREATE TABLE Child
(parentId INTEGER NOT NULL,
 aId INTEGER NOT NULL UNIQUE,
FOREIGN KEY (parentId,aId) REFERENCES Parent (id,aId),
createdOn TIMESTAMP NOT NULL);

Forse una soluzione molto migliore sarebbe quella di eliminare del tutto parentId dalla tabella Child, aggiungere bId invece e fai semplicemente riferimento alla tabella padre in base a (aId, bId) :

CREATE TABLE Child
(aId INTEGER NOT NULL UNIQUE,
 bId INTEGER NOT NULL,
FOREIGN KEY (aId,bId) REFERENCES Parent (aId,bId),
createdOn TIMESTAMP NOT NULL);

C'è qualche motivo per cui non puoi farlo?