8

profiles、 、という 3 つのテーブルがあるprofiles_skillsとしskillsます。これは HABTM 関係であり、1 つのプロファイルが複数のスキルを持つことができ、1 つのスキルが複数のプロファイルに属することができます。

これらのテーブル間に外部キー制約を設定する必要があります。私の質問は、外部キーはどの方向にあるべきですか? たとえば、次のようにしますか。

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

または私はこれを行いますか:

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

私は実際に慣例に従ったことはありません.私はそれを入力する方法でそれを行うだけで、問題はありませんでした. しかし、それが本当に重要なのかどうか、私はいつも心の奥底で疑問に思っていました.

4

1 に答える 1

12

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

外部キーは、エンドポイントテーブル (および)を参照するジャンクションテーブル ( ) にある必要があります。profiles_skillsprofilesskills

逆にしようとすると、存在しないプロファイルやスキルを「接続」することができます。これは、まさに外部キーが防止するはずのものです。また、接続されていないプロファイル (またはスキル) を持つこともできなくなります。

于 2013-02-18T11:29:14.487 に答える