Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: normalization, denormalization

Нормализация и денормализация БД — что оптимизируется, зачем нужны, когда применять?

Этот вопрос объясняет концепции нормализации и денормализации баз данных, их цели и области применения.

Короткий ответ

Нормализация оптимизирует базу данных для уменьшения избыточности и обеспечения целостности данных через разделение на логические таблицы. Денормализация оптимизирует производительность запросов через дублирование данных и уменьшение JOIN-ов. Нормализацию применяют в OLTP-системах с частыми записями, денормализацию — в OLAP-системах и для сложных отчетов. Оба подхода имеют свои преимущества и используются в зависимости от требований.

Длинный ответ

Нормализация и денормализация представляют два противоположных подхода к проектированию баз данных.

Нормализация:

  1. Цели:

    • Устранение избыточности данных

    • Предотвращение аномалий вставки/обновления/удаления

    • Обеспечение целостности данных

  2. Уровни:

    • 1NF: Атомарность значений, нет повторяющихся групп

    • 2NF: Нет частичных зависимостей от первичного ключа

    • 3NF: Нет транзитивных зависимостей

  3. Когда применять:

    • Системы с частыми операциями записи

    • Высокие требования к целостности

    • OLTP (Online Transaction Processing)

Денормализация:

  1. Цели:

    • Ускорение запросов чтения

    • Упрощение сложных JOIN

    • Улучшение производительности отчетов

  2. Методы:

    • Добавление вычисляемых колонок

    • Дублирование данных в связанных таблицах

    • Создание summary таблиц

  3. Когда применять:

    • Системы отчетности и аналитики

    • Медленные сложные запросы

    • OLAP (Online Analytical Processing)

Пример денормализации:

-- Нормализованная схема
orders (id, user_id, total)
order_items (id, order_id, product_id, quantity, price)
products (id, name, category)

-- Денормализованная для отчетов
order_reports (
    order_id, 
    user_name,  -- Дублировано из users
    product_names, -- Агрегировано
    total_amount
)

Компромиссы:

  • Нормализация: целостность vs производительность

  • Денормализация: скорость vs избыточность

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

Ключевые слова

#normalization

#denormalization

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.