我想了解数据库规范化,特别是3NF。试图了解数据库规范化 - 3NF
我正在建立一个商店数据库,并试图归一化到3NF已经拿出了下面的结构。
结构如下假设
- 有可能是每个产品多个类别
- 有每个产品只有永远一个storage_location &制造商
- 有可能是无限的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
两件事我不确定:
是否正确使用复合键Product_categories以适应在表中的多个相同的PID?
将外键简单添加到制造商和storage_location的主要Products表中是否正确,因为它们只会在每个产品记录中出现一次?还是应该具体的制造商和storage_location ID从初级产品表,新表中删除是这样产生:
使用三个表Product_storage_locations ---------------------------------- PID (pk) storage_location_id (pk)
感谢您的答案 - 我想使用extra_field动态添加额外的可选产品数据,如条件(新的或使用)。然而,考虑到Product_extra_field_values在上述示例(即'new'或'used')的情况下会充满相同的值,因此可能最好创建第三个extra_field表,例如'Product_extra_field_value_options',其值为value_option_id和value_option_value然后在Product_extra_field_values表中代替'value'具有value_option_id – someuser