Нормализация и денормализация
Вопрос
Объясни нормальные формы до третьей на примере и скажи, когда денормализация оправдана.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
1НФ: атомарность, пример с телефонами в одной ячейке
2НФ: зависимость от всего составного ключа, пример order_items и название товара
3НФ: нет транзитивных зависимостей, пример сотрудник и название отдела
Зачем: аномалии вставки, обновления, удаления
Денормализация ради чтения и её цена: поддержка согласованности
Исторические снимки (цена в заказе) не дублирование
Что могут спросить следом
- Что такое НФБК?
- Как поддерживать денормализованный счётчик в актуальном состоянии?
Разбор
Первая нормальная форма требует атомарных значений: если в ячейке список телефонов, выносим их в отдельную таблицу. Вторая касается составных ключей: в order_items с ключом заказ плюс товар название товара зависит только от товара, его место в products. Третья убирает транзитивные зависимости: в таблице сотрудников название отдела зависит от id отдела, а не от сотрудника. Нормализация защищает от аномалий: название отдела в 300 строках обновят не везде. Денормализацию делаю осознанно ради скорости чтения: счётчик комментариев, агрегаты для отчётов, и сразу описываю, как она поддерживается: триггер, событие, пересчёт. Цена товара в строке заказа не денормализация, а исторический факт.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.