Учебно-методическое руководство

Нормализация БД: функциональные зависимости

Методические указания, теоретический фундамент, аксиоматика Армстронга, алгоритмы замыкания и минимального покрытия, педагогические сценарии для преподавателя.

Дисциплина ОП.08 Основы проектирования баз данных
Тематический раздел Тема 3. Этапы проектирования баз данных (§2.2 с.7 программы)
Номер занятия Занятие 15 (урок с объяснением теории)
Тайминг 80 минут (основной) / 60 минут (сокращенный)

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) как метафоры разрушения целостности при пренебрежении формальным моделированием. Выставление баллов по критериальной рубрике, инструктаж по резервному ДЗ.
Особенность сокращенного регламента (60 минут): В 60-минутном формате этап математического доказательства производных правил Армстронга сокращается до демонстрации итоговой таблицы, а в алгоритме минимального покрытия внимание концентрируется на устранении избыточных ФЗ без углубления в доказательство неизбыточности левых частей сложных составных детерминантов.

2. Теоретический фундамент: функциональные зависимости

2.1. Формальное математическое определение

Пусть R(U) — схема отношения над универсальным множеством атрибутов U = {A₁, A₂, ..., Aₙ}, а r(R) — произвольное корректное (допустимое) мгновенное состояние (экземпляр) отношения. Пусть X ⊆ U и Y ⊆ U — подмножества атрибутов.

Функциональная зависимость X → Y (X функционально определяет Y) выполняется на отношении R, если для любого корректного экземпляра r(R) и любых двух кортежей t₁, t₂ ∈ r:
t₁[X] = t₂[X] ⟹ t₁[Y] = t₂[Y]

Множество атрибутов X называется детерминантом (левой частью, Left-Hand Side, LHS), а Y — зависимой частью (правой частью, Right-Hand Side, RHS).

Критический методический акцент: ФЗ отражает не случайное совпадение значений в текущих строках таблицы, а семантический инвариант предметной области. Отношение может содержать 10 000 строк, где фамилии сотрудников случайно не повторяются, но зависимость Фамилия → Паспорт от этого не возникает, поскольку бизнес-правило допускает однофамильцев.

2.2. Классификация функциональных зависимостей

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. Терминологическая иерархия

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 и выполняются три строгих условия:

  1. Синглтон в правой части (Singleton RHS): Правая часть каждой ФЗ в F_c состоит ровно из одного атрибута: X → A.
  2. Отсутствие посторонних атрибутов слева (No extraneous LHS attributes): Ни в одной ФЗ X → A ∈ F_c нельзя удалить атрибут B ∈ X так, чтобы полученное множество осталось эквивалентным. Формально: для X' = X \ {B} проверяется, выводимо ли X' → A из F_c.
  3. Отсутствие избыточных зависимостей (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. Рекомендуемые педагогические приемы