Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦІЯ 7.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
236.03 Кб
Скачать

Вторая нормальная форма (2нф).

Полученное отношение соответствует правилам реляционной теории, но очевидно, что в нем содержится много избыточной информации (см. табл. 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 Поставки

Артикул

Количество

Дата

поставки

500

100

10.12.05

200

75

10.12.05

100

120

11.12.05

500

100

11.12.05

300

50

12.12.05

400

50

12.12.05

100

100

12.12.05

Разделение отношения Товары на отношения Номенклатура товаров и Поставки позволяет существенно уменьшить избыточность данных. Значительно проще и надежнее теперь выполняются операции обновления данных. Например, при изменении названия поставщика соответствующие исправления необходимо внести только в отдельные кортежи отношения Номенклатура товаров. Число исправляемых кортежей будет намного меньше, чем в отношении Товары, так как оно равно количеству разных товаров, а не общей численности партий товаров, поступающих от данного поставщика. Информацию о заключении нового договора о поставках товаров можно вносить в отношение Номенклатура товаров, не дожидаясь момента, когда поступит первая партия товара. Удаление второго кортежа из отношения Поставки не помешает сохранить в базе данных информацию о том, что торговым предприятием заключен договор с организацией Факел о поставке сапог с артикулом 200, ценой 5 000 рублей с доставкой этих товаров железнодорожным транспортом (второй кортеж отношения Номенклатура товаров).

Разделение отношения Товары на отношения Номенклатура товаров и Поставки не приводит к потере информации. Все необходимые сведения могут быть получены из этих отношений после их связывания по ключевым полям.

В результате выполненных действий будет получено отношение во второй нормальной форме.

Отношение находится во второй нормальной форме, если оно находится в первой нормальной форме, и каждый неключевой атрибут (т. е. не являющийся составной частью первичного ключа) функционально полно зависит от первичного ключа.