我试图了解数据库规范化,特别是 3NF。
我正在建立一个商店数据库,并在尝试规范化为 3NF 时提出了以下结构。
下面的结构假设
- 每个产品可能有多个类别
- 每个产品只有一个 storage_location 和制造商
- 可能有无限的额外字段
谁能告诉我我是否走在正确的轨道上,下面的结构是 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
我不确定的两件事主要是:
使用 Product_categories 的复合键来容纳表中的多个相同的 PID 是否正确?
简单地将外键添加到制造商和 storage_location 的主产品表中是否正确,因为它们只会在每个产品记录中出现一次?或者是否应该从主 Products 表中删除特定的制造商和 storage_location id,并像这样创建新表:
Product_storage_locations ---------------------------------- PID (pk) storage_location_id (pk)