0

さまざまなカテゴリを含むテーブルがあります。以下は、縮小されたテーブル構造です。

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に設定できます。

助言がありますか?私はベストプラクティスを探しているので、「うまくいく」ものではありません。

4

1 に答える 1

1

テーブルがそれ自体を参照するのは通常のことです。この状況を必要とする現実のシナリオはたくさんあります(従業員->マネージャーは有名な教科書の例です)。

そして、それが単一のグローバルな親であろうと複数のグローバルな親であろうと、「グローバル」な親を持つことになります。したがって、アプローチを考え出す必要があります。

私は方法1を好みます-親のない要素には親がまったくありません。なぜなら、それはあなたのビジネスルールを正確に実現するからです。

0複雑なクエリがある場合、または自己を親として参照すると問題が発生します

于 2012-08-04T16:48:08.353 に答える