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

Fremmednøgler, der henviser til andre fremmednøgler i PostgreSQL

En begrænsning af en fremmednøgle er ligeglad med, om de(n) refererede kolonne(r) refererer til en anden kolonne i sig selv. Men de(n) refererede kolonne(r) skal Vær unik. Det er, hvad fejlmeddelelsen fortæller dig (ganske tydeligt).

Det du mangler er, at en fremmednøgle begrænsning kan være baseret på flere kolonner . Dette burde virke:

FOREIGN KEY (num, user_id, assignment_id) REFERENCES submission

Udskifter:

FOREIGN KEY (num) REFERENCES submission(num),
FOREIGN KEY (user_id) REFERENCES submission(user_id),
FOREIGN KEY (assignment_id) REFERENCES submission(assignment_id)

Den korte form af syntaksen (REFERENCES submission ) er muligt, fordi du refererer til den primære nøgle, som er standard.

Derudover kan du forenkle:lav submission.num enkeltkolonne primærnøglen, slip de redundante kolonner user_id og assignment_id fra correction og reducer fk-begrænsningen til kun (num) - som diskuteret i @Tims svar .

Så længe du har flerkolonne fk-begrænsningen, skal du overveje NOT NULL begrænsninger på hver af de refererende kolonner (som kommenteret af @joop). Ellers tillader en eller flere NULL-værdier i de refererende kolonner at undslippe fk-begrænsningen med standarden MATCH SIMPLE opførsel. Dette kan være tilsigtet eller ikke, typisk er det ikke .
Overvej alternativt MATCH FULL for flerkolonne fk-begrænsninger kun at tillade, hvis alle referencekolonner er NULL. Detaljer:



  1. Hvordan kan jeg bruge en mySQL SELECT IF-sætningsrække til at JOIN en anden tabel?

  2. hvordan man kalder en funktion i plsql funktion

  3. Oracle-fejl ved oprettelse af visning - ORA-01720

  4. GTFS-forespørgsel for at vise alle afgangs- og ankomsttider mellem to stopnavne