2013-02-16 2 views
6

profiles,profiles_skillsおよびskillsという3つのテーブルがあるとします。これはHABTMの関係で、プロファイルには多くのスキルがあり、スキルは多くのプロファイルに属することができます。外部キー制約を追加する場合、どちらの方向がベストプラクティスですか?

これらのテーブル間に外部キー制約を設定する必要があります。私の質問は、外字キーはどのような方向にあるべきですか?私は本当に慣例を踏襲したことがありません

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

、私はちょうどそれを私はそれを入力していない方法で操作を行います。

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

または私はこれを行う実行します。たとえば、私はこれを行うのですか問題があった。しかし、それは本当に重要であれば、私はいつも心の後ろで疑問に思っています。

+2

外部キーは、「child_」テーブルにある必要があります。このテーブルは、あなたの場合は 'profiles_skills'です。そして、はい、それは重要です。 FKを別のプロファイル/スキルテーブルに追加すると、スキルを削除するとプロファイルが削除されます。 –

+0

'profiles'(および/または'スキル ')テーブルに' profiles_skills'テーブルに対応する行を持たないレコードを持つことができないというユースケースを想像するのは難しいです。しかし、それはちょうどあなたの2番目の定義が防止するものです。したがって、それは「ベストプラクティス」の問題ではありません。最初の方法が唯一の方法です。 – raina77ow

答えて

9

私の質問は、外部キーはどのような方向にあるべきですか?

外部キーは、終点テーブル(profilesskills)を参照、接合テーブル(profiles_skills)であるべきです。

これを逆にしようとすると、外国人のキーが避けようとしているものと全く同じであるのプロファイルやスキルが「接続」存在しなくなります。また、接続されていないプロファイル(またはスキル)を持つことも不可能になります。

関連する問題