Нормализация баз данных: зачем и как избежать аномалий

Базы данных — упорядоченные наборы информации. В контексте SQL рассматриваются реляционные базы данных, представляющие информацию в виде таблиц. Нормализация — процесс удаления избыточных данных в реляционных базах данных. С позиции проектирования, это метод минимизации избыточности путём декомпозиции отношений (разбиения одной таблицы на несколько).

Зачем нужна нормализация?

Избыточность данных приводит к аномалиям, снижая производительность и гибкость управления данными. Нормализация необходима для:

  • Устранения аномалий
  • Повышения производительности
  • Повышения удобства управления данными

Избыточность — хранение одних и тех же данных в нескольких местах, что приводит к несоответствиям.

Пример избыточности

Рассмотрим таблицу с информацией о мебели: наименование и материал. Изменение названия материала («массив дерева» на «натуральное дерево») потребует изменений в нескольких строках. Неполное изменение приведёт к несоответствию данных. Добавление новых записей («просто дерево») усугубляет ситуацию. Эта аномалия вызвана избыточностью.

Решение проблемы избыточности

Для устранения избыточности название материала выносится в отдельную таблицу, а в основной используется ссылка на неё. Это позволяет изменять данные в одном месте. Каждая сущность должна храниться отдельно, связь между таблицами осуществляется с помощью ссылок.

Нормальные формы баз данных

Процесс нормализации — последовательное приведение базы данных к определённым нормальным формам, каждая из которых накладывает всё более строгие правила. Чем выше нормальная форма, тем меньше аномалий. База данных считается нормализованной, если находится как минимум в третьей нормальной форме. Нормализация до 4NF и выше применяется редко, так как может снизить производительность.

Основные нормальные формы:

  1. Ненормализованная форма (0NF)
  2. Первая нормальная форма (1NF)
  3. Вторая нормальная форма (2NF)
  4. Третья нормальная форма (3NF)
  5. Нормальная форма Бойса-Кодда (BCNF)
  6. Четвёртая нормальная форма (4NF)
  7. Пятая нормальная форма (5NF)
  8. Шестая нормальная форма (6NF)
  9. Домен-ключевая нормальная форма (DKNF)

Для перехода к следующей нормальной форме база данных должна соответствовать требованиям предыдущей.

Ненормализованная форма (0NF)

Эта форма не считается нормальной формой, но важна для понимания перехода к табличному виду данных, соответствующему реляционной модели. Строки не должны быть пронумерованы, порядок столбцов не имеет значения. Таблицы Excel с колонкой порядковых номеров не являются реляционными.

Первая нормальная форма (1NF)

Таблица соответствует реляционной модели:

  • Отсутствуют дублирующие строки
  • В каждой ячейке — атомарное значение
  • Столбцы хранят данные одного типа
  • Нет массивов и списков

Главное правило: строки хранят данные, столбцы — структурную информацию, ячейки — атомарные значения.

Вторая нормальная форма (2NF)

  • Таблица находится в 1NF
  • Таблица имеет ключ
  • Все неключевые столбцы зависят от полного ключа (если ключ составной)

Главное правило: таблицы должны иметь правильный ключ для идентификации каждой строки. Декомпозиция используется для приведения таблиц со составными ключами ко 2NF.

Третья нормальная форма (3NF)

  • Таблица находится во 2NF
  • Отсутствует транзитивная зависимость (неключевые столбцы не зависят от других неключевых столбцов)

Главное правило: таблицы должны содержать правильные неключевые столбцы. Декомпозиция используется для устранения транзитивной зависимости.

Нормальная форма Бойса-Кодда (BCNF)

  • Таблица находится в 3NF
  • Часть составного первичного ключа не должна зависеть от неключевого столбца.

Четвёртая нормальная форма (4NF)

  • Отсутствуют нетривиальные многозначные зависимости (между тремя и более столбцами, где два не зависят друг от друга, но зависят от третьего).

Главное правило: в таблице не должно быть многозначных зависимостей. Декомпозиция используется для устранения многозначных зависимостей.

Пятая нормальная форма (5NF)

  • Каждая нетривиальная зависимость соединения определяется потенциальным ключом.
  • Декомпозиция без потерь данных.

5NF — окончательная нормальная форма относительно разбиения таблиц на проекции и их соединения. Таблицы, требующие нормализации до 5NF, встречаются редко.

Шестая нормальная форма (6NF)

6NF введена для работы с хронологическими базами данных. Требование: таблица должна удовлетворять всем нетривиальным зависимостям соединения и не подлежит дальнейшей декомпозиции без потерь. Нормализация до 6NF в нехронологических базах может снизить производительность.

Домен-ключевая нормальная форма (DKNF)

Эта форма фокусируется на ограничениях доменов и ключей. Таблица в DKNF обязательно находится в 5NF, но не всегда возможно привести таблицу к DKNF.

В процессе нормализации следует руководствоваться здравым смыслом и балансом между отсутствием аномалий и приемлемой производительностью. Полностью нормализованная база данных не всегда является хорошей базой данных. Необходимо учитывать требования разрабатываемой системы и предметной области.

Что будем искать? Например,программа