December 29, 2022

Нормальные формы: 1-3

В прошлой статье я говорил про то, что нужно разделять сущности и не дублировать одну и ту же информацию, либо же наоборот, в некоторых особо не удобных случаев лучше эту информацию продублировать и провести денормализацию БД. Нормализация, денормализация, что это вообще за слова такие?

Существует такое понятие как нормальная форма. На собесе могут спросить: сколько нормальных форм ты знаешь? Так вот: многие, очень многие говорят, что их всего 5, что в корне не верно. Это самые часто используемые 5 НФ, а на самом деле их 6 + еще две специальные нормальные формы. Если так ответишь на собесе и потом расскажешь, что это за специальные формы - собеседующий почувствует собственную неполноценность и больше не будет задавать такие вопросы, иначе кто хочет упасть в грязь лицом перед кандидатом-занудой?

Пока что звучит страшно. Ну как обычно, пора привыкнуть. Сейчас объясню и все станет понятнее. Поэтому давай разберемся, что стоит за этими семью нормальными формами. Сразу скажу, что всю эту информацию ты можешь найти в Википедии, но оно тебе надо?

Переменная отношения находится в первой нормальной форме (1НФ) тогда и только тогда, когда в любом допустимом значении отношения каждый его кортеж содержит только одно значение для каждого из атрибутов.

Разве что надо еще ввести понятие Кортеж - это упорядоченный набор значений из фиксированного количества полей, по сути - строка таблицы. В общем, объясняю по-человечески:

Первая НФ

Это когда на разный набор данных есть по отдельному кортежу, а не все в одной строчки пишется для каждого элемента

До приведения:

После приведения:

Вторая НФ

Это когда мы не плодим одну и ту же сущность в одной таблице в виде разных кортежей данных, как в 1НФ

До приведения:

После приведения:

Таблица товаров:

Таблица заказов:

Третья НФ:

Тут посложнее, в третьей НФ мы должны избавиться от транзитивных зависимостей. В нашем примере такая зависимость есть в таблице товаров. Зависимости тут такие: если товар связан со складом, а склад связан со временем работы, то товар связан со временем работы

До приведения:

После приведения: