Перейти к содержимому

23. DB Design: Денормализация

Намеренное добавление избыточности для повышения производительности.

✅ Преимущества:

  • Меньше JOIN’ов (быстрее SELECT)
  • Проще запросы
  • Лучше для read-heavy нагрузки

❌ Недостатки:

  • Дублирование данных
  • Сложнее UPDATE (нужно обновлять во многих местах)
  • Риск inconsistency
-- Вместо COUNT(*) при каждом запросе
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50),
post_count INT DEFAULT 0, -- денормализация!
follower_count INT DEFAULT 0
);
-- Триггер для обновления
CREATE OR REPLACE FUNCTION update_post_count()
RETURNS TRIGGER AS $$
BEGIN
UPDATE users SET post_count = post_count + 1 WHERE id = NEW.user_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Order с денормализованным именем пользователя
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id),
user_name VARCHAR(100), -- дубль! (на момент заказа)
total DECIMAL(10, 2)
);

Следующий урок: EXPLAIN