Пусть есть отношение поставки, содержащее данные о поставщиках, поставляемом ими товаре и ценах на этот товар.
Поставки (поставщик, товар, цена) (подчеркнутые атрибуты являются ключами)
Предположим, что поставщик может поставлять разные товары, а один и тот же товар могут поставлять различные поставщики, следовательно ключ отношения будет состоять из атрибутов: поставщик и товар. Пусть цена любого товара зафиксирована. Семантика отношения включает следующую зависимость:
1 поставщик, товар -> цена (по определению ключа)
2 товар -> цена
Можно отметить неполную функциональную зависимость атрибута «цена» от ключа, что приводит к следующим аномалиям:
1 Включение. Если у поставщика появляется новый товар, информация о товаре и его цене не может появиться в БД до тех пор, пока поставщик не начинает его поставлять;
2 Удаление. Если поставки некоторого товара прекращаются, из БД придётся удалить сведения о товаре и его цене, даже если он есть у поставщиков;
3 Обновление. При изменении цены товара необходим полным просмотр отношений с целью -найти все поставки товара, чтобы изменение цены было отражено для всех поставщиков. Т.о. изменение значения атрибута одного объекта влечет необходимость изменений в нескольких картежах отношений, иначе БД окажется не согласованной.
Причиной этих аномалий является неполная функциональная зависимость атрибута «цена» от ключа, что обусловлено объединением в отношении «поставки» двух семантических фактов в одной структуре. Разложение отношения «поставки» на два отношения устраняет неполную функциональную зависимость.
Отношение находится в 2НФ, если оно находится в 1НФ, и каждый не первичный атрибут функционально полно зависит от ключа.
Отношение может быть приведено в 2НФ: поставщик -> товар, товар -> цена.
Цену товара конкретной поставки можно определить путём соединения двух отношений по атрибуту «товар». Изменение цены товара вызовет модификацию лишь одного картежа 2-го отношения.