Какими ещё бывают нормальные формы
Как вы помните, всего существует девять нормальных форм:
- Нулевая нормальная форма (0НФ), или ненормализованная форма
- Первая нормальная форма (1НФ)
- Вторая нормальная форма (2НФ)
- Третья нормальная форма (3НФ)
- Нормальная форма Бойса-Кодда (НФБК)
- Четвёртая нормальная форма (4НФ)
- Пятая нормальная форма (5НФ)
- Доменно-ключевая нормальная форма (ДКНФ)
- Шестая нормальная форма (6НФ)
На практике используются первые три, остальные — почти никогда, хотя можно встретить модели, приведённые к четвёртой нормальной форме. О ней и предшествующей ей — нормальной форме Бойса-Кодда — мы и расскажем в этом уроке.
Нормальная форма Бойса-Кодда
Логическая ER-модель находится в нормальной форме Бойса-Кодда (НФБК), если модель уже приведена к 3НФ и атрибуты составного ключа не зависят от неключевых атрибутов (это все атрибуты, кроме первичного ключа).
Поскольку НФБК располагается между третьей и четвёртой нормальной формой (3НФ и 4НФ, соответственно), её иногда называют усиленной третьей нормальной формой. При этом используется она достаточно редко, потому что относится только к сущностям с составным первичным ключом. Сущности с простым первичным ключом уже находятся в 3НФ и в НФБК (если у моделей нет сущностей с составным первичным ключом, это значит, что она приведена к НФБК).
Рассмотрим пример: в каждом филиале сети фитнес-центров несколько спортивных направлений, за каждым из них закреплён тренер. Он может вести занятия только по своему направлению, но не привязан лишь к одному фитнес-центру и может работать в нескольких. Таким образом, можно выделить сущность «ответственный тренер» (закреплён за конкретным направлением) и её атрибуты — «название фитнес-центра» и «направление подготовки», без них мы не сможем определить нужного тренера.
Эта сущность находится в 3НФ, поскольку в ней есть составной первичный ключ (направление подготовки и название фитнес-центра), а неключевой атрибут зависит только от первичного ключа. При этом сущность «ответственный тренер» не приведена к НФБК.
Почему так? Потому что часть составного ключа (направление подготовки) зависит от неключевого атрибута (Ф.И.О. тренера) — зная Ф.И.О. тренера, мы можем определить, какое направление тренировок за ним закреплено. Чтобы привести сущность к НФБК, нужно выделить атрибуты «направление подготовки» и «Ф.И.О. тренера» в новую сущность.
В этом уроке мы используем как нотацию Чена, так и нотацию Crow’s Foot.
Соответственно, в сущности «ответственный тренер» у нас отображается тренер и направление подготовки, а в сущности «фитнес-центр» хранится связь фитнес-центра и тренера.
Четвёртая нормальная форма
Логическая ER-модель находится в четвёртой нормальной форме (4НФ), если она уже приведена к 3НФ или НФБК и в сущностях модели отсутствуют нетривиальные многозначные зависимости.
Что это значит? Такая сущность должна иметь как минимум три атрибута, например А, В и С. Два из них — В и С — никак не связаны друг с другом, но каждый по отдельности зависит от атрибута А, для каждого значения которого есть множество значений атрибута В и С.
Рассмотрим приведение к 4НФ на примере того же фитнес-центра. Нам нужно хранить данные о спортивных занятиях, тренерах, которые их ведут, и залах, где проходят тренировки. Рассмотрим эти сущности и их атрибуты.
Одно занятие могут вести разные тренеры, а некоторым занятиям подходят только определённые залы, так как только в них есть необходимое оборудование. Для того чтобы корректно составить расписание тренировок, нужно объединить в новую сущность три атрибута сущностей «тренер», «зал» и «занятие».
В данном случае первичный ключ состоит из всех трёх атрибутов, поэтому эта сущность находится в 3НФ и НФБК. Но из-за многозначной зависимости она ещё не находится в 4НФ. Что в этом примере является многозначной зависимостью?
В сущности «расписание» атрибут «название занятия» (атрибут A) зависит от «номера тренера» (атрибут B) и от «номера зала» (атрибут C). Для каждого занятия можно указать нескольких тренеров и несколько залов. При этом тренеру неважно, в каком зале проводить занятие, а значит, атрибуты «номер тренера» и «номер зала» не зависят друг от друга (атрибуты В и С — никак не связаны друг с другом, но каждый по отдельности зависит от атрибута А).
Многозначная зависимость может создавать проблемы. Порой при составлении расписания бывает так, что название занятия и номер тренера уже известны, а номер свободного зала ещё нет — тогда приходится оставлять эти поля пустыми. То есть многозначная зависимость ограничивает работу с такой сущностью. Чтобы решить эту проблему, нужно выделить две новые сущности. Для этого понадобится разнести два независящих друг от друга атрибута. Так мы приведём модель к 4НФ.
Как вы помните, несмотря на то, что системные аналитики могут приводить модели к НФБК и 4НФ, эти нормальные формы встречаются очень редко. Логическую ER-модель обязательно приводить к первым трём нормальным формам, поэтому давайте ещё раз закрепим представление о них.