Для избавления от части головняка, возникающего при использовании БД, талантливые камрады разработали целую теорию, как уменьшить избыточность хранимых данных, устранить аномалии обновления и т.д.. Нормализация БД - это и есть применение данной теории.
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 |
На практике редко используются НФ более высокого порядка, так как дальнейшая нормализация зачастую не приводит к росту продуктивности.
Комментариев нет:
Отправить комментарий