- •Нормализация базы данных
- •Введение
- •История
- •Описание
- •Первая нормальная форма
- •Пример анализа функциональных зависимостей (продолжение проектирования информационной системы для сети магазинов по продажам сумок)
- •2. Выявляем все значимые функциональные зависимости
- •3. Приводим все отношения проектируемой информационной системы к нфбк или аргументируем отказ от нормализации
- •Задание
- •Контрольные вопросы
- •Литература
Первая
нормальная форма требует, чтобы в
отношении, на пересечении каждой строки
и каждого столбца находилось одно и
только одно значение [1].
Для
приведения отношения в первую нормальную
форму могут использоваться два подхода:
1.
Выявляются повторяющиеся группы, то
есть атрибут или набор атрибутов,
которые могут иметь несколько значений
для единственного значения первичного
ключа отношения. Повторяющиеся группы
устраняются путем ввода дополнительных
строк в таблицу для каждого значения
и занесении в пустые ячейки соответствующих
значений из неповторяющихся групп.
Этот процесс называется выравниванием
[1].
Например:
Было: Первая нормальная форма
Код Поставщика |
Адрес |
Дата поставки |
№ поставки |
1 |
ул. Солнечная 23 |
12.03.2007 |
13 |
|
|
12.06.2007 |
45 |
|
|
25.08.2007 |
127 |
Код Поставщика |
Адрес |
Дата поставки |
№ поставки |
1 |
ул. Солнечная 23 |
12.03.2007 |
13 |
|
|
|
|
1 |
ул. Солнечная 23 |
12.06.2007 |
45 |
1 |
ул. Солнечная 23 |
25.08.2007 |
127 |
Стало (1 подход):
2.
Повторяющиеся группы изымаются и
помещаются в отдельные
отношения
с копией первичного ключа исходного
отношения. Стало (2 подход):
Код Поставки |
Дата поставки |
№ поставки |
Код поставщика |
1 |
12.03.2007 |
13 |
1 |
2 |
12.06.2007 |
45 |
1 |
3 |
25.08.2007 |
127 |
1 |
Вторая
нормальная форма
Вторая
нормальная форма требует, чтобы отношение
находилось в первой нормальной форме
и неключевые атрибуты отношений зависели
от первичного ключа в целом (полная
зависимость), но не от его части (частичная
зависимость) [1]. Таким образом, если
таблица находится в первой нормальной
форме и первичный ключ у нее состоит
из одного атрибута, то она автоматически
находится и во второй нормальной форме.
Если
в отношении существуют частичные
зависимости, то их выделяют в отдельные
отношения таким образом:
функционально-зависимые атрибуты
удаляются из первоначального отношения
и помещаются в новое, детерминант
копируется из первоначального отношения
и помещается в новое.
Например:
Существует
отношение:
Сотрудник
(Код
отдела, Код сотрудника, ФИО сотрудника,
Рейтинг сотрудника, Название отдела)
Первичный
ключ: Код отдела, Код сотрудника
В
этом отношении есть частичная зависимость:
Код
отдела -> Название отдела.
Для
приведения отношения ко второй нормальной
форме мы должны создать два отношения:
1.
Сотрудник
(Код
отдела, Код сотрудника, ФИО сотрудника,
Рейтинг
сотрудника)
Первичный ключ: Код отдела, Код сотрудника
2.
Отдел
(Код отдела, Название отдела) Первичный
ключ: Код отдела
Третья
нормальная форма
Чтобы
отношение находилось в третьей нормальной
форме, необходимо, чтобы неключевые
атрибуты в нем не зависели от других
неключевых атрибутов, а зависели только
от первичного ключа [1]. То есть необходимо
убрать все транзитивные зависимости.
C
транзитивно зависит от А, если А->B и
B->C [1].
Например:
В
существующем отношении:
Товар
(Код
товара, Модель, Код поставщика, №
магазина, Адрес магазина)
Первичный
ключ:Код товара
Код
товара-> Адрес магазина –
это транзитивная зависимость. Так как
существуют функциональные зависимости:
Код
товара ->№ магазина
№ магазина->Адрес
магазина.
Для
приведения отношения к третьей нормальной
форме необходимо избавится от транзитивной
зависимости путем создания двух
отношений. При этом функционально-зависимые
атрибуты удаляются из первоначального
отношения и помещаются в новое,
детерминант копируется из первоначального
отношения и помещается в новое.
Таким
образом результатом нормализации
отношения из примера будут два отношения:
1.
Товар
(Код товара, Модель, Код поставщика, №
магазина) Первичный ключ: Код товара
Внешний ключ: № магазина ссылается на
Магазин (№ магазина)
2.
Магазин
(№ магазина, Адрес магазина) Первичный
ключ: № магазина.