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

Ответ

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

Основная цель — разбить большие таблицы на меньшие, хорошо структурированные таблицы и определить связи между ними.

Основные нормальные формы (НФ):

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

    • Таблица является "плоской".
    • Все атрибуты (колонки) являются атомарными (неделимыми), то есть в одной ячейке не может быть нескольких значений.
    • Отсутствуют повторяющиеся группы столбцов (например, product1, product2).
  2. Вторая нормальная форма (2НФ):

    • Таблица находится в 1НФ.
    • Все неключевые атрибуты полностью зависят от составного первичного ключа. Если первичный ключ простой (состоит из одного поля), таблица в 1НФ автоматически находится и во 2НФ.
  3. Третья нормальная форма (3НФ):

    • Таблица находится в 2НФ.
    • Отсутствуют транзитивные зависимости. Это означает, что неключевые атрибуты не должны зависеть от других неключевых атрибутов.

Существуют и другие формы (НФ Бойса-Кодда, 4НФ, 5НФ), но на практике чаще всего достаточно приведения к 3НФ.

Пример:

Предположим, у нас есть таблица заказов:
Orders (OrderID, CustomerID, CustomerName, ProductID, ProductName, Quantity)


  • Проблема: CustomerName зависит от CustomerID, а ProductName — от ProductID. Это вызывает избыточность (имя клиента повторяется для каждого его заказа) и аномалии обновления (если клиент сменит имя, придется обновить все его заказы).


  • Решение (приведение к 3НФ):

    1. Customers (CustomerID, CustomerName)
    2. Products (ProductID, ProductName)
    3. Orders (OrderID, CustomerID, ProductID, Quantity)

Компромиссы и денормализация:

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

В некоторых случаях для повышения скорости чтения данных применяют денормализацию — умышленное нарушение нормальных форм для объединения данных в одной таблице и уменьшения количества JOIN'ов.