Собесов

Нормальные формы выше 3NF: BCNF и 4NF

SQLНормализацияСредняяMiddle

Условие

Какие нормальные формы существуют помимо 1NF/2NF/3NF? Когда они применимы?

Решение

Полный список нормальных форм

Форма Что устраняет
1NF Неатомарные значения
2NF Частичные зависимости от составного ключа
3NF Транзитивные зависимости
BCNF (Boyce-Codd) Зависимости от не-ключей-кандидатов
4NF Многозначные зависимости
5NF Зависимости соединения
6NF Темпоральные данные (теоретически)

BCNF — почему отдельно от 3NF

3NF разрешает зависимости от superkey (PK) и от candidate keys. BCNF строже: разрешает только от superkey.

Пример: 3NF, но не BCNF

TeacherSubject(Teacher, Subject, Course)

Допустим: учитель ведёт ровно один курс, но курс могут вести несколько учителей.

  • Зависимости: (Teacher, Subject) → Course, Course → Subject.
  • 3NF: соблюдено (Course — candidate key).
  • BCNF: нарушено: Course → SubjectCourse не суперключ полной таблицы.

Решение: разделить на:

  • Teachers(Teacher, Course),
  • Courses(Course, Subject).

4NF — многозначные зависимости

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

Пример

StudentLanguageHobby(Student, Language, Hobby) — студент знает несколько языков и имеет несколько хобби, эти атрибуты независимы.

В 3NF/BCNF строки будут декартовым произведением: 3 языка × 2 хобби = 6 строк на одного студента. Это нарушение 4NF.

Решение: две таблицы — StudentLanguage(Student, Language) и StudentHobby(Student, Hobby).

5NF — Project-Join Normal Form

Устраняет «зависимости соединения», когда таблицу можно разложить на ≥ 3 проекций без потерь, но не на 2. На практике встречается редко.

6NF

Темпоральные расширения: каждый изменяющийся атрибут — в отдельной таблице с временным интервалом. Используется в системах audit log и DWH SCD-6.

Где это встречается на практике

  • OLTP — обычно стремятся к 3NF/BCNF.
  • DWH — преднамеренная денормализация, схема «звезда» нарушает 3NF ради скорости.
  • OLAP / широкие таблицы — еще ниже норму.

Подводные камни

  1. BCNF строже 3NF, но в 99% случаев совпадают — отдельно об этом думать стоит только при сложных зависимостях.
  2. 4NF интересна для тегов/категорий — случай «один объект имеет много свойств в нескольких независимых измерениях».
  3. Перфекционизм по 5NF/6NF — обычно избыточен; лучше прагматично остановиться на 3NF.

Эталонный ответ

Помимо 1NF/2NF/3NF: BCNF (Boyce-Codd — устраняет зависимости от не-ключей-кандидатов), 4NF (устраняет многозначные зависимости), 5NF (устраняет зависимости соединения), 6NF (для темпоральных данных).

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти