Для избавления от части головняка, возникающего при использовании БД, талантливые камрады разработали целую теорию, как уменьшить избыточность хранимых данных, устранить аномалии обновления и т.д.. Нормализация БД - это и есть применение данной теории.
1 нормальная форма (1 НФ):
Данная таблица не соответствует 1 НФ, так как атрибут children при разбиении на части или переупорядочивании эго состовляющих не теряет смысла. Т.е. атрибут children неатомарен.
Таблица, соответствующая 1 НФ выглядит так:
2 НФ: Каждый неключевой элемент неприводимо зависит от первичного ключа. Если потенциальный ключ отношения является простым, то отношение автоматически находится в 2НФ.
Иначе говоря:
1 нормальная форма (1 НФ):
- В отношении нет одинаковых кортежей
- Кортежи не упорядочены
- Атрибуты не упорядочены и различаются по наименованию
- Все атрибуты атомарны
Иначе говоря, в таблице
- нет одинаковых строк
- порядок строк не имеет значения
- колонки имеют различные имена, их очередность не играет роли
- в ячейку таблицы не втюхнут список или что-то подобное
В качестве примера используем таблицу с генеалогической информацией.
| house | father | children |
| Lannister | Tywin | Cersei, Jaime, Tyrion |
| Stark | Eddard | Robb, Sansa, Arya, Bran, Rickon |
| Baratheon | Robert | Joffrey, Myrcella, Tommen |
Данная таблица не соответствует 1 НФ, так как атрибут children при разбиении на части или переупорядочивании эго состовляющих не теряет смысла. Т.е. атрибут children неатомарен.
Таблица, соответствующая 1 НФ выглядит так:
| house | father | child |
| Lannister | Tywin | Cersei |
| Lannister | Tywin | Jaime |
| Lannister | Tywin | Jaime |
| Stark | Eddard | Robb |
| Stark | Eddard | Sansa |
| Stark | Eddard | Arya |
| Stark | Eddard | Bran |
| Stark | Eddard | Rickon |
| Baratheon | Robert | Joffrey |
| Baratheon | Robert | Myrcella |
| Baratheon | Robert | Tommen |
2 НФ: Каждый неключевой элемент неприводимо зависит от первичного ключа. Если потенциальный ключ отношения является простым, то отношение автоматически находится в 2НФ.
Иначе говоря:
- если ключ состоит из 1 поля и соблюдены требования 1 НФ, 2 НФ соблюдена
- если ключ составной, то другие атрибуты должны зависеть от всего ключа, а не от одного из его полей
| name | position | small council member |
| Tywin Lannister | Hand Of The King | TRUE |
| Varys | Master Of Whisperers | TRUE |
| Robb Stark | King In The North | FALSE |
| Eddard Stark | Hand Of The King | TRUE |
В данной таблице первичный ключ - имя и должность. Однако атрибут small council member зависит только от занимаемой должности. Иначе говоря, зависимость от первичного ключа неполная. Следовательно, таблица не соответствует 2 НФ. Для приведения ко 2 НФ выполняем декомпозицию:
| name | position |
| Tywin Lannister | Hand Of The King |
| Varys | Master Of Whisperers |
| Robb Stark | King In The North |
| Eddard Stark | Hand Of The King |
| position | small council member |
| Hand Of The King | TRUE |
| Master Of Whisperers | TRUE |
| King In The North | FALSE |
3 НФ:
- Все неключевые атрибуты взаимно независимы
- Неключевые элементы не находятся в транзитивной зависимости от первичного ключа
Иначе говоря:
- каждое из неключевых полей зависит исключительно от ключа
Снова возьмем таблицу должностей, однако, в этот раз первичным ключом будет только атрибут name.
| name | position | small council member |
| Tywin Lannister | Hand Of The King | TRUE |
| Varys | Master Of Whisperers | TRUE |
| Robb Stark | King In The North | FALSE |
| Eddard Stark | Hand Of The King | TRUE |
Пускай членство человека в малом совете зависит только от его должности. Тогда получаем следующие зависимости:
- name -> position
- position -> small council membership
- name -> small council membership
Отношение не находится в 3 НФ, т.к.:
- неключевой атрибут small council member зависит от неключевого position
- name -> small council membership - транзитивная зависимость
Приводим к 3 НФ:
| name | position |
| Tywin Lannister | Hand Of The King |
| Varys | Master Of Whisperers |
| Robb Stark | King In The North |
| Eddard Stark | Hand Of The King |
| position | small council member |
| Hand Of The King | TRUE |
| Master Of Whisperers | TRUE |
| King In The North | FALSE |
На практике редко используются НФ более высокого порядка, так как дальнейшая нормализация зачастую не приводит к росту продуктивности.
Комментариев нет:
Отправить комментарий