Klucz obcy wielokolumnowy w SQL
Klucz obcy wielokolumnowy to ograniczenie FOREIGN KEY, które tworzy relację między tabelami na podstawie więcej niż jednej kolumny. Stosuje się go wtedy, gdy pojedyncza kolumna nie wystarcza do jednoznacznego powiązania rekordów.
Składnia podczas tworzenia tabeli
Poprawna postać ograniczenia to:
CONSTRAINT nazwa_ograniczenia
FOREIGN KEY (kolumna1, kolumna2)
REFERENCES tabela_nadrzedna (kolumna1, kolumna2)
Przykład:
CREATE TABLE uczen (
id INT PRIMARY KEY,
nazwisko VARCHAR(50),
imie VARCHAR(50),
klasa VARCHAR(10),
CONSTRAINT fk_osoba_uczen
FOREIGN KEY (nazwisko, imie)
REFERENCES osoby (nazwisko, imie)
);
W tym przykładzie para kolumn (nazwisko, imie) w tabeli uczen musi odpowiadać istniejącej parze wartości w tabeli osoby.
Ważne zasady
- Po słowie
CONSTRAINTpodaje się nazwę ograniczenia, np.fk_osoba_uczen. - Słowa kluczowe muszą występować w kolejności:
FOREIGN KEY (...) REFERENCES ... (...). - Nie używa się składni
FOREIGN KEY ON(...). - Liczba kolumn po stronie klucza obcego i po stronie tabeli nadrzędnej musi być taka sama.
- Typy danych odpowiadających sobie kolumn powinny być zgodne.
- Kolumny w tabeli nadrzędnej muszą być kluczem głównym, unikalnym albo mieć indeks unikalny.
Typowy błąd egzaminacyjny
Błędne jest zapisanie:
CONSTRAINT (nazwisko, imie) FOREIGN KEY REFERENCES osoby (nazwisko, imie)
Ponieważ po CONSTRAINT powinna wystąpić nazwa ograniczenia, a nie lista kolumn.