3. Основы теории нормальных форм
В реляционных БД определенная часть информации выражается множеством {известных функциональных} зависимостей между атрибутами сущностей (между полями таблиц). Однако, некоторые зависимости могут быть нежелательны из-за побочных эффектов (аномалий), которые они вызывают при модификации базы данных. Для их устранения прибегают к процедуре, называемой декомпозицией (разложением, разбиением) исходных таблиц, {что составляет суть процесса нормализации. Другими словами,} нормализация – это пошаговый обратимый процесс замены данной совокупности таблиц другой, в которой таблицы имеют более простую структуру.
Обратимость означает возможность восстановления структуры исходной совокупности таблиц. Для этого необходима декомпозиция, гарантирующая отсутствие потерь и сохранение зависимостей.
S
SST
SC
код_п |
статус |
город |
п3 |
30 |
Париж |
п5 |
30 |
Лондон |
код_п |
статус |
п3 |
30 |
SST |
30 |
код_п |
город |
п3 |
Париж |
SC |
Лондон |
б)
статус |
город |
30 |
Париж |
30 |
Лондон |
код_п |
статус |
п3 |
30 |
п5 |
30 |
{Ознакомившись с приведенными декомпозициями, можно заметить две особенности:}
В случае (а) информация не утрачивается, {поскольку отношения SST и SC все еще содержат данные о том, что поставщик п3 имеет статус 30 и находится в Париже, а поставщик п5 имеет статус 30 и находится в Лондоне. Иначе говоря, первая} декомпозиция действительно является декомпозицией без потерь.
В случае (б), наоборот, некоторая информация утрачивается, {поскольку оба поставщика имеют статус 30, но при этом нельзя сказать, какой из них в каком городе находится. Иначе говоря, вторая} декомпозиция не является декомпозицией без потерь (полной декомпозицией).
Существуют 6 “нормальных форм”, в которых могут находиться таблицы БД. {Ограничиться рассмотрением лишь первых трех. Для проектирования большинства БД достаточно.}
Первая нормальная форма (1нф)
Таблица находится в первой нормальной форме, если все ее поля имеют атомарные (единственные) значение, т.е. значение поля не должно быть множеством или группой. {Ненормализованной структуре соответствует многоуровневая таблица (иерархия) в отличие от однородной табличной структуры.}
Например:
Рейс (номер_рейса, пункт_назначения, расписание)
Расписание (день, время_вылета)
Пусть имеются следующие данные о рейсах:
Р101 Владивосток пон. 9:40
вт. 9:30
пятн. 10:30
Р800 Москва пон. 7:30
чет. 7:30
пятн. 7:30
Преобразовать эти данные в 1НФ можно 2 способами:
1) В составной таблице Рейс заменить таблицу Расписание соответствующими атрибутами:
Рейс (номер_рейса, пункт_назначения, день, время_вылета)
номер |
пункт_назначения |
день |
время_вылета |
Р101 |
Владивосток |
пон. |
9:40 |
Р101 |
Владивосток |
вт. |
9:30 |
Р101 |
Владивосток |
пятн. |
10:30 |
Р800 |
Москва |
пон |
7:30 |
Р800 |
Москва |
чет. |
7:30 |
Р800 |
Москва |
пятн. |
7:30 |
Недостатки этого способа:
а) избыточность; б) необходимость определения нового ключа.
2) Таблица с множественными значениями указывает на то, что существует, по крайней мере, один объект (сущность), который должен описываться отдельной таблицей. Нужно выделить из имеющейся таблицы этот объект, определить его структуру (поля), и провести декомпозицию таблицы так, чтобы каждая из полученных таблиц находилась в 1НФ:
Рейс (номер_рейса, пункт_назначения)
Расписание (номер_расписания, день, время_вылета, номер_рейса)
Рейс <--->> Расписание
