Jeśli mam relację między dwiema tabelami (obie tabele mają własne klucze podstawowe), co powinno kierować moją decyzją, która tabela powinna przechowywać klucz obcy? Rozumiem, że charakter relacji prawdopodobnie ma znaczenie (jeden do jednego, jeden do wielu, wiele do wielu, jednokierunkowy, dwukierunkowy), a prawdopodobnie także wzorce dostępu mają znaczenie. Jaki jest jednak systematyczny sposób podejmowania tej decyzji?Gdzie powinienem przechowywać klucz obcy?
Odpowiedz
Który stół jest dzieckiem w związku?
Odpowiedz, i wiesz, która tabela potrzebuje kolumny klucza obcego, odwołując się do [zazwyczaj] klucza podstawowego rodzica. To dla relacji jeden-do-wielu ...
Wiele-do-wielu wymagałoby dodania trzeciej tabeli, używając kluczy z obu tabel jako klucza podstawowego.
Klucz obcy to po prostu pole w jednej tabeli, które odnosi się do pola klucza innej tabeli. Nie jest absolutnie konieczne, aby zidentyfikować pole klucza obcego jako takie. Oznacza to, że nie trzeba jawnie dodawać ograniczenia FOREIGN KEY ... REFERENCES do tabeli, aby był to klucz obcy. Po połączeniu obu tabel klucz podstawowy tabeli nadrzędnej będzie ustawiony jako klucz obcy tabeli podrzędnej. Niezależnie od tego, który jest nie kluczem podstawowym jest klucz obcy.
W relacjach jeden do wielu, FK przechodzi na "wiele". Nie może przejść na stronę "one", ponieważ tam się znajduje PK, a definicja klucza podstawowego obejmuje niedozwolone duplikaty.
Jeśli masz relację wiele do wielu, musisz przerobić tabele, aby uzyskać dwie relacje jeden-do-wielu i tabelę o średniej rozdzielczości.
"Co to jest systematyczny sposób podejmowania tej decyzji?"
Wygląda na to, że są dwie opcje: Strona "Jeden" jako FK do strony "Wiele stron" lub "Wiele" ma FK do strony "Jeden".
Spójrzmy na wybór.
Wszystkie wiersze strony "Wiele" mogą łatwo odwoływać się do jednego wiersza po stronie "Jeden".
Jeden rząd po stronie "Jeden" nie może nigdy odnosić się do WSZYSTKICH rzędów po stronie "Wiele".
Działa tylko jedna technika: strona "Wiele" ma stronę FK do strony "Jeden".
Istnieje tylko jeden faktyczny wybór wdrożenia. Nie ma "decyzji".
W skrócie: to kwestia liczności. Jeśli masz relację wiele do jednego, klucz powinien znajdować się po stronie "wielu". Jeśli jest jeden do jednego, jeden po drugim. Jeśli jest to wiele-do-wielu, potrzebujesz tabeli pośredniej. Jeśli jest to jeden-do-jednego, możesz wybrać. – reinierpost
Podobnie jak primary key
, foreign key
jest również typem constraint
umieszczonym na jednej lub kilku kolumnach w tabeli.
foreign key
ustanawia połączenie między kolumnami kluczowymi i powiązanymi kolumnami w innej tabeli. (Można także połączyć kolumny klucza obcego z kolumnami w tej samej tabeli).
Tabela zawierająca klucz obcy jest uważana za tabelę podrzędną, a tabela, do której odwołuje się klucz obcy, jest tabelą nadrzędną.
Kluczowe punkty
foreign key
musi odwoływać klucz podstawowy lub ograniczenie przez unikalność, chociaż odniesienia może być na tym samym stole lub na innym stoleforeign key
musi mieć taki sam liczba kolumn jako liczba kolumn w ograniczeniu referencyjnym, a typy danych muszą pasować do odpowiednich kolumn.- W przeciwieństwie do kolumn
Primary key
,Foreign key
może zawierać wartości NULL.
- 1. Gdzie powinienem przechowywać klucz api w szynach3?
- 2. Gdzie przechowywać klucz szyfrowania
- 3. Gdzie przechowywać klucz AES?
- 4. Gdzie powinienem przechowywać stan mojej gry?
- 5. Klucz obcy Sequelize.js
- 6. Rails 4.2 klucz obcy
- 7. Klucz obcy SQLite
- 8. Łączenie tabel, klucz obcy
- 9. Jak zmienić klucz obcy?
- 10. Klucz obcy SQLite?
- 11. Klucz obcy Django Model
- 12. klucz Composite jako klucz obcy (SQL)
- 13. ScalaQuery wielokrotny klucz podstawowy i klucz obcy
- 14. Gdzie powinienem przechowywać ustawienia aplikacji dla wszystkich użytkowników spoza roamingu?
- 15. Mac OS X: Gdzie powinienem przechowywać typowe dane aplikacji?
- 16. Gdzie powinienem przechowywać ustawienia konfiguracji witryny dla aplikacji Rails?
- 17. Wielokolumnowy klucz obcy w MySQL?
- 18. Klucz obcy do klucza złożonego
- 19. Klucz obcy w szynach 4
- 20. Modyfikuj klucz obcy w Ecto
- 21. klucz obcy referencje Nieprawidłowa tabela
- 22. knex migracja tworząc klucz obcy
- 23. szyn: niezgodny klucz obcy constraintRails
- 24. Mongoose: Jak modelować klucz obcy/odwrotną relację?
- 25. Upuść klucz obcy tylko wtedy, gdy istnieje
- 26. Gdzie można przechowywać funkcje pomocnicze?
- 27. Jak zdefiniować opcjonalny klucz obcy w Slick?
- 28. Gdzie przechowywać dane w iphone?
- 29. Gdzie przechowywać odszyfrowane pliki?
- 30. Czy klucz obcy może działać jako klucz podstawowy?
"Jaki jest systematyczny sposób podejmowania tej decyzji?" "rozumiem, że charakter relacji prawdopodobnie ma znaczenie". Poprawny. Charakter związku ma znaczenie. Nie mam pytania. Czy chcesz wiedzieć, jak zdefiniować, który jest zależny od drugiego? –
[Dokumentacja MySQL kluczy zagranicznych] (https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html#idm139680617903472) zapewnia prosty przykład relacji między 2 rodzicami tabele: 'customer',' product' i jeden podrzędny: 'product_order'. W tym przykładzie 'product_order' jest tabelą podrzędną, która powinna zawierać klucze obce. –