Наличие произвольных функциональных зависимостей в отношении приводит к излишнему дублированию при хранении данных, неудобствам их обработки и т.д. Поэтому существует ряд формальных требований к характеру функциональных зависимостей в отношении, которые позволяют избежать указанных недостатков.
Первое требование формулируется так: все атрибуты отношения не являющиеся первичными ключами, должны зависеть от единственного ключа. Рассмотрим следующий пример.
ЗАКАЗ(Код поставщика, Код товара, Наименование поставщика, Адрес, Наименование товара, Характеристики товара, Цена)
В этом отношении ключ состоит из пары атрибутов Код поставщика, Код товара . При этом Наименование поставщика, Адресфункционально зависят от атрибута Код поставщика, Наименование товара, Характеристики товара зависят от Код товара, а Цена от ключа отношения. Такое разнообразие функциональных зависимостей приводит к следующим проблемам.
При появлении нового поставщика необходимо добавлять строчку в отношение. Если он еще не начал поставлять товар, то все остальные атрибуты остаются не заполненными.
Если из отношения удаляются сведения о поставщике, то удалятся и сведения о товарах.
Для изменения адреса поставщика, наименование товара нужно проделывать это в нескольких строках отношения.
Для того, чтобы устранить эти проблемы, необходимо разбить это отношение на три следующим образом.
ПОСТАВЩИКИ(Код поставщика, Наименование поставщика, Адрес)
ТОВАРЫ(Код товара, Наименование товара, Характеристики товара)
ЗАКАЗ(Код поставщика, Код товара, Цена)
В этих отношениях каждый атрибут не являющийся ключом зависит только от ключа, дублирование данных минимизировано, и товары и поставщиков можно добавлять и удалять независимо. Говорят, что отношения , в которых каждый атрибут не являющийся ключом функционально зависит только от одного возможного ключа представлены во второй нормальной форме.