Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад

Какие уровни нормализации существуют?

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

Короткий ответ

Нормализация — это процесс организации данных в базе для уменьшения избыточности и аномалий. Существуют основные нормальные формы: 1НФ (атомарные значения), 2НФ (нет частичных зависимостей от составного ключа), 3НФ (нет транзитивных зависимостей). Также есть усиленные формы: НФ Бойса-Кодда, 4НФ (нет многозначных зависимостей), 5НФ (устранение зависимостей соединения). Каждая следующая форма включает требования предыдущей.

Длинный ответ

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

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

  • Первая нормальная форма (1НФ): Все значения атрибутов атомарны (неделимы), в каждой ячейке — одно значение, нет повторяющихся групп. Например, вместо столбца "Телефоны" со значением "123, 456" создают отдельные строки или таблицу.
  • Вторая нормальная форма (2НФ): Таблица находится в 1НФ, и каждый неключевой атрибут полностью зависит от всего первичного ключа (нет частичных зависимостей). Это актуально для таблиц с составным ключом.
  • Третья нормальная форма (3НФ): Таблица находится в 2НФ, и нет транзитивных зависимостей (неключевые атрибуты не зависят друг от друга). Например, если есть столбцы OrderID, CustomerID, CustomerCity, то CustomerCity зависит от CustomerID, а не напрямую от OrderID, что нарушает 3НФ.

Расширенные нормальные формы

  • Нормальная форма Бойса-Кодда (НФБК): Усиленная версия 3НФ, требующая, чтобы любая нетривиальная зависимость атрибутов была зависимостью от потенциального ключа. Устраняет редкие аномалии, которые могут остаться в 3НФ.
  • Четвертая нормальная форма (4НФ): Таблица находится в НФБК, и нет нетривиальных многозначных зависимостей, кроме зависимости от ключа. Многозначная зависимость возникает, когда наличие пар (A, B) и (A, C) независимо друг от друга.
  • Пятая нормальная форма (5НФ) / Нормальная форма проекции-соединения: Таблица находится в 4НФ, и её нельзя декомпозировать без потерь на меньшие таблицы, кроме как по ключу. Практически редко используется, так как касается очень специфических случаев.

Пример нарушения и исправления

Рассмотрим таблицу Orders с полями: OrderID, ProductID, ProductName, CustomerID, CustomerCity. Здесь ProductName зависит от ProductID, а не от всего ключа (OrderID, ProductID) — нарушение 2НФ. CustomerCity зависит от CustomerID, а не от OrderID — нарушение 3НФ.

-- Ненормализованная таблица (нарушает 2НФ и 3НФ)
CREATE TABLE OrdersBad (
    OrderID INT,
    ProductID INT,
    ProductName VARCHAR(100),
    CustomerID INT,
    CustomerCity VARCHAR(100),
    PRIMARY KEY (OrderID, ProductID)
);

-- Нормализованная структура
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT
);
CREATE TABLE OrderDetails (
    OrderID INT,
    ProductID INT,
    PRIMARY KEY (OrderID, ProductID)
);
CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(100)
);
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    CustomerCity VARCHAR(100)
);

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

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • SQL

Ключевые слова

#normalization

#normal forms

#database design

#relational database

#data redundancy

Подпишись на Python Developer в телеграм