Я пытаюсь понять нормализацию базы данных, в частности 3NF.
Я создаю базу данных магазинов и, пытаясь нормализовать ее до 3NF, придумал структуру, представленную ниже.
Приведенная ниже структура предполагает
- Для каждого продукта может быть несколько категорий
- Для каждого продукта всегда существует только одно место хранения и производитель.
- Может быть неограниченное количество дополнительных_полей
Может ли кто-нибудь сказать мне, на правильном ли я пути, приведенная ниже структура в 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, потому что они будут появляться только один раз для каждой записи продукта? Или следует удалить конкретный производитель и идентификатор storage_location из основной таблицы Products и создать новые таблицы следующим образом:
Product_storage_locations ---------------------------------- PID (pk) storage_location_id (pk)