Дисциплина: ОП.08 Основы проектирования баз данных
Тема рабочей программы (§2.2 с.7): Тема 2. Взаимосвязи в моделях и реляционный подход к построению моделей — Практическое занятие №4: проектирование реляционной БД
Номер занятия: Занятие 12 (Семестр 2)
Вид занятия: Практическое занятие (2 академических часа: основной регламент 80 минут, сокращенный 60 минут)
Данное занятие является кульминационным в цикле нормализации и моделирования реляционных баз данных Раздела 2. Опираясь на ранее изученные концепции сущностей, связей (занятия 02–04) и нормализации до 1NF/2NF (занятие 10), практическое занятие №4 ориентировано на сквозное инженерное проектирование реляционной БД: от анализа функциональных зависимостей в предметной области до генерации DDL-скрипта с декларативными ограничениями и наполнения базы эталонным набором тестовых кортежей.
X → Y → Z, освоить критерии нормальной формы Бойса-Кодда (BCNF) и сформировать устойчивый навык реализации ограничений целостности (PK, FK, UNIQUE, NOT NULL, CHECK) с топологически выверенным порядком выполнения скриптов.
Занятие рассчитано на 2 академических часа в двух регламентах: основном (80 минут) и сокращенном (60 минут).
| Этап занятия | 80 мин | 60 мин | Деятельность преподавателя и дидактические акценты |
|---|---|---|---|
| 1. Оргмомент и мотивация | 5 мин | 3 мин | Проверка явки. Демонстрация проблемы: транзитивная зависимость и аномалия обновления (Update Anomaly) на примере изменения оклада по должности при хранении в единой таблице сотрудников. Постановка инженерной задачи пары. |
| 2. Теоретический экспресс-инструктаж | 15 мин | 10 мин | Разбор формулировки 3NF: $X \to Y \to Z$. Почему $Z$ зависит от $X$ опосредованно. Критерий Бойса-Кодда (BCNF) и его строгость относительно 3NF. Сквозной алгоритм проектирования: логическая схема → DDL (CREATE TABLE) → целостность → тестовый набор (INSERT INTO). |
| 3. Демонстрация эталонного кейса | 10 мин | 7 мин | Демонстрация декомпозиции отношения на проекторе: исходная плоская таблица с транзитивной зависимостью, вынос детерминанта в независимую сущность-справочник, объявление внешнего ключа с политикой ON DELETE RESTRICT, вставка граничного кортежа. |
| 4. Самостоятельная практическая работа | 35 мин | 28 мин | Студенты работают в интерактивном рабочем листе zanyatie.html по 4 вариантам (Отдел кадров, Аптечный склад, Учебный центр, Станция техобслуживания). Преподаватель осуществляет индивидуальный тьюторинг, контролируя отсутствие транзитивных зависимостей и корректность FK. |
| 5. Экспертная верификация и разбор ошибок | 10 мин | 8 мин | Фронтальный анализ скриптов студентов. Разбор распространенных ошибок: нарушение топологического порядка создания таблиц, «слепой CASCADE», отсутствие предикатов CHECK на физические величины. Демонстрация юмористического слайда (xkcd Bobby Tables). |
| 6. Рефлексия, подведение итогов, выдача ДЗ | 5 мин | 4 мин | Фиксация результатов в оценочной ведомости по критериальной рубрике (4-балльная шкала). Инструктаж по сохранению работы в PDF/распечатке. Разъяснение регламента резервного домашнего задания (domashnee_zadanie.html) для отсутствующих. |
Отношение $R$ находится в третьей нормальной форме (3NF) тогда и только тогда, когда оно находится во 2NF (все неключевые атрибуты функционально полно зависят от первичного ключа), и отсутствуют транзитивные функциональные зависимости неключевых атрибутов от первичного ключа.
Суть транзитивной зависимости: Пусть $X$ — первичный ключ отношения. Если существуют атрибуты $Y$ и $Z$, такие что:
то имеет место зависимость $X \to Z$ через $Y$, называемая транзитивной. Присутствие атрибута $Z$ в одной таблице с $X$ порождает критические аномалии:
NULL).Нормальная форма Бойса-Кодда представляет собой усиленный вариант 3NF, устраняющий потенциальные аномалии в отношениях со сложной ключевой структурой.
В чем разница между 3NF и BCNF? В определении 3NF допускается послабление: если $X$ не суперключ, отношение все равно остается в 3NF, если зависимый атрибут $A$ является первичным (входит в какой-либо потенциальный ключ). В BCNF это послабление полностью исключено. Таким образом, любое отношение в BCNF автоматически находится в 3NF, но обратное не всегда верно.
Консультации(Студент, Преподаватель, Предмет).(Студент, Предмет) → Преподаватель.Преподаватель → Предмет.{Студент, Предмет} и {Студент, Преподаватель}. Все атрибуты являются первичными! Следовательно, зависимость Преподаватель → Предмет удовлетворяет критерию 3NF (Предмет входит в составной ключ), но нарушает BCNF, так как Преподаватель сам по себе не является суперключом (он не определяет студента).(Преподаватель, Предмет) и (Студент, Преподаватель) достигается BCNF, но теряется функциональная зависимость (Студент, Предмет) → Преподаватель — для ее поддержания потребуется межтабличный триггер или ограничение на уровне приложения.
Инженерный процесс создания базы данных состоит из 4 обязательных стадий:
Выделение независимых сущностей-справочников (родительские таблицы) и операционных сущностей (дочерние таблицы фактов/событий). Составление матрицы функциональных зависимостей и приведение схемы к 3NF.
СУБД требует строгого порядка исполнения: таблицы, на которые ссылаются внешние ключи (родители), обязаны создаваться раньше таблиц, содержащих эти внешние ключи. При удалении схемы порядок строго обратный: первыми удаляются дочерние таблицы (или используется каскадное удаление метаданных DROP TABLE ... CASCADE).
Реализация трех уровней целостности реляционной модели: целостность сущностей (PRIMARY KEY, UNIQUE), ссылочная целостность (FOREIGN KEY ... REFERENCES ... ON DELETE RESTRICT / CASCADE / SET NULL) и семантическая/доменная целостность (NOT NULL, CHECK, DEFAULT).
Заполнение базы репрезентативными данными: не менее 5 связанных кортежей, подтверждающих корректную работу всех связей. Обязательное тестирование граничных значений и демонстрация отклонения транзакций при нарушении правил целостности.
В практической части студенты распределяются по 4 отраслевым вариантам комплексного проектирования (не менее 3–4 таблиц в 3NF):
| Вариант | Предметная область | Проектируемые сущности (3NF) | Дидактический фокус нормализации |
|---|---|---|---|
| Вариант 1 | Отдел кадров предприятия | departments (Подразделения)positions (Должности)employees (Сотрудники)appointment_orders (Приказы о назначении) |
Устранение транзитивной зависимости базового оклада от подразделения через вынос в справочник должностей: Сотрудник → Должность → Базовый_оклад. Спецификация DDL + 5 тестовых записей. |
| Вариант 2 | Аптечный склад | manufacturers (Производители)medicines (Медикаменты)batches (Партии)sales_invoices (Расходные накладные) |
Устранение транзитивной зависимости страны производителя через отдельную таблицу производителей: Медикамент → Производитель → Страна. Контроль целостности сроков годности (expiry_date > manufacture_date). |
| Вариант 3 | Учебный центр доп. образования | courses (Учебные курсы)study_groups (Учебные группы)students (Слушатели)payments (Платежи) |
Устранение транзитивной зависимости стоимости и длительности от группы через сущность курсов. Каскадный контроль статуса оплаты (CHECK на сумму взноса $\le$ стоимость курса). |
| Вариант 4 | Станция техобслуживания (СТО) | clients (Клиенты)vehicles (Автомобили)repair_orders (Заказ-наряды)work_items (Выполненные работы) |
Устранение транзитивной зависимости контактных данных владельца через связку Автомобиль → Клиент. Проверка связности кортежей и ограничений пробега/стоимости нормо-часа. |
salary или department_name прямо в таблице employees, заявляя: «Так проще писать SELECT, не нужен JOIN».ON DELETE CASCADE во внешнем ключе от employees к departments или от sales_invoices к medicines.ON DELETE RESTRICT (или NO ACTION), сохраняя финансово-юридическую историю.
CREATE TABLE repair_orders до создания vehicles, либо пытается вставить строку в repair_orders с несуществующим vehicle_id.relation "vehicles" does not exist или insert or update on table violates foreign key constraint. Объясняется понятие ориентированного графа зависимостей схемы.
-50000 рублей или датой окончания договора раньше даты начала. Напомнить, что бизнес-логика должна защищаться ядром СУБД, а не только валидацией на фронтенде.
Оценивание индивидуальной практической работы проводится строго по 4-балльной закрытой шкале (отраженной в .rubrika.md):
| Баллы | Критерий оценивания | Показатели выполнения |
|---|---|---|
| 2 балла | Нормализация схемы до 3NF / BCNF | Полное выявление и устранение всех транзитивных зависимостей. Корректное выделение справочников и операционных таблиц (3–4 таблицы). Обоснование отсутствия аномалий модификации. |
| 1 балл | DDL-спецификация и ключи | Синтаксически безошибочные операторы CREATE TABLE в правильном топологическом порядке. Явное объявление первичных (PK) и внешних ключей (FK) с профессионально обоснованной политикой ссылочной целостности (RESTRICT/CASCADE). Адекватные ограничения NOT NULL, UNIQUE, CHECK. |
| 1 балл | Тестовые данные и самопроверка | Пакет из не менее чем 5 согласованных операторов INSERT INTO, подтверждающих ссылочную связность. Наличие граничных проверок и демонстрация перехвата некорректных значений. Исчерпывающие аргументированные ответы на блок вопросов самоконтроля. |
INT, а FK в дочерней таблице объявлен как VARCHAR — скрипт отклоняется.