Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГАК-2026.docx
Скачиваний:
1
Добавлен:
16.06.2026
Размер:
2.66 Mб
Скачать

3. Нормальные формы (ключевые)

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

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

Нарушение 1НФ:

id

имя

телефоны

1

Иван

123-45-67, 234-56-78

После приведения к 1НФ:

id

имя

телефон

1

Иван

123-45-67

2

Иван

234-56-78

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

Требования:

  1. Таблица находится в 1НФ.

  2. Каждый неключевой атрибут полностью зависит от всего первичного ключа (а не от его части). Это актуально для таблиц с составным первичным ключом.

Пример нарушения 2НФ: Пусть есть таблица "Оценки" с составным ключом (id_студента, id_предмета):

id_студента (PK)

id_предмета (PK)

имя_студента

название_предмета

оценка

1

101

Иван

Базы данных

5

1

102

Иван

Алгоритмы

4

2

101

Мария

Базы данных

4

Проблема: атрибут имя_студента зависит только от части ключа (id_студента), а не от всего ключа целиком. То же для название_предмета (зависит только от id_предмета). Это приводит к избыточности.

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

  • Студенты (id_студента, имя_студента)

  • Предметы (id_предмета, название_предмета)

  • Оценки (id_студента, id_предмета, оценка) — здесь оба поля входят в ключ, и оценка зависит от обоих.

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

Требования:

  1. Таблица находится в 2НФ.

  2. Отсутствуют транзитивные зависимости — неключевые атрибуты не должны зависеть от других неключевых атрибутов.

Пример нарушения 3НФ: Таблица "Студенты":

id_студента

имя

id_группы

название_группы

куратор_группы

1

Иван

101

ИС-21

Петрова И.И.

2

Мария

101

ИС-21

Петрова И.И.

3

Петр

102

БИ-22

Сидоров П.П.

Зависимости:

  • id_студента → id_группы

  • id_группы → название_группы

  • id_группы → куратор_группы

Получается транзитивная зависимость: id_студента → id_группы → название_группы. Название группы зависит от студента через группу.

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

  • Группы (id_группы, название_группы, куратор_группы)

  • Студенты (id_студента, имя, id_группы)

НФБК (Нормальная форма Бойса-Кодда)

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

4НФ (Четвертая нормальная форма)

Устраняет многозначные зависимости. Когда один атрибут определяет несколько независимых множеств значений.

Пример: Студент может знать несколько языков и иметь несколько хобби. Если хранить в одной таблице, получится декартово произведение (каждый язык с каждым хобби). Решение — вынести в отдельные таблицы.

5НФ (Пятая нормальная форма)

Декомпозиция без потерь. На практике редко применяется.

4. Денормализация

Иногда в реальных проектах намеренно отходят от принципов нормализации ради производительности. Это называется денормализация.

Пример: в таблицу "Заказы" добавляют поле имя_клиента, хотя оно уже есть в таблице "Клиенты". Это избыточно (нарушение 3НФ), но зато не нужно делать JOIN при выводе списка заказов.

Денормализация — это компромисс: скорость чтения в обмен на избыточность и риск рассинхронизации данных.