Перейти к основному содержимому

4.10. Нормализация и денормализация

Разработчику Аналитику Тестировщику
Архитектору Инженеру

Нормализация

Нормализация – это процесс организации данных в БД таким образом, чтобы уменьшить избыточность (дублирование данных) и обеспечить целостность данных. Этот процесс включает разделение данных на несколько связанных таблиц.

Цели нормализации:

  • устранение дублирования данных - одинаковые данные хранятся только один раз;
  • обеспечение целостности данных - изменение данных в одном месте автоматически отражается во всех связанных местах;
  • упрощение обновления данных - уменьшение риска несогласованности данных.

Формы нормализации (нормальные формы)

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

Первая нормальная форма (1NF) - все значения в столбцах должны быть атомарными (неделимыми). Вместо хранения списка значений в одной ячейке (например, «яблоки, груши») каждое значение должно быть в отдельной строке.


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

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

  • таблица должна соответствовать 1NF;
  • все неключевые столбцы должны зависеть от полного первичного ключа.

Если есть таблица заказов с колонками order_id, product_id, product_name, то product_name должен быть вынесен в отдельную таблицу Products.


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

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

  • таблица должна соответствовать 2NF;
  • все неключевые столбцы должны зависеть только от первичного ключа (а не от других неключевых столбцов).

Если в таблице Employees есть столбец department_name, который зависит от department_id, то department_name должен быть вынесен в отдельную таблицу Departments.


Более высокие формы

Более высокие формы (4NF, 5NF, форма Бойса-Кодда) используются реже и применяются для специфических случаев.

При использовании нормализации, уменьшается избыточность данных, обеспечивается их целостность, а обновление упрощается. Минусом является увеличение числа таблиц и связей, что может замедлить выполнение запросов и повысить сложность написания JOIN-операций.

Нормализацию лучше применять:

  • когда данные часто обновляются (например, системы учёта, где важно избежать дублирования и несогласованности);
  • когда важна целостность данных (например, банковские системы, медицинские записи);
  • когда объем данных относительно небольшой (производительность запросов не является критичной.

Денормализация

Понятие денормализации

Денормализация – это процесс объединения данных из нескольких таблиц в одну или добавление избыточных данных для повышения производительности чтения. Этот подход часто используется в системах с высокими требованиями к скорости выполнения запросов.

Цели денормализации:

  • ускорение запросов - уменьшение числа JOIN-операций за счёт хранения данных в одной таблице;
  • оптимизация для чтения - часто данные читаются чаще, чем изменяются, поэтому денормализация может быть полезной;
  • упрощение аналитики - хранение предварительно вычисленных данных (например, сводных таблиц) для быстрого анализа.

Пример денормализации

★ Пример денормализации.

Представим интернет-магазин. В нормализованной базе данных есть таблицы Orders, OrderItems, Products. Для ускорения отчётов о продажах можно создать денормализованную таблицу SalesSummary, которая содержит предварительно вычисленные данные: product_name, total_sales, average_price. При использовании денормализации, повышается производительность чтения, упрощаются запросы (меньше JOIN), а для аналитики это удобно. Минусы - увеличение объема данных (избыточность), риск несогласованности данных при обновлении, и сложность поддержки целостности данных.

Применение денормализации

Денормализация применима:

  • когда данные читаются чаще, чем изменяются (например, аналитические системы, системы отчётности);
  • когда важна скорость выполнения запросов (высоконагруженные веб-приложения);
  • когда данные предварительно агрегированы (хранилища данных).

image-6.png

image-7.png