Ответ
Нарушение нормализации влечет за собой ряд негативных последствий для целостности, производительности и сопровождаемости базы данных:
-
Аномалии данных:
- Аномалия обновления: Чтобы изменить значение (например, имя клиента), необходимо обновить все его дубликаты. Пропуск приводит к противоречивым данным.
- Аномалия удаления: Удаление записи (например, последнего товара в заказе) может случайно удалить и другую информацию (данные о самом заказе).
- Аномалия вставки: Невозможно добавить данные (например, нового клиента), пока для него не будет создан связанный объект (например, заказ).
-
Избыточность данных: Многократное хранение одних и тех же данных увеличивает размер базы и требует больше ресурсов для операций ввода-вывода.
-
Нарушение целостности: Сложнее или невозможно декларативно обеспечить ссылочную целостность с помощью внешних ключей (FOREIGN KEY), что ведет к появлению "висячих" ссылок.
Практический пример:
-- Проблемная схема (нарушение 2NF/3NF)
CREATE TABLE Employee_Project (
emp_id INT,
emp_name VARCHAR(100), -- Зависит от emp_id, а не от ключа (emp_id, project_id)
project_id INT,
project_name VARCHAR(100) -- Зависит от project_id
);
-- Изменение имени сотрудника потребует обновления всех строк с его участием в проектах.
Вывод: Нормализация минимизирует эти риски, разделяя данные на логические сущности. Однако для оптимизации сложных запросов на чтение в аналитических системах допустима контролируемая денормализация.