Ta odpowiedź wymaga pytania „dodaj klucz obcy do table3
" oznacza, że FK (klucz obcy) został dodany w table3
odwoływanie się do jednej z kolumn złożonego PK (klucza podstawowego) table4
. W standardowym SQL FK może odwoływać się do właściwego/mniejszego podzbioru PK.
Ta inna odpowiedź
prawdopodobnie trwa "dodaj klucz obcy do table3
" oznacza, że FK został dodany w table4
z jedną z kolumn PK odwołującą się do table3
. Kolumna FK ustawiona w tabeli jest niezależna od zawartych w niej deklaracji PK lub UNIQUE.
W standardowym SQL FK może odwoływać się do właściwego/mniejszego podzbioru PK.
Lista kolumn, do której się odwołuje, musi być zadeklarowana PRIMARY KEY lub UNIQUE. (PRIMARY KEY tworzy ograniczenie UNIQUE NOT NULL.) (Ograniczenie musi być jawne, nawet jeśli każdy zestaw kolumn NOT NULL zawierających zestaw, który jest UNIQUE, musi być unikalny.)
Niestety MySQL pozwala zadeklarować FK odwołujący się do listy kolumn, która nie jest UNIKATOWA. Nawet jeśli takie FK lub jedna odwołująca się do kolumn innych niż NULL (OK w standardowym SQL) nie jest poprawnie zaimplementowana, a sama dokumentacja zaleca, aby tego nie robić:
(Możesz zastanowić się, jakie są i nie są dobrze zdefiniowane operacje, ponieważ dokumentacja tak naprawdę nie wyjaśnia.)
1.8.2.3 Różnice kluczy obcych
13.1.18 CREATE TABLE Składnia
13.1.18.6 Używanie OBCYCH KLUCZOWE Ograniczenia
PS Re relacyjny vs SQL
W modelu relacyjnym FK odwołuje się do CK (klucz kandydata). Superklucz to unikalny zestaw kolumn. CK to superklucz zawierający nie mniejszy superklucz. Jeden CK można nazwać PK (klucz podstawowy). Gdy wartości zestawu kolumn muszą pojawić się gdzie indziej, mówimy, że istnieje IND (zależność włączenia). FK to IND do CK. Kiedy IND jest do superklucza, możemy nazwać go „obcym superkluczem”.
SQL PK
lub UNIQUE NOT NULL
deklaruje superklucz. Jest to CK, gdy nie zawiera mniejszego zestawu kolumn zadeklarowanego jako SQL PK
lub UNIQUE NOT NULL
. SQL FK
deklaruje obcy superklucz. Tak więc pakiet SQL PK może w rzeczywistości być relacyjne PK (stąd CK) i UNIQUE NOT NULL mogą w rzeczywistości być CK. SQL FK do jednego z nich w rzeczywistości jest relacyjny FK.