Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4402.pdf
Скачиваний:
1
Добавлен:
13.11.2022
Размер:
585.72 Кб
Скачать

70

7.4. Нормализация отношений

Нормализация отношенийобеспечивает эффективность структур данных в реляционной БД [ 12 ].

Этот процесс уменьшает избыточность данных (хранение одинаковых данных в нескольких местах). В результате более рационально используется внешняя память, уменьшается вероятность нарушения согласованности данных.

Нормализация представляет собой действия по последовательному преобразованию исходной (ненормализованной) таблицы в нормализованные отношения в первой нормальной форме (1НФ), 2НФ, 3НФ, нормальной форме Бойса-Кодда (НФБК), 4НФ, 5НФ [ 2 ].

Основные свойства нормальных форм:

каждая следующая нормальная форма улучшает свойства предыдущей нормальной формы;

при переходе к следующей нормальной форме свойства предыдущих нормальных форм сохраняются.

Первая нормальная форма (1НФ)

Рассмотрим таблицу, в которой содержится информация о поставках товаров торговому предприятию (табл. 7.7):

Таблица 7.7

Товары

Название

Артикул

Количество

Цена, руб.

Дата

Поставщик

Способ

товара

 

 

 

поставки

 

доставки

 

 

 

 

 

 

 

Костюм

500

100

10 000

10.12.05

Янтарь

а/т

 

 

 

 

 

 

Сапоги

200

75

5 000

Факел

ж/д

 

 

 

 

 

 

 

 

Туфли

100

120

4 000

11.12.05

 

 

 

 

 

 

 

 

 

500

100

10 000

Янтарь

а/т

 

 

 

 

 

 

 

 

 

Костюм

300

50

5 000

 

 

 

 

 

 

 

 

 

 

400

4 000

12.12.05

Остон

ж/д

 

 

 

 

 

 

 

 

Туфли

100

100

 

Янтарь

а/т

 

 

 

 

 

 

 

 

 

В данном параграфе рассматриваются фундаментальные проблемы теории реляционных баз данных. Поэтому вместо терминов «таблица», «запись» и «поле» используются соответственно понятия «отношение», «кортеж» и «атрибут».

71

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

Приведем исходную таблицу к виду (табл. 7.8):

Таблица 7.8

Товары

Название

Артикул

Количество

Цена, руб.

Дата

Поставщик

Способ

товара

 

 

 

поставки

 

доставки

 

 

 

 

 

 

 

Костюм

500

100

10 000

10.12.05

Янтарь

а/т

 

 

 

 

 

 

 

Сапоги

200

75

5 000

10.12.05

Факел

ж/д

 

 

 

 

 

 

 

Туфли

100

120

4 000

11.12.05

Янтарь

а/т

 

 

 

 

 

 

 

Костюм

500

100

10 000

11.12.05

Янтарь

а/т

 

 

 

 

 

 

 

Костюм

300

50

5 000

12.12.05

Янтарь

а/т

 

 

 

 

 

 

 

Костюм

400

50

4 000

12.12.05

Остон

ж/д

 

 

 

 

 

 

 

Туфли

100

100

4 000

12.12.05

Янтарь

а/т

 

 

 

 

 

 

 

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

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

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

Полученное отношение соответствует правилам реляционной теории, но очевидно, что в нем содержится много избыточной информации (см. табл. 7.8).

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

72

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

По определению атрибут 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

 

 

 

 

 

 

 

 

 

 

 

 

 

73

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

Номенклатура товаров).

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

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

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

Третья нормальная форма (3НФ)

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

Это является следствием того, что имеется функциональная зависимость между неключевыми атрибутами: атрибут Способ доставки функционально зависит от атрибута Поставщик (см. табл. 7.9). Такие зависимости называются

транзитивными (переходными).

74

Для устранения транзитивной зависимости в отношении Номенклатура товаров, данное отношение необходимо разделить на два отношения (табл. 7.11 и

7.12):

Таблица 7.11

 

Договоры

 

 

 

 

 

 

 

 

 

 

Название

Артикул

Цена, руб.

 

Поставщик

 

товара

 

 

 

 

 

 

Костюм

500

 

10 000

 

Янтарь

 

 

 

 

 

 

 

 

Сапоги

200

 

5 000

 

Факел

 

 

 

 

 

 

 

 

Туфли

100

 

4 000

 

Янтарь

 

 

 

 

 

 

 

 

Костюм

300

 

5 000

 

Янтарь

 

 

 

 

 

 

 

 

Костюм

400

 

4 000

 

Остон

 

 

 

 

 

 

 

Таблица 7.12

 

 

 

 

 

 

 

Доставка

 

 

 

 

 

 

 

 

 

 

Поставщик

Способ

 

 

 

 

 

 

доставки

 

 

 

 

Янтарь

а/т

 

 

 

 

 

 

 

 

 

 

Факел

ж/д

 

 

 

 

 

 

 

 

 

 

Остон

ж/д

 

 

 

 

 

 

 

 

 

 

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

Отношения Договоры и Доставка находятся в третьей нормальной форме.

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

Вбольшинстве случаев достижение третьей нормальной формы считается достаточным для реальных проектов баз данных [ 12 ], однако в теории нормализации существуют нормальные формы высших порядков (НФБК, 4НФ, 5НФ), некоторые из которых связаны уже не с функциональными зависимостями меж-

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]