5

次のようなテーブルがあります。

ID | キーワード | カテゴリー | サブカテゴリ | サブサブカテゴリ | サブサブサブカテゴリ

1 つのキーワードが 1 つのカテゴリ、サブカテゴリなどにのみ属することができる場合、2 つのテーブル (キーワード テーブルと親 ID を持つカテゴリ テーブル) に分割する必要がありますか? 繰り返しがないことを意味します。それでも分割する必要はありますか?

4

5 に答える 5

6

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
于 2010-01-22T23:02:05.463 に答える
5

1 対 1 のマッピングを表すために必要なテーブルは 1 つだけです。1 対多または多対多のマッピングを表すには、複数のテーブルを使用する必要があります。

キーワードが 1 つのカテゴリ/サブカテゴリ/サブサブカテゴリにしか対応できない場合は、現在のレイアウトで問題ありません。

1 つの注意点: キーワードに基づいて検索する場合は、テーブルを分離することでパフォーマンスが向上する可能性があります。整数検索を実行する方がはるかに高速です。

キーワードの値を別のテーブルに保存することについての説明は、国名 (ほとんどが静的) を別のテーブルに保存することについてのこの説明に大まかに対応しています。別のテーブルを使用する主な利点としては、(話し言葉の) 言語に依存しないこと、検索が高速であること、後で更新しやすいことが挙げられます。

于 2010-01-22T22:07:22.363 に答える
1

このように2つのテーブルを使用します。

   Categories
-------------------
PK,FK1 | CategoryID
       | Keyword 
       | Category 

  SubCategories
--------------------
PK,FK1 | CategoryID
PK,FK1 | SubCategoryID
于 2010-01-22T22:11:31.760 に答える
1

後でカテゴリの名前を変更したり、並べ替えたりする予定がある場合は、分割することをお勧めします。

  • そのままにしておくと、名前を変更/再編成する手順 (カテゴリ/サブカテゴリ/サブサブカテゴリ/サブサブサブカテゴリ フィールドを変更する) を、このテーブルのすべての行に対して実行する必要があります。その (((sub)sub)sub) カテゴリ。その結果、より複雑なクエリが発生します。このキーワード テーブルに非常に多くの行がある場合は、パフォーマンスの問題である可能性があります (= データベースが実行するのに時間がかかります)。一方、クエリ (読み取り) は可能な限り高速になります。
  • 分割すると、(((sub)sub)sub)category の更新はより少ない行に対してのみ行われますが、クエリ (読み取り) は 2 つ (またはそれ以上) のテーブルで動作する必要があるため、時間がかかります。

両方の長所と短所を比較検討してから、決定を下してください。

于 2010-01-22T22:12:12.133 に答える
1

ParentID 列と FK を PK に追加しないのはなぜですか?

于 2010-01-22T22:30:54.040 に答える