Этот вопрос объясняет концепции нормализации и денормализации баз данных, их цели и области применения.
Нормализация оптимизирует базу данных для уменьшения избыточности и обеспечения целостности данных через разделение на логические таблицы. Денормализация оптимизирует производительность запросов через дублирование данных и уменьшение JOIN-ов. Нормализацию применяют в OLTP-системах с частыми записями, денормализацию — в OLAP-системах и для сложных отчетов. Оба подхода имеют свои преимущества и используются в зависимости от требований.
Нормализация и денормализация представляют два противоположных подхода к проектированию баз данных.
Нормализация:
Цели:
Устранение избыточности данных
Предотвращение аномалий вставки/обновления/удаления
Обеспечение целостности данных
Уровни:
1NF: Атомарность значений, нет повторяющихся групп
2NF: Нет частичных зависимостей от первичного ключа
3NF: Нет транзитивных зависимостей
Когда применять:
Системы с частыми операциями записи
Высокие требования к целостности
OLTP (Online Transaction Processing)
Денормализация:
Цели:
Ускорение запросов чтения
Упрощение сложных JOIN
Улучшение производительности отчетов
Методы:
Добавление вычисляемых колонок
Дублирование данных в связанных таблицах
Создание summary таблиц
Когда применять:
Системы отчетности и аналитики
Медленные сложные запросы
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 избыточность