Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tylko jeden klucz ze złożonego klucza podstawowego jako klucz obcy

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz skalowalny schemat bazy danych do przechowywania wyników golfa

  2. Błąd ogólny:1005 Nie można utworzyć tabeli przy użyciu kompilacji schematu Laravel i kluczy obcych

  3. Jak przesłać obrazy do bazy danych MySQL za pomocą kodu PHP?

  4. Jak dopasować listę rozdzielaną przecinkami do wartości?

  5. Doktryna - Jak wydrukować prawdziwy sql, a nie tylko przygotowane oświadczenie?