Первая нормальная форма (1NF)
Первая нормальная форма уже рассматривалась ранее. Переменная отношения находится в 1NF тогда и только тогда, когда в любом допустимом значении отношения каждый кортеж содержит ровно одно значение для каждого атрибута. Иными словами, соблюдается
атомарность: в одной ячейке не может храниться несколько значений. Атомарность во многом определяется предметной областью. Например, поле «ФИО» можно считать атомарным, если фамилия, имя и отчество не участвуют в фильтрации или выборках по отдельности. Если же требуется поиск по фамилии, ФИО необходимо разбить на три независимых атрибута.
Дополнительные требования к таблицам в реляционной модели: отсутствие упорядоченности строк и столбцов, недопустимость строк-дубликатов, обязательное наличие
первичного ключа (primary key), ровно одно значение из домена на каждом пересечении строки и столбца, а также отсутствие скрытых или вычисляемых компонентов, не описанных в схеме.
Пример нарушения 1NF. Таблица «Сотрудник» с полями «Сотрудник» и «Номер телефона», где у Иванова в поле «Номер телефона» записано два номера. Это нарушает атомарность. Первичным ключом выбран «Сотрудник», значения уникальны.
Приводим к 1NF: разбиваем строку с двумя телефонами на две строки — Иванов с первым номером, Иванов со вторым номером. Теперь атрибут «Сотрудник» перестаёт быть уникальным, и новый первичный ключ становится составным: {Сотрудник, Номер телефона}.
Вторая нормальная форма (2NF)
Переменное отношение находится во
второй нормальной форме тогда и только тогда, когда оно находится в 1NF и каждый
неключевой атрибут (не входящий ни в один потенциальный ключ)
неприводимо (функционально полно) зависит от первичного ключа. Это означает, что неключевой атрибут должен зависеть от всего составного ключа, а не от его части.
Пример. Таблица с полями «Модель», «Фирма», «Цена», «Скидка». Первичный ключ — {Модель, Фирма}, так как разные фирмы могут выпускать модели с одинаковыми названиями. Атрибут «Цена» зависит и от модели, и от фирмы — полная функциональная зависимость. Атрибут «Скидка» зависит только от «Фирмы»: BMW всегда даёт 5%, Nissan — 10%. Это неполная функциональная зависимость, значит, таблица не находится во 2NF.
Приведение ко 2NF. Декомпозируем таблицу на две:
• {Модель, Фирма, Цена} с первичным ключом {Модель, Фирма};
• {Фирма, Скидка} с первичным ключом {Фирма}.
Теперь каждая неключевая характеристика полностью зависит от своего первичного ключа. Количество добавляемых таблиц равно количеству неключевых атрибутов, неполно зависящих от ключа.
Третья нормальная форма (3NF)
Переменное отношение находится в
третьей нормальной форме, если оно находится во 2NF и отсутствуют
транзитивные функциональные зависимости неключевых атрибутов от ключевых.
Транзитивная зависимость возникает, когда значение неключевого атрибута можно предсказать через другой неключевой атрибут, а не напрямую по ключу. Это приводит к избыточности и риску нарушения целостности.
Пример. Таблица «Модель», «Магазин», «Телефон». Первичный ключ — «Модель» (модели уникальны). Таблица находится во 2NF, так как ключ простой. Однако «Телефон» однозначно определяется «Магазином»: у магазина «Реал Авто» всегда один и тот же номер. Возникает транзитивная зависимость: Модель → Магазин → Телефон. Если бы у магазина могло быть несколько телефонов, зависимость бы отсутствовала.
Проблемы транзитивности:
• Дублирование данных о телефоне для каждой модели магазина.
• Аномалии обновления: ошибочно указанный номер для одной модели создаст противоречие с другими записями того же магазина.
Приведение к 3NF. Выделяем две таблицы:
• {Модель, Магазин} — связь модели с магазином;
• {Магазин, Телефон} — телефон как свойство магазина.
Теперь «Телефон» зависит непосредственно от ключа «Магазин», транзитивность устранена.
Нормальная форма Бойса-Кодда (BCNF)
Нормальная форма Бойса-Кодда (BCNF) является усиленной третьей нормальной формой. Переменное отношение находится в BCNF тогда и только тогда, когда каждая нетривиальная и неприводимая слева функциональная зависимость имеет в качестве
детерминанта некоторый
потенциальный ключ (candidate key).
Иными словами, любой атрибут или набор атрибутов, от которого зависят другие атрибуты, должен быть потенциальным ключом. На практике BCNF отличается от 3NF, когда в таблице существует
несколько потенциальных ключей, и 3NF не гарантирует отсутствие аномалий.
Пример. Бронирование теннисных кортов. Таблица содержит поля: «Номер корта», «Время начала», «Время окончания», «Тариф», «Член клуба».
Возможные потенциальные ключи:
• {Номер корта, Время начала}
• {Номер корта, Время окончания}
• {Тариф, Время начала}
• {Тариф, Время окончания}
Эти комбинации уникальны, так как нельзя забронировать один корт на одно время дважды, и тариф совместно с временной меткой однозначно определяет бронь.
Таблица удовлетворяет 2NF и 3NF: неключевых атрибутов в строгом смысле нет (все атрибуты входят в какие-либо ключи), транзитивных зависимостей не наблюдается. Однако существует функциональная зависимость {Номер корта, Член клуба} → Тариф. Детерминант этой зависимости не является потенциальным ключом (он не определяет всю строку). Это нарушает BCNF. Из-за этого можно по ошибке приписать тариф, не соответствующий данному корту и членству.
Приведение к BCNF. Декомпозируем на две таблицы:
• Бронирование: {Номер корта, Время начала, Время окончания, Член клуба} с потенциальными ключами, не включающими тариф.
• Тарифы: {Номер корта, Член клуба, Тариф} с первичным ключом {Номер корта, Член клуба}.
Теперь детерминант зависимости «Тариф» является первичным ключом своей таблицы. Форма BCNF достигнута.
Если в таблице т
олько один потенциальный ключ, 3NF и BCNF совпадают. Необходимость в BCNF возникает именно при множественных ключах-кандидатах. На практике проектировщики обычно стремятся довести схему до 3NF; BCNF применяется в специфических случаях.
Дальнейшие нормальные формы
Существуют четвёртая, пятая и шестая нормальные формы. В данном курсе они подробно не рассматриваются, за исключением
шестой нормальной формы (6NF), которая будет затронута в контексте анкорного моделирования современных хранилищ данных. Анкорная модель использует 6NF и предполагает очень высокую степень декомпозиции — вместо нескольких таблиц в 3NF могут получаться десятки таблиц.
Ключевые правила:
•
1NF — атомарность значений.
•
2NF — 1NF + полная функциональная зависимость неключевых атрибутов от всего первичного ключа.
•
3NF — 2NF + отсутствие транзитивных зависимостей.
•
BCNF — каждый детерминант зависимости должен быть потенциальным ключом (актуально при нескольких потенциальных ключах).
Практическая цель — приводить любую схему данных к третьей нормальной форме, и при необходимости анализировать на соответствие BCNF.
Краткие итоги
Нормализация представляет собой систематический метод устранения логических противоречий и избыточности в реляционных схемах через пошаговую декомпозицию таблиц. Процесс идёт от базового требования атомарности данных через борьбу с частичными и транзитивными зависимостями к строгому контролю над детерминантами функциональных связей.
Сначала проверяется, что каждое поле хранит единственное значение и таблица имеет надёжный первичный ключ. Затем фокус смещается на полную функциональную зависимость: любой описательный атрибут должен определяться всем составным ключом, а не его фрагментом. Такой подход исключает ситуации, когда характеристика одного объекта «зашита» в таблицу другого, порождая дублирование при повторении части ключа. Декомпозиция по неполным зависимостям вычленяет справочники и связи, делая структуру более гибкой.
Следующий уровень — устранение транзитивности. Когда неключевой атрибут фактически описывает не саму сущность, а другой неключевой атрибут, возникает скрытая иерархия зависимостей. Это ведёт к размножению одной и той же информации и аномалиям при обновлении: изменение свойства одного объекта требует согласованной правки во множестве строк. Выделение промежуточной связи в самостоятельную таблицу разрывает эту цепочку, оставляя лишь прямые ссылки.
Особое место занимает нормальная форма Бойса-Кодда. Она вступает в силу, когда у отношения несколько потенциальных ключей, и стандартная третья форма пропускает зависимости, чьи детерминанты не являются ключом. Игнорирование этого сценария может приводить к противоречиям вроде назначения недопустимого тарифа на корт определённого уровня членства. Решение — дополнительная декомпозиция, гарантирующая, что любая значимая функциональная связь опирается на полный потенциальный ключ.
Практическое применение этих принципов позволяет строить устойчивые схемы, в которых каждое свойство хранится в единственном месте, а связи между сущностями явны и недвусмысленны. Владение инструментарием 1NF–BCNF даёт возможность не только исправлять унаследованные структуры, но и проектировать новые с минимальным риском возникновения аномалий вставки, удаления и обновления.
1. Первая нормальная форма требует атомарности каждого значения, исключая множественные данные в одной ячейке.
2. Атомарность не абсолютна: её границы задаются контекстом предметной области и сценариями использования.
3. Вторая нормальная форма устраняет неполные функциональные зависимости неключевых атрибутов от частей составного первичного ключа.
4. Если неключевой атрибут определяется лишь частью ключа, таблицу необходимо разбить, выделив эту зависимость в отдельное отношение.
5. Третья нормальная форма запрещает транзитивные зависимости, когда неключевой атрибут зависит от другого неключевого атрибута.
6. Транзитивность ведёт к избыточному дублированию и аномалиям обновления данных.
7. Приведение к 3NF выполняется декомпозицией: цепочка «ключ → неключевой → неключевой» разделяется на две прямые связи.
8. Нормальная форма Бойса-Кодда ужесточает 3NF: детерминант любой функциональной зависимости обязан быть потенциальным ключом.
9. BCNF и 3NF различаются только при наличии нескольких потенциальных ключей в одном отношении.
10. Классический пример нарушения BCNF — зависимость тарифа от номера корта и членства, когда в таблице есть множество ключей-кандидатов.
11. Декомпозиция до BCNF выделяет потенциальный ключ, не являющийся ключом в исходной таблице, в самостоятельное отношение.
12. На практике целью нормализации обычно служит третья нормальная форма с дополнительной проверкой на BCNF в сложных случаях.
1. Что такое атомарность и как она связана с первой нормальной формой?
2. Каким образом предметная область влияет на решение о том, является ли составное поле (например, ФИО) атомарным?
3. Почему после приведения таблицы «Сотрудник» к 1NF первичный ключ стал составным?
4. В чём отличие полной и неполной функциональной зависимости неключевого атрибута от первичного ключа?
5. Как определить, находится ли отношение во второй нормальной форме, если его первичный ключ состоит из одного столбца?
6. Приведите пример транзитивной зависимости, нарушающей третью нормальную форму.
7. Какие практические проблемы возникают из-за транзитивных зависимостей?
8. Как декомпозиция таблицы «Модель–Магазин–Телефон» устраняет транзитивность?
9. В чём главное отличие нормальной формы Бойса-Кодда от третьей нормальной формы?
10. Почему в примере с бронированием теннисных кортов таблица соответствует 3NF, но не BCNF?
11. При каком условии третья нормальная форма автоматически гарантирует BCNF?
12. Какие действия необходимы для приведения таблицы с несколькими потенциальными ключами к BCNF?