3

私はデータベースの正規化、特に3NFを理解しようとしています。

私はショップデータベースを構築していて、3NFに正規化しようとして、以下の構造を考え出しました。

以下の構造は、

  • 製品ごとに複数のカテゴリが存在する場合があります
  • 製品ごとに1つのstorage_location&manufacturerのみが存在します
  • 無制限のextra_fieldsがあるかもしれません

私が正しい方向に進んでいるのか、3NFの以下の構造なのか、それとも近いのか、誰か教えてもらえますか?

Products
----------------
pid (pk)
title
desc
price
weight_base
weight_additional
note
quantity
manufacturer_id (fk)
storage_location_id (fk)

Categories
-----------------
category_id (pk)
category_name
parent_id
description

Product_categories
-----------------
pid (pk)
category_id (pk)

Manufacturers
-------------------
manufacturer_id (pk)
name
description

Storage_locations
---------------------

storage_location_id (pk)
storage_ref
storage_note

Product_extra_field_values
-----------------------------------

PID (pk)
extra_id (fk)
value

Product_extra_fields
--------------------------------

extra_id (pk)
label

私が確信していない2つの主なこと:

  1. テーブル内の複数の同一のPIDに対応するために、Product_categoriesの複合キーを使用するのは正しいですか?

  2. 製造元とstorage_locationのプライマリProductsテーブルに外部キーを追加するだけで正しいですか?これらは製品レコードごとに1回だけ発生するためです。または、特定の製造元とstorage_location IDをプライマリProductsテーブルから削除し、次のように新しいテーブルを作成する必要があります。

    Product_storage_locations
    ----------------------------------
    PID (pk)
    storage_location_id (pk) 
    
4

2 に答える 2

1

product、category、product_category の 3 つのテーブルを使用して、製品とカテゴリの間に多対多の関係を設定します。つまり、1 つの製品を複数のカテゴリに属する​​ことができ、1 つのカテゴリを複数の製品に割り当てることができます。それが意図されていない場合、これは適切な設計ではありません。

逆に、1 対多の関係がある場合は、必要なテーブルは 2 つだけです。このセットアップでは、「多数の」テーブル エントリが外部キーを「1 つの」テーブルに保持します。製品とメーカーの関係が 1 対多である限り、設計は正しいようです。多対多が必要な場合は、3 つのテーブルの設計が必要になります。

ところで、product_category テーブルの両方のフィールドは、指定した主キーではなく、外部キー (fk) です。

于 2011-11-23T05:28:42.390 に答える
1

はい、あなたが持っているものは私には正しいように見えます。製品の保管場所と製造元をテーブルに入れることで行ったことProductsは完全に正しいです。別のテーブル (一番下) に配置すると、後で実行する必要があるすべての結合を使用して、自分自身でさらに多くの作業を作成することになります。

それを新しい Product_storage_locations テーブルに分割する唯一の理由は、製品が複数の場所にある可能性がある場合です (あなたが言ったことによると、そうではありません)。ただし、製品とカテゴリの場合は、それ目的であり、Product_categories テーブルで行ったことです。そしてそれは絶対に正しいことです。

あなたのデザインについて私が確信していないのは、余分なフィールドをどのように作成したかということだけです。あなたの意図に関する詳細な情報がなければ、あなたが行ったことが正しいかどうかを判断するのは困難です. しかし、あなたが持っているのは、多くの製品に適用できる特定のタイプの分野であるように私には見えます。ただし、これらの製品のそれぞれは、そのフィールドに対して異なる値を持つ場合があります。それがあなたの意図であれば、そのデザインはうまく見えます。

于 2011-11-23T05:37:01.887 に答える