Нормальная форма – определенные свойства отношений или условия, накладываемые на реляционные отношения с целью устранения аномалий. Нарушения отношения нормальной формы говорит о необходимости его декомпозиции, то есть разбиении на два или более отношений. Нормальные формы являются вложенными:
Первая <вторая <третья<Бойся кодда<четвертая<пятая
То есть отношение находится в н-ной нормальной форме если оно находится в н-1 нормальной форме и для него выполняются дополнительные условия. Наиболее важными нормальными формами являются формы Бойся кодда и третья.
Первая нормальная форма.
Отношение находится в 1 нормальной форме, если каждый атрибут каждого кортежа имеет атомарное значение. Возможны два варианта нарушения первой нормальной формы:
- атрибут имеет множественное значение, например, несколько номеров телефонов и т.д. В этом случае атрибут выносят в отдельное отношение, выделяя в нем собственный первичный ключ и копируя в него первичный ключ исходного отношения для создания идентифицирующей связи «один ко многим»,
- значение атрибута имеет собственную структуру, например, адрес можно написать строкой, а можно выделить поля индекс, город, улица и т.д. В этом случае либо создается новое отношение с элементарными атрибутами, связанное с исходным связью «один к одному», либо элементарные атрибуты помещаются в исходное отношение. Решение о декомпозиции отношения зависит от предметной области. Где-то достаточно записать адрес одной строкой, а иногда необходимо выполнять поиск по улицам и номерам домов.
Вторая нормальная форма.
Основывается на понятии полной (минимальной) функциональной зависимости, когда зависимая часть зависит только полностью от детерминанта и не зависит от его частей.
Отношение находится во второй нормальной форме, если оно находится в первой нормальной форме и каждый атрибут, не входящий в состав суперключа, характеризуется полной зависимостью от него. То есть в отношении не должно существовать функциональных зависимостей неключевых атрибутов от части ключа. При этом могут существовать любые другие функциональные зависимости (зависимость ключевых атрибутов друг от друга, зависимость от ключа и зависимость внутри ключа).
Нормальная форма Бойся-кодда.
Данная нормальная форма предъявляет к базе данных наиболее жесткие требования. Отношение находится в нормальной форме Бойся-кодда, если для любой нетривиальной и минимальной функциональной зависимости в качестве детерминанта выступает суперключ отношения.
НФБК является условием отсутствия избыточности, вызванной функциональными зависимостями. Покажем это.
Возьмем схему R, которая находится в НФБК. Предположим, что в отношении r со схемой R может быть избыточность, и мы можем вывести значение некоторого атрибута, применив функциональную зависимость.
X
Y
A
Х
y1
a
X
y2
?
Чтобы вывести значение атрибута А, необходимо иметь два кортежа t1 и t2, у которых значения атрибутов х совпадают, а значения атрибутов y отличаются.
Чтобы вывести значение, помеченное знаком вопроса, нужна функциональная зависимость Z→A, при этом Z является подмножеством X, то есть какое-либо подмножество атрибутов с совпадающими значениями должно определять А. Но здесь мы сталкиваемся с противоречием: существование двух кортежей t1 и t2 возможно, если y1 не равен y2. Иначе они станут дубликатами и один из них придется исключить из отношения.
Однако из определения НФБК Z-суперключ, следовательно, Z→Y. Из определения функциональной зависимости: y1=y2. Таким образом, они равны и в НФБК нельзя вывести значение атрибута, используя функциональную зависимость.
НФБК накладывает жесткие ограничения на схему, что приводит в некоторых случаях к невозможности нормализации.
Пример: схема={город, улица, индекс},
Город, улица → индекс,
Индекс → город.
В этой таблице можно выделить два ключа:
К1={город, улица},
К2={индекс, улица}
1 зависимость удовлетворяет НФБК.
2 зависимость нарушает нашу форму, так как индекс не является ключом. Таким образом, приводя к НФБК, мы теряем зависимость, а если сохраняем зависимость, то не получим НФБК.
Третья нормальная форма.
Из-за того, что в ряде случае схемы баз данных нельзя привести к НФБК, была предложена более слабая нормальная форма, называемая третьей. Она обладает большинством достоинств НФБК, то есть избавляет от аномалий и сохраняет зависимости. Однако в базе данных может остаться некоторая избыточность.
Будем называть атрибут А первичным, если он входит в состав какого-либо ключа. Пример:
R={A, B, C, D}
AB→C
B→В
BC→A
K1=AB
K2=BC
Реляционная схема R с функциональными зависимостями F находится в третьей нормальной форме, если для каждой нетривиальной зависимости X→A справедливо, что либо Х – суперключ в R, либо атрибут А первичен.
Таким образом, третья нормальная форма слабее НФБК в том смысле, что она допускает функциональную зависимость первичного атрибута даже не от ключа.
Пример: Поставщик={Имя, адрес, товар, цена}
{Имя} → {адрес}
{имя, товар} → {цена}
К={имя, товар}
В этом отношении нарушаются и третья, и вторая нормальные формы, так как первичный атрибут определяется не ключом.
Отношение город, улица, индекс не нарушает третьей нормальной формы, так как индекс → город определяет не первичный атрибут.
Третья нормальная форма не позволяет полностью избежать избыточности, например:
Город
Улица
Индекс
С
S1
i
?
S2
i
В данной таблице можем вывести значение атрибута, помеченного знаком вопроса, используя зависимость индекс → город.
Существуют два направления проектирования схемы базы данных:
- приводим к НФБК, но допускаем, что декомпозиция может потерять зависимости,
- довольствуемся третьей нормальной формой, но в базе данных может быть избыточность.