次のようなテーブルがあります。
ID | キーワード | カテゴリー | サブカテゴリ | サブサブカテゴリ | サブサブサブカテゴリ
1 つのキーワードが 1 つのカテゴリ、サブカテゴリなどにのみ属することができる場合、2 つのテーブル (キーワード テーブルと親 ID を持つカテゴリ テーブル) に分割する必要がありますか? 繰り返しがないことを意味します。それでも分割する必要はありますか?
次のようなテーブルがあります。
ID | キーワード | カテゴリー | サブカテゴリ | サブサブカテゴリ | サブサブサブカテゴリ
1 つのキーワードが 1 つのカテゴリ、サブカテゴリなどにのみ属することができる場合、2 つのテーブル (キーワード テーブルと親 ID を持つカテゴリ テーブル) に分割する必要がありますか? 繰り返しがないことを意味します。それでも分割する必要はありますか?
Categories テーブルから取得した各外部キーを使用して、2 つのテーブルでそれを行います。
Keywords
id (PK)
keyword
category_id (FK)
Categories
category_id (PK)
category
parent_category_id (FK)
Categories テーブルのデータは次のようになります。
category_id category parent_category_id
1 Food null
2 meat 1
3 organic 1
4 fruit 3
Keywords テーブルのデータは次のようになります。
id keyword category_id
1 grapes 4
2 chicken 2
1 対 1 のマッピングを表すために必要なテーブルは 1 つだけです。1 対多または多対多のマッピングを表すには、複数のテーブルを使用する必要があります。
キーワードが 1 つのカテゴリ/サブカテゴリ/サブサブカテゴリにしか対応できない場合は、現在のレイアウトで問題ありません。
1 つの注意点: キーワードに基づいて検索する場合は、テーブルを分離することでパフォーマンスが向上する可能性があります。整数検索を実行する方がはるかに高速です。
キーワードの値を別のテーブルに保存することについての説明は、国名 (ほとんどが静的) を別のテーブルに保存することについてのこの説明に大まかに対応しています。別のテーブルを使用する主な利点としては、(話し言葉の) 言語に依存しないこと、検索が高速であること、後で更新しやすいことが挙げられます。
このように2つのテーブルを使用します。
Categories
-------------------
PK,FK1 | CategoryID
| Keyword
| Category
SubCategories
--------------------
PK,FK1 | CategoryID
PK,FK1 | SubCategoryID
後でカテゴリの名前を変更したり、並べ替えたりする予定がある場合は、分割することをお勧めします。
両方の長所と短所を比較検討してから、決定を下してください。
ParentID 列と FK を PK に追加しないのはなぜですか?