Что такое нормальные формы в реляционных базах данных?

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

Ответ

Нормальные формы (НФ) — это набор правил проектирования схемы БД, направленных на устранение избыточности данных и аномалий при операциях вставки, обновления и удаления (аномалии модификации).

Основные нормальные формы:

  1. Первая нормальная форма (1НФ):

    • Все значения атрибутов атомарны (неделимы).
    • В таблице нет повторяющихся групп строк или столбцов.
      
      -- НЕ 1НФ: столбец 'phones' содержит составное значение
      CREATE TABLE contacts (id INT, name VARCHAR(100), phones VARCHAR(255)); -- '123, 456'

    -- 1НФ: каждый телефон в отдельной строке CREATE TABLE contacts (id INT, name VARCHAR(100), phone VARCHAR(20));

  2. Вторая нормальная форма (2НФ):

    • Таблица находится в 1НФ.
    • Каждый неключевой атрибут полностью зависит от всего составного первичного ключа (нет частичных зависимостей).
      -- НЕ 2НФ: 'supplier_name' зависит только от 'supplier_id', а не от всего ключа (order_id, supplier_id)
      CREATE TABLE order_supplies (order_id INT, supplier_id INT, supplier_name VARCHAR(100), item VARCHAR(100));
      -- Решение: вынести supplier_name в отдельную таблицу suppliers.
  3. Третья нормальная форма (3НФ):

    • Таблица находится в 2НФ.
    • Нет транзитивных зависимостей: неключевые атрибуты не зависят от других неключевых атрибутов.
      -- НЕ 3НФ: 'city_population' зависит от 'city', а не напрямую от 'employee_id'
      CREATE TABLE employees (employee_id INT, name VARCHAR(100), city VARCHAR(100), city_population INT);
      -- Решение: вынести city и city_population в отдельную таблицу cities.

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