Инженерно-математическое руководство по проведению теоретического занятия №16 по дисциплине «ОП.08 Основы проектирования баз данных» для специальности 09.02.06 Сетевое и системное администрирование (СИЭУиП).
На предшествующем занятии №15 студенты освоили базовый аппарат функциональных зависимостей (ФЗ) и алгоритмы нормализации отношений до уровня третьей нормальной формы (3НФ) и нормальной формы Бойса-Кодда (НФБК / BCNF). Однако в инженерной практике проектирования реляционных баз данных декомпозиция таблицы на несколько связанных отношений порождает два фундаментальных риска:
Кроме того, аппарат функциональных зависимостей принципиально не способен устранить избыточность в случаях, когда в одном отношении сосуществуют две и более независимые категории данных с кратностью «многие-ко-многим». Это требует введения более мощного математического аппарата — многозначных зависимостей (MVD) и 4-й нормальной формы (4NF), а также зависимостей соединения (JD) и 5-й нормальной формы (5NF / PJNF).
Нормализация — это не механическое «разрезание таблиц на кусочки», а строго доказанная математическая декомпозиция, удовлетворяющая двум инвариантам: соединению без потерь (Lossless-Join) и сохранению функциональных зависимостей (Dependency Preservation). Студент должен понимать: если декомпозиция разрушает соединение без потерь — проект базы профессионально непригоден.
Структура занятия построена по логике «от проблемы ложных кортежей — к математическим критериям и проверке связей — затем к высшим нормальным формам и осознанной денормализации».
| Этап занятия | Регламент 80 мин | Регламент 60 мин | Дидактическое содержание и задачи этапа |
|---|---|---|---|
| 1. Организационный момент и мотивация | 5 мин | 3 мин | Приветствие, проверка готовности рабочих мест. Демонстрация инженерного кейса: как интернет-магазин выставил покупателю чужие товары из-за некорректного разбиения таблицы заказов на строки. Постановка темы и целей. |
| 2. Актуализация опорных знаний | 8 мин | 5 мин | Блиц-опрос по 1НФ, 2НФ, 3НФ, НФБК. Определение функциональной зависимости, замыкания атрибутов ^+$, суперключа и первичного ключа. Почему НФБК не всегда сохраняет ФЗ. |
| 3. Изложение нового материала | 32 мин | 27 мин | Фундаментальная теория:
• Свойство соединения без потерь (Lossless-Join) и возникновение ложных кортежей (Spurious Tuples). • Теорема Риссанена для бинарной декомпозиции. • Проверка декомпозиции методом табло (Tableau Algorithm). • Сохранение функциональных зависимостей (Dependency Preservation). • Многозначные зависимости (MVD: woheadrightarrow Y$) и 4-я нормальная форма (теорема Фейгина). • Зависимости соединения (JD) и 5НФ (проективно-соединительная нормальная форма PJNF). • Контролируемая денормализация в аналитических хранилищах (OLAP, Star Schema, витрины данных). |
| 4. Демонстрация сквозного кейса | 12 мин | 10 мин | Разбор на доске конкретного отношения с данными: сравнение декомпозиции через общий первичный ключ (соединение без потерь) и через неключевой общий атрибут (генерация 4 паразитных строк). Построение проверочного табло. |
| 5. Первичное закрепление и практикум | 15 мин | 11 мин | Самостоятельная работа студентов в интерактивном листе zanyatie.html по 4 дифференцированным вариантам. Преподаватель выступает в роли архитектора-консультанта. |
| 6. Итог занятия, рефлексия, ДЗ | 8 мин | 4 мин | Экспертный разбор типичных ошибок. Показ слайда 15 с культовым веб-комиксом Bobby Tables (xkcd #327). Выставление отметок по 4-балльной рубрике. Инструктаж по резервному дистанционному заданию (domashnee_zadanie.html). |
Пусть задана схема отношения (A_1, A_2, \dots, A_n)$ и множество функциональных зависимостей $. Декомпозицией схемы $ называется семейство подсхем = \{R_1, R_2, \dots, R_k\}$, такое что:
Каждое отношение $ содержит подмножество атрибутов исходного отношения $. Состояние подсхемы $ формируется с помощью операции реляционной проекции: = \pi_{R_i}(r)$.
Декомпозиция = \{R_1, R_2, \dots, R_k\}$ отношения $ называется соединением без потерь данных относительно множества функциональных зависимостей $, если для любого допустимого состояния (R)$, удовлетворяющего $, естественное соединение проекций в точности восстанавливает исходное отношение:
В реляционной теории всегда выполняется включение: \subseteq \pi_{R_1}(r) owtie \dots owtie \pi_{R_k}(r)$. Исходные кортежи никогда физически не «исчезают». При некорректной декомпозиции соединение порождает избыточные, ложные кортежи (Spurious Tuples). Мы теряем не количество строк, а достоверность информации (информационную различимость реальных фактов от фиктивных комбинаций).
Для случая разбиения схемы $ на два отношения $ и $ ( = R_1 \cup R_2$) критерий соединения без потерь формулируется предельно строго через теорему Йормы Риссанена (1977 г.):
Инженерный смысл теоремы Риссанена: общие атрибуты двух отношений ( \cap R_2$) обязаны составлять суперключ хотя бы для одного из получаемых отношений ($ или $). Если общий атрибут не является суперключом ни для $, ни для $, обратное естественное соединение с гарантией породит ложные кортежи!
Если отношение разбивается на \ge 3$ подсхем, теорема Риссанена неприменима напрямую. Для произвольного числа отношений используется матричный алгоритм табло (Ахо, Бири, Ульман):
Декомпозиция = \{R_1, \dots, R_k\}$ сохраняет функциональные зависимости, если логическое замыкание объединения проекций зависимостей на каждую подсхему покрывает все исходные зависимости:
Если зависимость o Y$ оказалась разорванной (атрибуты $ и $ находятся в разных отношениях, и зависимость не выводится из оставшихся локальных ограничений), СУБД теряет возможность контролировать декларативную целостность через локальные ограничения UNIQUE / PRIMARY KEY. Любая вставка потребует дорогостоящего внешнего соединения таблиц либо создания хранимых процедур и триггеров.
Функциональная зависимость o Y$ требует, чтобы значению $ соответствовало ровно одно значение $. Но что делать, если сущность имеет независимые списки множественных свойств? Например, Преподаватель читает множество Дисциплин и рекомендует множество Учебников, причем выбор учебника никак не зависит от читаемой дисциплины.
Определение многозначной зависимости (MVD): в отношении (X, Y, Z)$ выполняется многозначная зависимость woheadrightarrow Y$ (читается: «$ многозначно определяет $»), если множество значений $, связанных с заданной парой $, зависит только от $ и не зависит от $:
Теорема Фейгина (Fagin's Theorem, 1977 г.): Декомпозиция отношения (X, Y, Z)$ на подсхемы (X, Y)$ и (X, Z)$ является соединением без потерь тогда и только тогда, когда в $ выполняется woheadrightarrow Y \mid Z$ (то есть woheadrightarrow Y$ и woheadrightarrow Z$).
Четвертая нормальная форма (4NF): Отношение $ находится в 4НФ тогда и только тогда, когда оно находится в НФБК, и для любой нетривиальной многозначной зависимости woheadrightarrow Y$ множество $ является суперключом отношения $.
Существуют отношения с циклическими зависимостями между тремя и более атрибутами, которые нельзя разбить на два отношения без потерь, но можно без потерь разбить на три (или более) проекции. В этом случае действует зависимость соединения $owtie[R_1, R_2, \dots, R_m]$.
Пятая нормальная форма (5NF / Project-Join Normal Form): отношение находится в 5НФ тогда и только тогда, когда любая зависимость соединения в нем является тривиальной (то есть одна из подсхем совпадает со всей схемой) либо следует исключительно из потенциальных ключей отношения.
В высоконагруженных транзакционных системах (OLTP) нормализация до 3НФ/БКНФ является золотым стандартом, предотвращающим аномалии модификации. Однако в аналитических хранилищах (DWH / OLAP / витрины данных), ориентированных на тяжелые агрегирующие выборки (GROUP BY по миллионам и миллиардам строк), соединение десятков нормализованных таблиц становится узким местом по CPU и дисковому I/O.
Обоснованная денормализация — это осознанное, профилированное архитектурное решение по внесению контролируемой избыточности ради ускорения операций чтения. Классические подходы:
Компенсирующие механизмы: при денормализации СУБД лишается встроенного реляционного контроля. Для предотвращения рассинхронизации архитектор обязан внедрять: триггеры каскадного обновления, потоковую репликацию CDC (Change Data Capture, например Debezium) или регламентные пакетные ETL/ELT-процедуры сверки.
| Типовая ошибка студента | Суть заблуждения | Педагогический прием и контрпример |
|---|---|---|
| «Потеря данных означает исчезновение строк» | Студент считает, что слово «Lossy» означает физическое удаление или усечение записей при обратном соединении. | Показать на пальцах: imes 2 = 4$. При соединении по неключевому полю 2 строки исходной таблицы превращаются в 4 строки! Теряется точность информации, появляются строки-призраки (Spurious Tuples). |
| «Если атрибуты есть в обеих таблицах, соединение всегда без потерь» | Студент полагает, что любого общего атрибута достаточно для однозначного восстановления связей. | Привести контрпример с атрибутом «Город»: если две таблицы связать только по городу «Москва», все клиенты из Москвы свяжутся со всеми поставщиками из Москвы, порождая миллионы ложных фактов. Акцентировать теорему Риссанена: общий атрибут обязан быть ключом! |
| «Сумма = Количество * Цена — это транзитивная зависимость, ее надо удалить» | Студент механически пытается удалить вычисляемый атрибут, не анализируя бизнес-контекст фиксации исторической цены в момент сделки. | Разобрать кейс маркетплейса: если цена товара в каталоге изменится завтра, в старых заказах пересчитается сумма, что приведет к финансовому скандалу и нарушению бухгалтерского законодательства. Вычисляемые исторические поля требуют строгого анализа. |
| «Путаница между ФЗ и MVD» | Студент пытается применить правила 2НФ/3НФ к независимым множественным спискам и считает, что составной ключ решает проблему. | Показать декартово произведение в таблице Преподаватель—Курс—Учебник: при добавлении 1 нового учебника приходится вставлять $ строк по всем курсам преподавателя (аномалия вставки). Объяснить теорему Фейгина. |