Нормализация и денормализация
Вопрос
Объясни нормальные формы на примерах. Когда ты бы сознательно денормализовал схему?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
1НФ: атомарные значения, без списков в колонке
2НФ: неключевые колонки зависят от всего составного ключа
3НФ: нет транзитивных зависимостей между неключевыми колонками
Цель: один факт в одном месте, нет аномалий обновления
Денормализация ради чтения: счётчики, кеш-колонки, материализованные представления, витрины
Цена денормализации и способы синхронизации
Что могут спросить следом
- Чем историческая копия данных отличается от денормализации?
- Как держать в актуальном состоянии счётчик комментариев?
Разбор
Нормализация нужна, чтобы каждый факт жил в одном месте. 1НФ: значения атомарны, нельзя хранить телефоны строкой через запятую. 2НФ: при составном ключе каждая колонка зависит от всего ключа; если в позиции заказа лежит название товара, оно зависит только от товара, это нарушение. 3НФ: нет зависимостей через другую неключевую колонку; название отдела в таблице сотрудников зависит от id отдела. Нарушения ведут к аномалиям: переименовали отдел, а в половине строк старое название. Денормализую сознательно, когда чтение важнее и дорого считается на лету: счётчик комментариев у поста, витрина для отчётов, материализованное представление. Но тогда сразу решаю, кто поддерживает копию: та же транзакция, триггер или фоновый пересчёт, и как обнаружить рассинхрон. А цена товара в заказе, кстати, не денормализация, а отдельный исторический факт.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Проектирование и нормализация»
- Нарушение второй нормальной формы
- Транзитивная зависимость
- Денормализация
- Нормализация
- Суррогатный ключ
- Связь многие ко многим
- Тип для денег
- ON DELETE CASCADE