Встречается на 31% собеседований по Java

Что такое нормализация баз данных

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

Как это работает

Нормализация основана на анализе функциональных зависимостей между атрибутами. Атрибут B функционально зависит от атрибута A, если каждому значению A соответствует ровно одно значение B. Процесс заключается в последовательном приведении таблиц к нормальным формам — от первой (1НФ) к более высоким (2НФ, 3НФ, НФБК и далее). Каждая следующая форма устраняет определённый тип избыточности и аномалий.

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

  • Первая нормальная форма (1НФ) — все атрибуты атомарны, то есть каждое поле содержит одно значение, а не список или множество. Например, вместо поля телефоны со значениями "123, 456" создают отдельную таблицу для телефонов.
  • Вторая нормальная форма (2НФ) — таблица находится в 1НФ, и каждый неключевой атрибут полностью зависит от первичного ключа (отсутствуют частичные зависимости). Это актуально для составных ключей.
  • Третья нормальная форма (3НФ) — таблица находится в 2НФ, и отсутствуют транзитивные зависимости: неключевые атрибуты не зависят от других неключевых атрибутов.
  • Нормальная форма Бойса — Кодда (НФБК) — более строгая версия 3НФ: каждый детерминант (атрибут, от которого зависят другие) является потенциальным ключом.

Пример

Рассмотрим таблицу Заказы:

ЗаказIDКлиентГородТоварЦена
1ИвановМоскваНоутбук50000
2ПетровСПбМышь1000

Здесь Город зависит от Клиент, а не от ЗаказID, что создаёт избыточность. Приведение к 3НФ разделит таблицу на Клиенты (КлиентID, Имя, Город) и Заказы (ЗаказID, КлиентID, Товар, Цена).

Подводные камни

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

Когда использовать

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

Коротко

  • Нормализация — это приведение схемы к нормальным формам для устранения избыточности и аномалий.
  • Основные формы: 1НФ (атомарность), 2НФ (полная зависимость от ключа), 3НФ (отсутствие транзитивных зависимостей), НФБК.
  • Цель — не производительность и не объём, а логическая непротиворечивость данных.
  • На практике балансируют между нормализацией и денормализацией в зависимости от сценария использования.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы