さまざまなカテゴリでタグ付けされたエンティティがいくつかあります。ただし、一部のカテゴリにはさまざまなサブカテゴリ (最大 2 レベル) がありますが、階層は均一ではなく、高さが 1 ~ 2 のものもあります。
私の考えは、各カテゴリとレベルごとに個別のテーブルを作成し、エンティティ ID をリーフにリンクすることでしたが、あまり効率的ではないようです。
あなたの考えを聞くのが大好きです!
さまざまなカテゴリでタグ付けされたエンティティがいくつかあります。ただし、一部のカテゴリにはさまざまなサブカテゴリ (最大 2 レベル) がありますが、階層は均一ではなく、高さが 1 ~ 2 のものもあります。
私の考えは、各カテゴリとレベルごとに個別のテーブルを作成し、エンティティ ID をリーフにリンクすることでしたが、あまり効率的ではないようです。
あなたの考えを聞くのが大好きです!
より柔軟な設計があります。
特定のカテゴリに属するエンティティを検索するときは、まず CATEGORY でそのサブカテゴリ、サブサブカテゴリなどをすべて検索します。DBMS によっては、これを単一の再帰クエリで実行できる可能性があります。
階層内のすべてのカテゴリを取得したら、CATEGORY_ENTITY と ENTITY を結合し、これらの CATEGORY_ID でフィルタリングします。
ところで、カテゴリ名はグローバルに一意にするか、兄弟間でのみにする必要がありますか? それに応じて、それぞれ NAME または {PARENT_ID, NAME} 1に UNIQUE 制約を追加したい場合があります。
1ただし、DBMS が複合 UNIQUE 制約で NULL をどのように処理するかを確認してください。