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

Unik begrænsning over flere tabeller

Du kan prøve følgende. Du skal oprette en redundant UNIK begrænsning på (id, aId) i Parent (SQL er ret dumt, ikke?!).

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

En meget bedre løsning ville muligvis være helt at droppe parentId fra Child-tabellen, tilføje bId i stedet og referer blot til den overordnede tabel baseret på (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);

Er der nogen grund til, at du ikke kan gøre det?



  1. søg i hele Oracle-databasen efter en del af strengen

  2. Sådan fungerer SESSION_CONTEXT() i SQL Server

  3. Hentning af ressource-id #3-fejl i MySql

  4. Lav en venstresammenføjning med sammenføjninger i gammel stil