Нормализация БД: 1НФ, 2НФ, 3НФ

Что такое нормальные формы, как привести таблицу к 3НФ пошагово, что такое функциональная зависимость и когда денормализация оправдана.

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

Исходная ненормализованная таблица

СтудентГруппаКураторПредметыОценки
ИвановИВТ-21Петров П.П.Матан, Физика5, 4
СидоровИВТ-21Петров П.П.Матан3

Проблемы: нельзя нормально искать по предмету, при смене куратора надо править много строк, а нового студента без оценок вообще некуда вписать.

1НФ — атомарность

Каждая ячейка содержит одно значение, нет повторяющихся групп столбцов, у таблицы есть первичный ключ. Списки «Матан, Физика» в одном поле — прямое нарушение.

-- после приведения к 1НФ
Успеваемость(студент, группа, куратор, предмет, оценка)
-- ключ: (студент, предмет)

2НФ — нет частичных зависимостей

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

Студенты(студент_id, фио, группа, куратор)
Оценки(студент_id, предмет_id, оценка)

3НФ — нет транзитивных зависимостей

Неключевые атрибуты не должны зависеть друг от друга. Куратор зависит от группы, а группа — от студента: цепочка студент → группа → куратор транзитивна. Разрываем.

Студенты(студент_id, фио, группа_id)
Группы(группа_id, название, куратор)
Предметы(предмет_id, название)
Оценки(студент_id, предмет_id, оценка, дата)
Учебная формулировка 3НФ, которую любят на защите: «каждый неключевой атрибут зависит от ключа, от всего ключа и ни от чего, кроме ключа».

Дальше 3НФ

Когда денормализация оправдана

Нормализованная схема требует соединений, а они стоят времени. В отчётных и аналитических системах намеренно дублируют данные (например, хранят итоговую сумму заказа), чтобы не считать её JOIN-ами при каждом открытии отчёта. В курсовой это допустимо, если вы это осознанно объясните и покажете, чем поддерживаете согласованность — триггером или обновлением из приложения.

Порядок работы для курсовой

  1. Выпишите все атрибуты предметной области сплошным списком.
  2. Найдите функциональные зависимости: что чем однозначно определяется.
  3. Разложите до 3НФ, назначьте первичные и внешние ключи.
  4. Нарисуйте ER-диаграмму по получившимся сущностям.
  5. Напишите DDL-скрипт создания таблиц с ограничениями целостности.

Частые вопросы

Обязательно ли доводить до 3НФ?

В учебных работах — да, это стандартное требование. 3НФ убирает практически все аномалии и при этом не усложняет схему без нужды.

Как показать функциональную зависимость в отчёте?

Стрелками: студент_id → фио, группа_id; группа_id → название, куратор. Такая запись читается однозначно и экономит абзац текста.

Читайте также

Сделаем работу по этой теме

Опишите задачу — ответим в течение 15 минут в личных сообщениях ВКонтакте, назовём срок и цену. Предоплаты за оценку нет.

  • Оценка заявки бесплатно
  • Правки по замечаниям преподавателя
  • Работы по всем техническим и IT-дисциплинам

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