2013-02-16 24 views
6

Hayal ediyorum profiles, profiles_skills ve skills adlı üç tablo var. Bir profilin birçok beceriye sahip olduğu ve bir yeteneğin birçok profile ait olabileceği bir HABTM ilişkisi var.Yabancı anahtar kısıtlaması eklerken, hangi yön en iyi yöntemdir?

Bu tablolar arasında bir yabancı anahtar kısıtlaması ayarlamalıyım. Sorum şu, yabancı anahtar ne yönde olmalı? Gerçekten bir kongre izledi hiç

ALTER TABLE profiles ADD FOREIGN KEY (id) REFERENCES profiles_skills(profile_id); 
ALTER TABLE skills ADD FOREIGN KEY (id) REFERENCES profiles_skills(skill_id); 

, sadece o bunu yazıp yapmadıysanız şekilde yapın:

ALTER TABLE profiles_skills ADD FOREIGN KEY (skill_id) REFERENCES skills(id); 
ALTER TABLE profiles_skills ADD FOREIGN KEY (profile_id) REFERENCES profiles(id); 

Veya bunu yapmak yapın: Mesela ben bunu yapmak bir sorun vardı. Ama her zaman aklımın gerisinde, gerçekten önemliyse, merak ettim.

+2

Yabancı anahtarlar sizin durumunuzda "profiles_skills" olan "alt" tablosunda olmalıdır. Ve evet, önemli. FK'ler ile ayrı profiller/beceri tabloları üzerinde, bir profilden bir yetenek kaldırıldığında profil silinir. –

+0

'profiles_skills' tablosunda karşılık gelen bir satır bulunmayan 'profiller' (ve/veya 'beceri ') tablosunda kayıt olması imkansız olduğunda bir kullanım vakası hayal etmek zor. Ama bu tam olarak ikinci tanımınızın önlediği şeydir. Bu nedenle, 'en iyi uygulamalar' meselesi değildir - ilk yol tek yoldur. – raina77ow

cevap

9

Sorum şu: Yabancı anahtar hangi yönde olmalıdır?

Yabancı anahtarlar uç nokta tabloları (profiles ve skills) başvuran, kavşak masanın (profiles_skills) olmalıdır.

Bunu başka bir yoldan yapmaya çalışırsanız, yabancı anahtarların engellemesi gereken tam olarak hangi "var olmayan profil ve/veya beceriye" bağlanabilirsiniz. Ayrıca bağlantısız bir profilin (veya becerinin) olması imkansızdır.

İlgili konular