Какие последствия у нарушения нормализации базы данных?

«Какие последствия у нарушения нормализации базы данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нарушение нормализации влечет за собой ряд негативных последствий для целостности, производительности и сопровождаемости базы данных:

  1. Аномалии данных:

    • Аномалия обновления: Чтобы изменить значение (например, имя клиента), необходимо обновить все его дубликаты. Пропуск приводит к противоречивым данным.
    • Аномалия удаления: Удаление записи (например, последнего товара в заказе) может случайно удалить и другую информацию (данные о самом заказе).
    • Аномалия вставки: Невозможно добавить данные (например, нового клиента), пока для него не будет создан связанный объект (например, заказ).
  2. Избыточность данных: Многократное хранение одних и тех же данных увеличивает размер базы и требует больше ресурсов для операций ввода-вывода.

  3. Нарушение целостности: Сложнее или невозможно декларативно обеспечить ссылочную целостность с помощью внешних ключей (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
);
-- Изменение имени сотрудника потребует обновления всех строк с его участием в проектах.

Вывод: Нормализация минимизирует эти риски, разделяя данные на логические сущности. Однако для оптимизации сложных запросов на чтение в аналитических системах допустима контролируемая денормализация.