Zgaduję, że nie, ponieważ klucze obce są kluczami podstawowymi w ich własnych tabelach, więc będą unikatowe.Czy tabela bazy danych, która zawiera dwie kolumny będące kluczami obcymi, ma trzecią kolumnę, która jest kluczem podstawowym?
Więcej informacji
używam MySQL i trzy następujące tabele są przy użyciu silnika InnoDB
.
======================= =======================
| galleries | | images |
|---------------------| |---------------------|
| PK | gallery_id | | PK | image_id |
| | name | | | title |
| | description | | | description |
| | max_images | | | filename |
| | enabled | | | enabled |
======================= =======================
========================
| galleries_images |
|----------------------|
| FK | gallery_id |
| FK | image_id | <----- Should I add a PK to this table?
========================
Epilog
Dzięki za doskonałe odpowiedzi. Dowiedziałem się o kluczach złożonych i, po rozważeniu mojego konkretnego przypadku, zdecydowałem się uczynić kolumnę image_id
w tabeli galleries_images
kluczem podstawowym. W ten sposób obrazy mogą być powiązane tylko z jedną galerią, której właśnie chcę.
Mam zamiar również wdrożyć kolumnę order_num
w galleries_images
, której użyję do utrzymania logiki PHP. W ten sposób użytkownik może umieścić zdjęcia w określonej kolejności w każdej galerii. Skończyło się to:
============================
| galleries_images |
|--------------------------|
| PK, FK | image_id |
| FK | gallery_id |
| | order_num |
============================
Jeszcze raz dziękuję!
Epilog II
Dzięki Ci, którzy wskazywali, że nawet nie trzeba tej tabeli. Na początku nie dostarczyłem pełnych informacji. W końcu upuściłem tabelę galleries_images
i właśnie dodałem gallery_id
jako klucz obcy do tabeli images
. W każdym razie, nauczyłem się więcej, niż myślałem, i będę wdzięczny za pomoc.
+1. Nawet ja tak myślę, ale potrzebowalibyśmy więcej szczegółów. Zwykle dowolny DB tworzy unikalny indeks na kluczu podstawowym tabeli. Jeśli twoja tabela ma tylko te dwa klucze obce i nie ma klucza podstawowego, obawiam się, że indeks nie zostanie utworzony (niezatwierdzony, spekulujący). To zależy od tego, w jaki sposób i w jaki sposób tabela jest używana. – Guru
Tylko dlatego, że klucze obce są odwzorowywane na klucze podstawowe w tabelach nadrzędnych, nie oznacza to, że kombinacja kluczy obcych musi być unikalna. – David
CZEKAJ! jedyną potrzebą tablicy odwzorowania jest, jeśli model wymaga wielu do wielu relacji między galerią a obrazem. Jeśli tworzysz PK Image_ID, to już nie wiele-wiele ... po prostu umieść Gallery_ID w twojej Tabeli obrazów i skończ z tym. Nie wiem, czym jest InnoDB, ale jeśli tworzy śmieci tak, jak jedna z dwóch rzeczy jest prawdziwa, nie może odróżnić wielu-wielu od jednego-wielu, albo nie. Jest to problem z uruchomieniem bazy danych z fizycznego projektu. Nie zastanawiasz się, jakie są twoje relacje. –