Ответ вслух Middle Проектирование и нормализация обновлено

Нормализация и денормализация

Вопрос

Объясни нормальные формы на примерах. Когда ты бы сознательно денормализовал схему?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Нормализация нужна, чтобы каждый факт жил в одном месте. 1НФ: значения атомарны, нельзя хранить телефоны строкой через запятую.

Что должно прозвучать в ответе

  • 1НФ: атомарные значения, без списков в колонке

  • 2НФ: неключевые колонки зависят от всего составного ключа

  • 3НФ: нет транзитивных зависимостей между неключевыми колонками

  • Цель: один факт в одном месте, нет аномалий обновления

  • Денормализация ради чтения: счётчики, кеш-колонки, материализованные представления, витрины

  • Цена денормализации и способы синхронизации

Что могут спросить следом

  • Чем историческая копия данных отличается от денормализации?
  • Как держать в актуальном состоянии счётчик комментариев?

Разбор

Нормализация нужна, чтобы каждый факт жил в одном месте. 1НФ: значения атомарны, нельзя хранить телефоны строкой через запятую. 2НФ: при составном ключе каждая колонка зависит от всего ключа; если в позиции заказа лежит название товара, оно зависит только от товара, это нарушение. 3НФ: нет зависимостей через другую неключевую колонку; название отдела в таблице сотрудников зависит от id отдела. Нарушения ведут к аномалиям: переименовали отдел, а в половине строк старое название. Денормализую сознательно, когда чтение важнее и дорого считается на лету: счётчик комментариев у поста, витрина для отчётов, материализованное представление. Но тогда сразу решаю, кто поддерживает копию: та же транзакция, триггер или фоновый пересчёт, и как обнаружить рассинхрон. А цена товара в заказе, кстати, не денормализация, а отдельный исторический факт.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.