Повторение- мать учения. Рассмотрим на примерах суть нормальных форм - свойства отношений в реляционной модели данных.
Первая нормальная форма (1NF)
1NF – это базовый уровень, который делает данные структурированными и удобными для дальнейшей обработки. Первая нормальная форма означает, что таблица должна быть "плоской". Это значит, что:
-
Каждый столбец таблицы должен содержать только одно значение. Недопустимы в одной ячейке таблицы было несколько значений, разделённых каким-то разделителем, недопустима какая-то сложная структура, как то список или массив.
-
Каждый столбец должен быть неделимым, атомарным, т.е. значение в столбце нельзя разделить на более мелкие, логически независимые части, на отдельные столбцы.
-
Каждая строка в таблице должна быть уникальной, т.е. в таблице должен быть первичный ключ – один или несколько столбцов, которые однозначно идентифицируют каждую строку.
Вторая нормальная форма (2NF)
2NF означает, что таблица соответствует 1NF, и вдобавок к этому:
-
Все неключевые атрибуты (столбцы, которые не входят в первичный ключ) должны полностью зависеть от всего первичного ключа.
-
Если первичный ключ состоит из нескольких столбцов (составной ключ), то ни один неключевой атрибут не должен зависеть только от части составного ключа.
Третья нормальная форма (3NF)
3NF означает, что таблица соответствует условиям 2NF, и дополнительно к этому ни один неключевой атрибут не должен зависеть от другого неключевого атрибута, т. е. нет никаких транзитивных зависимостей. Обычно на практике для таблиц достаточно соответствия 3-ей нормальной форме, поскольку значительно уменьшается избыточность данных и предотвращаются аномалии.
Четвертая нормальная форма (4NF)
4NF означает, что таблица должна быть в 3NF и не должна содержать независимых многозначных зависимостей. Другими словами: если в таблице есть два или более независимых многозначных атрибута, которые не зависят от первичного ключа друг через друга, то их нужно вынести в отдельные таблицы. Многозначная зависимость возникает, когда один атрибут (или группа атрибутов) связан с набором (множеством) значений другого атрибута, при этом эти наборы не зависят от третьего атрибута.
4NF борется с проблемой, когда в одной таблице хранится несколько независимых списков для одного и того же объекта. Чтобы соблюсти 4NF, эти независимые списки нужно разнести по отдельным таблицам.
Пятая нормальная форма (5NF)
5-я нормальная форма также известна как проектно-соединительная нормальная форма (Project-Join Normal Form, PJNF).
5NF означает, что таблица должна быть в 4NF плюс ещё: нельзя разбить таблицу на более мелкие таблицы без потери информации, а затем восстановить исходную таблицу с помощью естественных соединений (JOIN).
5NF борется с очень тонкой формой избыточности, которая возникает, когда информация об одном сложном отношении между тремя или более сущностями может быть однозначно выведена из информации о простых отношениях между парами этих сущностей. На практике 5NF применяется редко, поскольку сценарии, где она нарушается, довольно редки и сложны.
Шестая нормальная форма (6NF)
6NF означает, что таблица находится в 5NF, и вдобавок к этому:
-
Таблица не может быть декомпозирована дальше без потери информации.
-
Каждый кортеж (строка) в такой таблице состоит из первичного ключа и ровно одного неключевого атрибута.
6NF — это самая чистая форма нормализации, где каждый неключевой атрибут вынесен в отдельную таблицу со своим ключом. 6NF борется с так называемыми зависимостями по проекции (projection dependencies). 6NF устраняет последнюю форму избыточности, связанную с темпоральными аспектами и изменяемостью атрибутов.
Для большинства операционных баз данных OLTP-систем, где важна скорость чтения и относительная простота схемы, 6NF практически никогда не используется, поскольку:
-
• Каждое свойство сущности (каждый столбец, кроме первичного ключа) становится отдельной таблицей (колоссальное количество таблиц!), что ведёт к экспоненциальному росту числа таблиц в базе данных.
-
• Чрезмерное количество JOIN-ов, чтобы получить полную информацию об одной сущности, что приводит к значительному падению производительности при чтении данных.
-
• SQL-запросы становятся чрезвычайно сложными, а схема данных — практически нечитаемой для человека.
6NF находит применение в специализированных областях:
-
• Хранилища данных, ориентированные на темпоральные данные (Temporal Data Warehouses): когда необходимо хранить полную историю изменения каждого отдельного атрибута сущности. В такой системе, если меняется только один атрибут, например, product_name), создается новая запись только в таблице product_name, а остальные атрибуты остаются без изменений. Это минимизирует объём хранимой истории.
-
• Проектирование баз данных с очень высокой степенью изменчивости схемы: когда очень часто добавляются новые атрибуты или меняются существующие.
-
• В ряде NoSQL базах данных (особенно в колонковых или документоориентированных) концепция хранения "атрибут-значение" может быть близка к идее 6NF.