Нормализация БД: функциональные зависимости
Методические указания, теоретический фундамент, аксиоматика Армстронга, алгоритмы замыкания и минимального покрытия, педагогические сценарии для преподавателя.
1. Детальный поминутный тайминг учебного занятия
Занятие ориентировано на формирование строгой математической культуры проектирования реляционных схем. Теория функциональных зависимостей (ФЗ) переводит интуитивное проектирование («мне кажется, эти поля должны быть вместе») в доказательную инженерную дисциплину.
Сравнительная сетка хронометража (80 и 60 минут)
| Этап занятия | Основной регламент (80 мин) | Сокращенный регламент (60 мин) | Ключевое содержание и фокус внимания |
|---|---|---|---|
| 1. Организационный момент и актуализация опорных знаний | 10 мин (00:00–00:10) | 7 мин (00:00–00:07) | Приветствие, фиксация отсутствующих. Проблемная мотивация: демонстрация «плоской таблицы» с аномалиями модификации, удаления и вставки. Переход от инфологической модели (Занятие 14) к строгому реляционному анализу. |
| 2. Теоретический блок: ФЗ и аксиоматика Армстронга | 25 мин (00:10–00:35) | 20 мин (00:07–00:27) | Строгое определение ФЗ X → Y. Семантика и контрпримеры. Базовые аксиомы Армстронга (рефлексивность, пополнение, транзитивность) и производные правила (объединение, декомпозиция, псевдотранзитивность). Теорема о полноте и корректности. |
| 3. Алгоритмический блок: замыкание атрибутов X+ и поиск ключей | 20 мин (00:35–00:55) | 15 мин (00:27–00:42) | Алгоритм вычисления X+ за полиномиальное время. Определение суперключа и потенциального (кандидатного) ключа. Алгоритм выделения обязательных атрибутов ключа (L, R, B, N). Пошаговый разбор сквозного примера на доске. |
| 4. Минимальное покрытие ФЗ (Minimal Cover) и экспресс-практикум | 15 мин (00:55–01:10) | 12 мин (00:42–00:54) | Понятие эквивалентности множеств ФЗ. Три шага канонизации: расщепление правых частей, устранение посторонних атрибутов слева, удаление избыточных зависимостей. Индивидуальная работа студентов в интерактивном листе zanyatie.html. |
| 5. Разбор типичных ошибок, подведение итогов, рефлексия | 10 мин (01:10–01:20) | 6 мин (00:54–01:00) | Анализ частых студенческих заблуждений. Демонстрация комикса Bobby Tables (xkcd #327) как метафоры разрушения целостности при пренебрежении формальным моделированием. Выставление баллов по критериальной рубрике, инструктаж по резервному ДЗ. |
2. Теоретический фундамент: функциональные зависимости
2.1. Формальное математическое определение
Пусть R(U) — схема отношения над универсальным множеством атрибутов U = {A₁, A₂, ..., Aₙ}, а r(R) — произвольное корректное (допустимое) мгновенное состояние (экземпляр) отношения. Пусть X ⊆ U и Y ⊆ U — подмножества атрибутов.
t₁[X] = t₂[X] ⟹ t₁[Y] = t₂[Y]
Множество атрибутов X называется детерминантом (левой частью, Left-Hand Side, LHS), а Y — зависимой частью (правой частью, Right-Hand Side, RHS).
Фамилия → Паспорт от этого не возникает, поскольку бизнес-правило допускает однофамильцев.
2.2. Классификация функциональных зависимостей
- Тривиальная зависимость: ФЗ
X → Yтривиальна, если правая часть является подмножеством левой части:Y ⊆ X(например,{Табельный_номер, ФИО} → {ФИО}). Выполняется всегда в силу природы отношений. - Нетривиальная зависимость: ФЗ
X → Yнетривиальна, еслиY ⊈ X(существует хотя бы один атрибут вY, не входящий вX). - Полностью нетривиальная зависимость:
X ∩ Y = ∅(левая и правая части не имеют общих атрибутов). - Полная функциональная зависимость: зависимость
X → Yполная, еслиYзависит отX, но не зависит ни от какого собственного подмножестваX' ⊂ X. Формально:X → Yи∀ X' ⊂ X: X' ↛ Y. - Частичная функциональная зависимость: зависимость
X → Yчастичная, еслиX— составной детерминант, и существует собственное подмножествоX' ⊂ X, такое чтоX' → Y. Частичные зависимости неключевых полей от составного первичного ключа служат причиной нарушения 2НФ. - Транзитивная функциональная зависимость: зависимость
X → Zтранзитивна, если существуют зависимостиX → YиY → Z, при этомY ↛ X(нет обратной зависимости) иZ ⊈ X ∪ Y. Транзитивные зависимости неключевых полей от ключа служат причиной нарушения 3НФ.
3. Система логического вывода: аксиомы Армстронга
В 1974 году Уильям В. Армстронг (William W. Armstrong) сформулировал систему аксиом, позволяющую чисто синтаксически выводить все следствия из заданного множества ФЗ без обращения к непосредственному перебору кортежей.
3.1. Базовые аксиомы Армстронга
| Название аксиомы | Символическая запись | Семантическая интерпретация |
|---|---|---|
| А1. Рефлексивность (Reflexivity) | Если Y ⊆ X, то X → Y |
Любой набор атрибутов однозначно определяет сам себя и любое свое подмножество. |
| А2. Пополнение (Augmentation) | Если X → Y, то XZ → YZ (для любого Z) |
Добавление одних и тех же атрибутов к обеим частям зависимости сохраняет ее истинность. |
| А3. Транзитивность (Transitivity) | Если X → Y и Y → Z, то X → Z |
Если X однозначно определяет Y, а Y однозначно определяет Z, то X определяет Z. |
3.2. Производные правила вывода (Derived Rules)
Базовые аксиомы А1–А3 образуют полный и корректный (sound and complete) базис. Из них строго выводятся удобные вспомогательные правила:
| Правило | Формулировка | Схема доказательства через А1–А3 |
|---|---|---|
| Объединение (Union / Additivity) | X → Y и X → Z ⟹ X → YZ |
1) X → Y ⟹ X → XY (пополнение на X, А2).2) X → Z ⟹ XY → YZ (пополнение на Y, А2).3) X → XY и XY → YZ ⟹ X → YZ (транзитивность, А3). |
| Декомпозиция (Decomposition / Projectivity) | X → YZ ⟹ X → Y и X → Z |
1) Y ⊆ YZ ⟹ YZ → Y (рефлексивность, А1).2) X → YZ и YZ → Y ⟹ X → Y (транзитивность, А3).Аналогично доказывается X → Z. |
| Псевдотранзитивность (Pseudotransitivity) | X → Y и YZ → W ⟹ XZ → W |
1) X → Y ⟹ XZ → YZ (пополнение на Z, А2).2) XZ → YZ и YZ → W ⟹ XZ → W (транзитивность, А3). |
| Композиция (Composition) | X → Y и Z → W ⟹ XZ → YW |
1) X → Y ⟹ XZ → YZ (А2).2) Z → W ⟹ YZ → YW (А2).3) XZ → YZ и YZ → YW ⟹ XZ → YW (А3). |
4. Алгоритм вычисления замыкания множества атрибутов X+
Замыкание множества атрибутов X относительно множества ФЗ F (обозначается X⁺ или X⁺_F) — это множество всех атрибутов A ∈ U, функционально зависящих от X в силу правил логического вывода: X⁺ = {A ∈ U | F ⊢ X → A}.
Пошаговый псевдокод алгоритма
Вход: Множество атрибутов U, множество ФЗ F, целевое подмножество атрибутов X ⊆ U.
Выход: Замыкание X⁺ относительно F.
1. Инициализация:
X⁺ := X;
2. Цикл расширения:
REPEAT
old_X⁺ := X⁺;
ДЛЯ КАЖДОЙ ФЗ (LHS → RHS) ИЗ F:
ЕСЛИ LHS ⊆ X⁺ ТОГДА
X⁺ := X⁺ ∪ RHS;
UNTIL X⁺ == old_X⁺;
3. ВОЗВРАТ X⁺;
|U| итераций, на каждой проверяя |F| зависимостей. Итоговая сложность O(|F| · |U|). Линейный алгоритм Беери-Бернштейна (Beeri & Bernstein, 1979) использует счетчики невключенных атрибутов детерминантов и списки смежности, достигая строго линейного времени O(total_size(F)).
5. Определение потенциальных ключей отношения
5.1. Терминологическая иерархия
- Суперключ (Superkey): Подмножество атрибутов
K ⊆ Uназывается суперключом отношенияR(U), если его замыкание покрывает все отношение:K⁺ = U. - Потенциальный (кандидатный) ключ (Candidate Key): Минимальный суперключ. Подмножество
K ⊆ Uявляется потенциальным ключом, если:K⁺ = U(свойство однозначной идентификации);- Для любого собственного подмножества
K' ⊂ Kвыполняется(K')⁺ ≠ U(свойство неприводимости/минимальности).
- Первичный ключ (Primary Key): Один из потенциальных ключей, официально назначенный проектировщиком в качестве основного идентификатора кортежа.
- Первичные (ключевые) и вторичные (неключевые) атрибуты: Атрибут
A ∈ Uназывается первичным (prime attribute), если он входит в состав хотя бы одного потенциального ключа. В противном случае он является неключевым (non-prime).
5.2. Эвристический алгоритм классификации атрибутов (L, R, B, N)
Для ускорения поиска ключей и отсечения экспоненциального перебора 2^|U| атрибуты отношения разбиваются на 4 непересекающиеся категории по их позиции во множестве ФЗ F:
| Категория | Где встречается атрибут в F | Роль при поиске потенциальных ключей |
|---|---|---|
| Класс L (Left only) | Только в левых частях (LHS), ни разу в правых (RHS). | ОБЯЗАН входить в состав каждого потенциального ключа, так как никакой другой атрибут не может его функционально определить. |
| Класс R (Right only) | Только в правых частях (RHS), ни разу в левых (LHS). | НИКОГДА НЕ МОЖЕТ входить в минимальный ключ (кроме вырожденного случая, когда нет ФЗ), так как он никого не определяет, но определяется другими. |
| Класс N (Neither) | Не встречается ни слева, ни справа во множестве ФЗ. | ОБЯЗАН входить в состав каждого ключа, так как независим от всех зависимостей схемы. |
| Класс B (Both) | Встречается и в левых, и в правых частях зависимостей. | Кандидат на участие в ключе. Перебираются комбинации атрибутов B в объединении с гарантированным ядром (L ∪ N). |
1. Формируем обязательное ядро: Core = L ∪ N.
2. Вычисляем замыкание (Core)⁺.
3. Если (Core)⁺ = U, то Core — единственный потенциальный ключ отношения!
4. Если (Core)⁺ ≠ U, перебираем комбинации Core ∪ {b₁}, затем Core ∪ {b₁, b₂} из атрибутов класса B, отсекая надмножества уже найденных ключей.
6. Каноническое (минимальное) покрытие ФЗ (Minimal Cover)
Два множества ФЗ F и G называются эквивалентными (F ≡ G), если их замыкания совпадают: F⁺ = G⁺ (любая зависимость из F выводима из G, и наоборот). Множество F_c называется минимальным (каноническим) покрытием для F, если F_c ≡ F и выполняются три строгих условия:
- Синглтон в правой части (Singleton RHS): Правая часть каждой ФЗ в
F_cсостоит ровно из одного атрибута:X → A. - Отсутствие посторонних атрибутов слева (No extraneous LHS attributes): Ни в одной ФЗ
X → A ∈ F_cнельзя удалить атрибутB ∈ Xтак, чтобы полученное множество осталось эквивалентным. Формально: дляX' = X \ {B}проверяется, выводимо лиX' → AизF_c. - Отсутствие избыточных зависимостей (No redundant FDs): Ни одну зависимость
f ∈ F_cнельзя удалить из покрытия. Формально:∀ f ∈ F_c: (F_c \ {f}) ⊬ f.
Алгоритм построения Minimal Cover
Шаг 1. Расщепление правых частей:
Каждую зависимость X → {A₁, A₂, ..., Aₖ} заменяем на набор X → A₁, X → A₂, ..., X → Aₖ.
Шаг 2. Устранение посторонних атрибутов в детерминантах (LHS):
Для каждой зависимости X → A, где |X| ≥ 2:
Для каждого атрибута B ∈ X:
Пусть X' = X \ {B}.
Вычисляем замыкание (X')⁺ относительно текущего множества ФЗ.
Если A ∈ (X')⁺, то атрибут B является посторонним (избыточным) слева.
Заменяем X → A на X' → A.
Шаг 3. Устранение избыточных зависимостей:
Для каждой зависимости f: X → A в текущем множестве:
Пусть F' = F \ {f}.
Вычисляем замыкание X⁺ относительно F'.
Если A ∈ X⁺, то зависимость f избыточна (выводится из оставшихся).
Удаляем f: F := F'.
7. Типовые ошибки обучающихся и педагогические приемы
7.1. Рейтинг когнитивных затруднений студентов
| Типовая ошибка | Суть заблуждения | Методический способ преодоления |
|---|---|---|
| «Стрелка — это присваивание» | Студент воспринимает A → B как команду программирования (B = A) или как логическую импликацию истинностных высказываний. |
Интерпретация через многозначную функцию: A → B означает, что значение A однозначно указывает на строку в справочнике B (как табельный номер однозначно указывает на сотрудника). |
| «Вывод ФЗ из одной таблицы» | Студент видит 3 строки в учебной таблице и заявляет: «Здесь зарплаты у всех разные, значит Зарплата → Фамилия». | Прием «Контрпример из жизни»: предложить мысленный эксперимент — «А если завтра мы наймем второго стажера с такой же зарплатой? Схема БД должна выдерживать любые допустимые бизнес-ситуации». |
| Одностороннее пополнение | Вместо правила X → Y ⟹ XZ → YZ студент пишет XZ → Y (что верно, но теряет пополнение справа) или ошибочно полагает, что X → Y ⟹ X → YZ (что ложно). |
Использование весов на весах: если чаша X перевешивает (определяет) Y, то положив гирю Z на обе чаши (XZ и YZ), баланс однозначности сохраняется. |
| Пропуск составных ключей | Поиск ключа останавливается на первом попавшемся суперключе без проверки минимальности или без поиска альтернативных кандидатных ключей. | Табличная методика L-R-B-N: жесткая фиксация обязательного ядра (L ∪ N) отсекает до 90% слепого перебора и гарантирует нахождение ВСЕХ ключей. |
7.2. Рекомендуемые педагогические приемы
- Прием «Аномальный шок»: Начать занятие не с формул, а с таблицы
Сотрудники_Проекты(EmpID, ProjID, Dept, Salary, Role), в которой при увольнении сотрудника теряется информация о проекте (аномалия удаления), а для изменения названия отдела требуется переписать 500 строк (аномалия обновления). Показать, что причина бед — в непризнанных ФЗ. - Инструмент «Трассировочная таблица замыкания»: При вычислении
X⁺рисовать на доске таблицу из трех колонок: «Шаг итерации», «Примененная ФЗ», «Текущее замыкание X⁺». Это исключает пропуск шагов и делает логику прозрачной. - Прием «Мемори-чек Армстронга»: Запоминание трех базовых правил через мнемонику:
- Рефлексивность: «Часть целого всегда известна, если известно целое».
- Пополнение: «Если знаешь ответ, то добавив лишний вопрос к условию и ответу, ответ останется верным».
- Транзитивность: «Друг моего друга — через цепочку однозначности».