Что такое нормализация и денормализация баз данных
Что проверяют
Понимаете ли вы, что это компромисс, а не «правильно и неправильно». Отвечать нужно через цену, которую платит каждый выбор.
Как отвечать
Нормализация это разложение данных так, чтобы каждый факт хранился ровно в одном месте. Цель одна: убрать аномалии обновления, когда одно изменение приходится вносить в десяти строках и где-то забывают.
Нормальные формы кратко:
- 1НФ: атомарные значения, никаких списков в поле;
- 2НФ: 1НФ плюс полная зависимость от составного ключа целиком;
- 3НФ: 2НФ плюс отсутствие транзитивных зависимостей, то есть неключевые поля не зависят друг от друга.
На практике до третьей формы доводят почти всегда, дальше редко.
Денормализация это осознанный откат: данные дублируются, чтобы не делать соединение на каждое чтение. Типичные случаи: счётчики (число комментариев прямо в записи), витрины для аналитики, кэш названия компании рядом с вакансией.
Цена честная. Нормализация экономит место и защищает согласованность, но чтение стоит соединений. Денормализация ускоряет чтение, но каждое изменение нужно разносить по копиям, и рассинхрон становится вопросом времени, а не случайностью.
Где спотыкаются
Заучивают формулировки нормальных форм и не могут привести пример аномалии обновления.
Считают денормализацию ошибкой. Для витрин и счётчиков это норма, вопрос только в том, кто и когда обновляет копии.
Денормализуют до замеров, вместо того чтобы сначала посмотреть план запроса и индексы.
Не упоминают, что в документных базах денормализация это модель по умолчанию, а не оптимизация.