さまざまなカテゴリを含むテーブルがあります。以下は、縮小されたテーブル構造です。
tb_categories
category_id
category_name
category_parent_id
category_idのcategory_parent_idに外部キー制約を作成して、データの整合性を同じテーブル内に保持できるようにしました。
最初の質問は、同じテーブルに外部キーを配置することをお勧めします。私の考え方からすると、そういう場合はそうだと思います。
2番目の質問は、グローバルな親エンティティを格納する方法に関する最善のアプローチは何ですか?
私は次の方法を思いついた:
方法1:category_parent_idはnullを格納でき、nullはAllというタイトルのグローバルな親カテゴリのみです。
方法2:category_parent_idはnullを格納できず、グローバル親ALLには同じcategory_idが含まれます。したがって、このカテゴリについてのみ、category_idとcategory_parent_idの両方が同一になります。nullがないと、category_idとして0が存在しないため、このcategory_parent_idを0として挿入できません。
方法3:グローバルな親がなく、異なる「親」が存在します。たとえば、Audio、Visualを親として、MP3、WMAをAudioの子として、MPEG、AVIをVisualの子として持つ。この方法全体を通して、方法1と2の同じ原則が適用されます。
方法4:これは、この外部キー制約がないことを含む、私が好む最小の方法であり、したがって、グローバルな親は、他のどのカテゴリーにも存在しない0に設定できます。
助言がありますか?私はベストプラクティスを探しているので、「うまくいく」ものではありません。