Денормализация на собеседовании системного аналитика
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем denormalization
Normalization (3НФ) — minimize duplication. Хорошо для writes / consistency.
Но joins дороги. Read-heavy workload + complex joins → slow queries.
Denormalization — duplicate data для read performance.
Trade-off. Faster reads, slower writes (need sync), risk inconsistency.
Виды denormalization
Pre-computed columns. Add denormalized field на main table.
Wide tables. Combine multiple tables в одну.
Materialized views. Pre-computed query results.
Aggregates. Daily / hourly summaries сохранены.
Pre-computed columns
Часто нужный data в FK related table → copy.
-- normalized
orders: id, customer_id, ...
customers: id, name, country, ...
-- denormalized
orders: id, customer_id, customer_name, customer_country, ...Pros: join not needed для display.
Cons: при изменении customer_name — нужно update orders.
Sync. ON UPDATE trigger / async job / CDC.
Wide tables
Combine fact + frequently-used dimensions.
fact_orders + dim_customer + dim_product → fact_orders_wideВ DWH analytics — стандартный подход. ClickHouse loves wide tables (no joins).
Materialized views
Query result сохранён как table. Refresh периодически.
CREATE MATERIALIZED VIEW daily_revenue AS
SELECT DATE, SUM(amount) FROM orders GROUP BY DATE;
REFRESH MATERIALIZED VIEW daily_revenue;В Postgres — manual refresh. В ClickHouse — auto-refresh при insert (incrementally maintained).
Trade-off. Read fast (already aggregated). Write slower (need refresh).
Sync challenges
Главная боль denormalization — keep duplicate data в sync.
Strategies:
- Trigger-based. ON UPDATE — sync. Tightly coupled с DB.
- Application-level. Code updates everywhere. Easy to miss.
- CDC. Listen на source changes, propagate. Standard в modern.
- Recompute. Drop denormalized, rebuild периодически.
Eventual consistency. Window когда old data visible. Часто OK для analytics, не для финансов.
Связанные темы
- Нормализация БД на собесе SA
- Data modeling подходы для SA
- Cache strategies для SA
- Star schema vs Snowflake для DE
- Подготовка к собесу системного аналитика
FAQ
Это официальная информация?
Нет. Статья основана на стандартных подходах database design.
Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.