Полученное отношение соответствует правилам реляционной теории, но очевидно, что в нем содержится много избыточной информации (см. табл. 7.8).
Для этого отношения весьма трудоемкими являются операции обновления данных. Например, при изменении названия какого-нибудь поставщика следует просмотреть все кортежи отношения и внести необходимые исправления. Если отношение состоит из нескольких тысяч кортежей, велика вероятность возникновения ошибки. Сведения о заключении нового договора о поставках некоторого товара (известны его название, артикул, цена и т. д.) можно будет внести в базу данных только после того, как поступит первая партия товаров. При удалении из отношения единственного кортежа с информацией о поставке, сделанной поставщиком (например, возвращена партия бракованных товаров), теряются все сведения об этом поставщике.
Причиной перечисленных проблем является функциональная зависимость некоторых атрибутов отношения только от части составного первичного ключа. Такая зависимость называется неполной функциональной.
По определению атрибут Y отношения R функционально зависит от атрибута X отношения R, когда каждое значение X в отношении R в каждый момент времени связано только с одним значением Y (атрибут X функционально определяет атрибут Y) [ 2 ].
Составным первичным ключом отношения Товары являются поля Артикул и Дата поставки. Атрибуты Название товара и Цена, руб. функционально зависят только от атрибута Артикул, входящего в состав составного ключа. Для устранения этой неполной функциональной зависимости можно разделить исходное отношение на два отношения (получить его проекции) (табл. 7.9 и 7.10):
Таблица 7.9
Номенклатура товаров
|
Название товара |
Артикул |
Цена, руб. |
Поставщик |
Способ доставки |
|
Костюм |
500 |
10 000 |
Янтарь |
а/т |
|
Сапоги |
200 |
5 000 |
Факел |
ж/д |
|
Туфли |
100 |
4 000 |
Янтарь |
а/т |
|
Костюм |
300 |
5 000 |
Янтарь |
а/т |
|
Костюм |
400 |
4 000 |
Остон |
ж/д |
Таблица 7.10
предыдущаяследующая