私はデータベースの正規化、特に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つの主なこと:
テーブル内の複数の同一のPIDに対応するために、Product_categoriesの複合キーを使用するのは正しいですか?
製造元とstorage_locationのプライマリProductsテーブルに外部キーを追加するだけで正しいですか?これらは製品レコードごとに1回だけ発生するためです。または、特定の製造元とstorage_location IDをプライマリProductsテーブルから削除し、次のように新しいテーブルを作成する必要があります。
Product_storage_locations ---------------------------------- PID (pk) storage_location_id (pk)