Базы данных — упорядоченные наборы информации. В контексте SQL рассматриваются реляционные базы данных, представляющие информацию в виде таблиц. Нормализация — процесс удаления избыточных данных в реляционных базах данных. С позиции проектирования, это метод минимизации избыточности путём декомпозиции отношений (разбиения одной таблицы на несколько).
Зачем нужна нормализация?
Избыточность данных приводит к аномалиям, снижая производительность и гибкость управления данными. Нормализация необходима для:
- Устранения аномалий
- Повышения производительности
- Повышения удобства управления данными
Избыточность — хранение одних и тех же данных в нескольких местах, что приводит к несоответствиям.
Пример избыточности
Рассмотрим таблицу с информацией о мебели: наименование и материал. Изменение названия материала («массив дерева» на «натуральное дерево») потребует изменений в нескольких строках. Неполное изменение приведёт к несоответствию данных. Добавление новых записей («просто дерево») усугубляет ситуацию. Эта аномалия вызвана избыточностью.
Решение проблемы избыточности
Для устранения избыточности название материала выносится в отдельную таблицу, а в основной используется ссылка на неё. Это позволяет изменять данные в одном месте. Каждая сущность должна храниться отдельно, связь между таблицами осуществляется с помощью ссылок.
Нормальные формы баз данных
Процесс нормализации — последовательное приведение базы данных к определённым нормальным формам, каждая из которых накладывает всё более строгие правила. Чем выше нормальная форма, тем меньше аномалий. База данных считается нормализованной, если находится как минимум в третьей нормальной форме. Нормализация до 4NF и выше применяется редко, так как может снизить производительность.
Основные нормальные формы:
- Ненормализованная форма (0NF)
- Первая нормальная форма (1NF)
- Вторая нормальная форма (2NF)
- Третья нормальная форма (3NF)
- Нормальная форма Бойса-Кодда (BCNF)
- Четвёртая нормальная форма (4NF)
- Пятая нормальная форма (5NF)
- Шестая нормальная форма (6NF)
- Домен-ключевая нормальная форма (DKNF)
Для перехода к следующей нормальной форме база данных должна соответствовать требованиям предыдущей.
Ненормализованная форма (0NF)
Эта форма не считается нормальной формой, но важна для понимания перехода к табличному виду данных, соответствующему реляционной модели. Строки не должны быть пронумерованы, порядок столбцов не имеет значения. Таблицы Excel с колонкой порядковых номеров не являются реляционными.
Первая нормальная форма (1NF)
Таблица соответствует реляционной модели:
- Отсутствуют дублирующие строки
- В каждой ячейке — атомарное значение
- Столбцы хранят данные одного типа
- Нет массивов и списков
Главное правило: строки хранят данные, столбцы — структурную информацию, ячейки — атомарные значения.
Вторая нормальная форма (2NF)
- Таблица находится в 1NF
- Таблица имеет ключ
- Все неключевые столбцы зависят от полного ключа (если ключ составной)
Главное правило: таблицы должны иметь правильный ключ для идентификации каждой строки. Декомпозиция используется для приведения таблиц со составными ключами ко 2NF.
Третья нормальная форма (3NF)
- Таблица находится во 2NF
- Отсутствует транзитивная зависимость (неключевые столбцы не зависят от других неключевых столбцов)
Главное правило: таблицы должны содержать правильные неключевые столбцы. Декомпозиция используется для устранения транзитивной зависимости.
Нормальная форма Бойса-Кодда (BCNF)
- Таблица находится в 3NF
- Часть составного первичного ключа не должна зависеть от неключевого столбца.
Четвёртая нормальная форма (4NF)
- Отсутствуют нетривиальные многозначные зависимости (между тремя и более столбцами, где два не зависят друг от друга, но зависят от третьего).
Главное правило: в таблице не должно быть многозначных зависимостей. Декомпозиция используется для устранения многозначных зависимостей.
Пятая нормальная форма (5NF)
- Каждая нетривиальная зависимость соединения определяется потенциальным ключом.
- Декомпозиция без потерь данных.
5NF — окончательная нормальная форма относительно разбиения таблиц на проекции и их соединения. Таблицы, требующие нормализации до 5NF, встречаются редко.
Шестая нормальная форма (6NF)
6NF введена для работы с хронологическими базами данных. Требование: таблица должна удовлетворять всем нетривиальным зависимостям соединения и не подлежит дальнейшей декомпозиции без потерь. Нормализация до 6NF в нехронологических базах может снизить производительность.
Домен-ключевая нормальная форма (DKNF)
Эта форма фокусируется на ограничениях доменов и ключей. Таблица в DKNF обязательно находится в 5NF, но не всегда возможно привести таблицу к DKNF.
В процессе нормализации следует руководствоваться здравым смыслом и балансом между отсутствием аномалий и приемлемой производительностью. Полностью нормализованная база данных не всегда является хорошей базой данных. Необходимо учитывать требования разрабатываемой системы и предметной области.