Проверяет понимание компромисса между нормализацией и денормализацией данных при проектировании схем баз данных и их влияния на производительность и целостность.
Нормализация и денормализация — это два противоположных подхода к организации данных в базе. Нормализация приводит схему к виду, где каждый факт хранится в одном месте, а связи между сущностями выражаются через ключи. Денормализация, наоборот, сознательно дублирует данные или объединяет таблицы, чтобы уменьшить количество соединений и ускорить чтение.
Нормализация решает проблему аномалий вставки, обновления и удаления. Если один и тот же факт хранится в нескольких местах, при обновлении легко забыть одно из них и получить противоречивые данные.
Нормализованная схема требует множества JOIN при чтении. На больших объёмах это дорого. Денормализация хранит уже собранные данные рядом, чтобы отдать их одним запросом.
Нормализованный вариант: заказы и пользователи в разных таблицах.
SELECT o.id, u.name, o.total
FROM orders o
JOIN users u ON u.id = o.user_id;Денормализованный вариант: имя пользователя продублировано в заказе.
SELECT id, user_name, total
FROM orders;Цена денормализации — риск рассинхронизации. Если пользователь сменил имя, нужно обновить все его заказы или принять, что исторические данные останутся прежними.
Итог: нормализация нужна для целостности и удобства сопровождения, денормализация — для производительности чтения. Применяйте их вместе: нормализуйте по умолчанию и денормализуйте осознанно там, где это оправдано нагрузкой.