Klucz obcy (FOREIGN KEY) jest ograniczeniem integralności referencyjnej, które pilnuje, aby wartości w kolumnach tabeli podrzędnej wskazywały na istniejące wartości w tabeli nadrzędnej. Gdy relacja ma opierać się na więcej niż jednej kolumnie (klucz złożony), klucz obcy również musi obejmować wiele kolumn.
Poprawna składnia definicji klucza obcego wielokolumnowego w DDL polega na podaniu:
- opcjonalnego nazwania ograniczenia po słowie CONSTRAINT,
- słów kluczowych FOREIGN KEY, po których występuje lista kolumn bieżącej tabeli w nawiasie,
- klauzuli REFERENCES z nazwą tabeli nadrzędnej oraz listą kolumn referencyjnych w nawiasie.
Dlatego poprawne jest rozwiązanie, które ma postać: CONSTRAINT nazwa FOREIGN KEY(kol1, kol2) REFERENCES tabela(kol1, kol2). Taki zapis jednoznacznie tworzy klucz obcy złożony i wskazuje, które kolumny w tabeli podrzędnej odnoszą się do których kolumn w tabeli nadrzędnej.
Pozostałe odpowiedzi są błędne, bo zawierają typowe pułapki składniowe:
- Przestawienie słów kluczowych (np. umieszczenie REFERENCES w środku frazy lub rozbicie FOREIGN KEY) powoduje, że parser SQL nie rozpozna definicji ograniczenia.
- Pomijanie listy kolumn po FOREIGN KEY jest niedopuszczalne przy kluczu złożonym, bo baza nie wie, które kolumny mają tworzyć referencję.
- Wstawienie słowa ON przed listą kolumn w definicji klucza obcego jest niepoprawne w tej konstrukcji; ON pojawia się w innych kontekstach (np. w złączeniach), ale nie w standardowym zapisie listy kolumn klucza obcego.
W praktyce warto pamiętać o dwóch dodatkowych zasadach: (1) liczba oraz typy danych kolumn po obu stronach muszą być zgodne, (2) kolumny w tabeli nadrzędnej muszą tworzyć klucz główny albo być objęte ograniczeniem unikalności. To gwarantuje jednoznaczność i spójność powiązania.