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: