Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных_учпос_Любицкий Ю.В..doc
Скачиваний:
9
Добавлен:
20.04.2019
Размер:
618.5 Кб
Скачать

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

12.12.05

400

4 000

Остон

ж/д

Туфли

100

100

Янтарь

а/т

Такие таблицы нельзя включать в реляционную базу данных, так как для них не соблюдается требование неделимости (атомарности) значений данных, расположенных на пересечении любых строки и столбца (см. п. 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).

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

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

По определению атрибут 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 рублей с доставкой этих товаров железнодорожным транспортом (второй кортеж отношения Номенклатура товаров).

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

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

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

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

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

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

Для устранения транзитивной зависимости в отношении Номенклатура товаров, данное отношение необходимо разделить на два отношения (табл. 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НФ), некоторые из которых связаны уже не с функциональными зависимостями между атрибутами отношений, а отражают более тонкие вопросы смыслового содержания предметной области [ 4 ]. Подробную информацию о нормальных формах высших порядков можно найти в книгах [ 1, 2, 4 – 6, 11, 14 ].

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

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