PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Contrainte unique sur plusieurs tables

Vous pouvez essayer ce qui suit. Vous devez créer une contrainte UNIQUE redondante sur (id, aId) dans Parent (SQL est plutôt stupide, n'est-ce pas ? !).

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

Une bien meilleure solution serait peut-être de supprimer complètement parentId de la table Child, ajouter bId à la place et faites simplement référence à la table Parent basée sur (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);

Y a-t-il une raison pour laquelle vous ne pouvez pas faire cela ?