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

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

Ответ

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

Основная цель — обеспечить целостность данных и эффективную организацию. Процесс следует через серию нормальных форм (НФ):

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

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

    • Все значения атрибутов атомарны (неделимы).
    • В таблице нет повторяющихся групп или массивов.
      -- Ненормализованная таблица (нарушает 1NF)
      CREATE TABLE Orders (
      OrderID INT PRIMARY KEY,
      CustomerName VARCHAR(100),
      Products VARCHAR(255) -- Список товаров через запятую: 'Монитор,Клавиатура,Мышь'
      );
      -- Приведение к 1NF
      CREATE TABLE Orders (
      OrderID INT,
      CustomerName VARCHAR(100)
      );
      CREATE TABLE OrderItems (
      OrderItemID INT PRIMARY KEY,
      OrderID INT,
      ProductName VARCHAR(100) -- Один товар на строку
      );
  2. Вторая нормальная форма (2NF)

    • Таблица должна находиться в 1NF.
    • Все неключевые атрибуты должны полностью зависеть от всего первичного ключа (устраняются частичные зависимости). Это критично для таблиц с составными первичными ключами.
    • Пример нарушения: В таблице OrderDetails(OrderID, ProductID, ProductName, Quantity) атрибут ProductName зависит только от ProductID, а не от всей пары (OrderID, ProductID).
  3. Третья нормальная форма (3NF)

    • Таблица должна находиться в 2NF.
    • Нет транзитивных зависимостей: неключевые атрибуты не должны зависеть от других неключевых атрибутов, а только от первичного ключа.
    • Пример нарушения: В таблице Employees(EmpID, DeptID, DeptLocation) атрибут DeptLocation зависит от DeptID, который сам не является ключом.

Практический баланс

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