Sobes.tech
Назад к вопросам
Junior — Middle
44

Можете объяснить, что подразумевается под третьей нормальной формой в реляционной базе данных?

Компании, где спрашивали
adspector
Баланс-ПлатформаБаланс-Платформа
30бит30бит

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

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

Определение:

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

Проще говоря: каждый факт должен храниться в одном месте и зависеть только от ключа таблицы, а не от другого неключевого поля. Если employee_id -> department_id и department_id -> department_name, то department_name не должен храниться в таблице сотрудников, потому что он зависит не напрямую от сотрудника, а через отдел.

Пример использования:

Допустим, есть таблица сотрудников:

employees
- employee_id
- employee_name
- department_id
- department_name

Здесь department_name зависит от department_id, а не от employee_id напрямую. Это нарушает 3НФ.

Правильнее разделить на две таблицы:

employees
- employee_id
- employee_name
- department_id

departments
- department_id
- department_name

Теперь название отдела хранится только в departments, и при изменении имени отдела не нужно обновлять его в каждой строке сотрудников.

Пояснение кода:

Код не требуется, так как это концепция проектирования схемы БД. Разберём пример по шагам:

  1. В исходной таблице у каждого сотрудника хранится идентификатор отдела и имя отдела.
  2. Имя отдела повторяется у многих сотрудников, что создаёт дублирование.
  3. При переименовании отдела пришлось бы менять много строк, иначе данные разъедутся.
  4. После разбиения на employees и departments информация об отделе хранится один раз.
  5. Связь между таблицами остаётся через department_id, а избыточность исчезает.

Ключевые моменты:

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