sql >> Databasteknik >  >> RDS >> PostgreSQL

Främmande nycklar som hänvisar till andra främmande nycklar i PostgreSQL

En främmande nyckel-begränsning bryr sig inte om den eller de refererade kolumnerna refererar till en annan kolumn i sig. Men de refererade kolumnerna måste vara unik. Det är vad felmeddelandet säger dig (ganska tydligt).

Det du saknar är att en främmande nyckel begränsning kan baseras på flera kolumner . Detta borde fungera:

FOREIGN KEY (num, user_id, assignment_id) REFERENCES submission

Ersätter:

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

Den korta formen av syntaxen (REFERENCES submission ) är möjligt eftersom du refererar till primärnyckeln, som är standard.

Dessutom kan du förenkla:skapa submission.num den enkla kolumns primärnyckel, släpp de redundanta kolumnerna user_id och assignment_id från correction och reducera fk-begränsningen till bara (num) - som diskuterats i @Tims svar .

Så länge du har begränsningen fk med flera kolumner, överväg NOT NULL begränsningar för var och en av referenskolumnerna (som kommenterat av @joop). Annars tillåter ett eller flera NULL-värden i referenskolumnerna att undkomma fk-begränsningen med standardvärdet MATCH SIMPLE beteende. Detta kan vara avsett eller inte, vanligtvis är det inte .
Tänk alternativt MATCH FULL för flerkolumns fk-begränsningar att endast tillåta det om alla refererande kolumner är NULL. Detaljer:



  1. Hur förhindrar du SQL-injektion i LAMP-applikationer?

  2. Ska jag använda NULL eller en tom sträng för att representera inga data i tabellkolumnen?

  3. Säkerhetskopiera MySQL Amazon RDS

  4. Hantera Connection Pooling i multi-tenant webbapp med Spring, Hibernate och C3P0