Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Какие требования у первых трёх нормальных форм?

Вопрос проверяет понимание нормальных форм в реляционных базах данных, необходимых для проектирования структурированных и эффективных схем данных без избыточности.

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

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

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

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

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

Таблица находится в 1НФ, если выполняются следующие условия:

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

Пример нарушения 1НФ: столбец "Телефоны" со значением "+7-999-123-45-67, +7-999-987-65-43". Для соответствия 1НФ нужно либо создать отдельные строки для каждого телефона, либо вынести телефоны в отдельную таблицу.

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

Таблица находится во 2НФ, если:

  • Она уже находится в 1НФ.
  • Каждый неключевой атрибут (столбец, не входящий в первичный ключ) полностью функционально зависит от всего первичного ключа, а не от его части.

Это требование актуально для таблиц с составным первичным ключом. Если неключевой атрибут зависит только от части ключа, его следует вынести в отдельную таблицу.

-- Пример нарушения 2НФ:
-- Таблица Заказы (OrderID, ProductID, ProductName, Quantity)
-- Первичный ключ: (OrderID, ProductID)
-- ProductName зависит только от ProductID, а не от всего ключа.
-- Решение: вынести ProductName в таблицу Товары (ProductID, ProductName).

Третья нормальная форма (3НФ)

Таблица находится в 3НФ, если:

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

Если такой зависимости нет, атрибут, который зависит от другого неключевого атрибута, следует вынести в отдельную таблицу.

-- Пример нарушения 3НФ:
-- Таблица Сотрудники (EmployeeID, Name, DepartmentID, DepartmentLocation)
-- Первичный ключ: EmployeeID
-- DepartmentLocation зависит от DepartmentID, а не напрямую от EmployeeID.
-- Решение: вынести DepartmentID и DepartmentLocation в таблицу Отделы.

Следование первым трём нормальным формам позволяет создать логичную, непротиворечивую структуру базы данных, которая легко поддерживается и масштабируется. Однако в реальных проектах иногда сознательно отходят от нормализации для повышения производительности (денормализация), особенно в системах, ориентированных на чтение.

Итог: Требования первых трёх нормальных форм применяются для проектирования реляционных баз данных, чтобы устранить дублирование данных и предотвратить аномалии обновления. Их стоит соблюдать на этапе проектирования большинства OLTP-систем, где важна целостность данных.

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • SQL

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

#database normalization

#first normal form

#second normal form

#third normal form

#relational database

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