Напомним нормальные формы:
1НФ – все атрибуты атомарны, нет повторяющихся групп.
2НФ – находится в 1НФ, и каждый неключевой атрибут зависит от всего первичного ключа (а не от его части).
3НФ – находится в 2НФ, и все неключевые атрибуты зависят только от первичного ключа (нет транзитивных зависимостей).
В нашей таблице:
Первичный ключ составной:
(order_id, product_id), так как один заказ может содержать несколько товаров.customer_id, customer_name, order_date зависят только от order_id (части ключа), а не от product_id.product_price зависит только от product_id (части ключа).Это частичные зависимости – нарушение 2НФ.
Как исправить?
Разделить на три таблицы:
Orders (order_id, customer_id, order_date)Customers (customer_id, customer_name)OrderItems (order_id, product_id, quantity)Products (product_id, product_price)Реальный кейс:
В старой учётной системе были проблемы с дублированием имён клиентов и цен товаров. После нормализации до 3НФ избыточность снизилась на 70%, а обновление имени клиента перестало требовать правки тысяч записей.
Вывод: Аналитик, проектируя схему БД, должен проверять составные ключи на наличие частичных зависимостей (2НФ) и транзитивных зависимостей (3НФ).