Wyobraź sobie, że mam trzy tabele o nazwach profiles
, profiles_skills
i skills
. Jest to relacja HABTM, w której profil może mieć wiele umiejętności, a umiejętność może należeć do wielu profili.Podczas dodawania ograniczenia klucza obcego, który kierunek jest najlepszą praktyką?
Potrzebuję ustawić ograniczenie klucza obcego między tymi tabelami. Moje pytanie brzmi, w jakim kierunku powinien być klucz obcy? Na przykład, czy mogę to zrobić:
ALTER TABLE profiles_skills ADD FOREIGN KEY (skill_id) REFERENCES skills(id);
ALTER TABLE profiles_skills ADD FOREIGN KEY (profile_id) REFERENCES profiles(id);
Czy mogę to zrobić:
ALTER TABLE profiles ADD FOREIGN KEY (id) REFERENCES profiles_skills(profile_id);
ALTER TABLE skills ADD FOREIGN KEY (id) REFERENCES profiles_skills(skill_id);
Nigdy naprawdę zastosowaną konwencję, po prostu zrobić to tak, wpisuję go i nie miał problem. Ale zawsze zastanawiałem się nad tym, czy to naprawdę ma znaczenie.
Obce klucze muszą znajdować się na "dziecięcym" stole, który w twoim przypadku to 'profiles_skills'. I tak, to ma znaczenie. z FK na osobnych tabelach profili/umiejętności, usunięcie umiejętności z profilu spowoduje usunięcie profilu. –
Trudno sobie wyobrazić przypadek użycia, gdy niemożliwe jest posiadanie rekordu w tabeli 'profiles' (i/lub' skills'), która NIE zawiera odpowiedniego wiersza w tabeli 'profiles_skills'. Ale to właśnie zapobiega twoja druga definicja. Dlatego nie jest to kwestia "najlepszych praktyk" - pierwszy sposób to jedyny sposób. – raina77ow