Методическое руководство для преподавателя

Дисциплина: ОП.08 Основы проектирования баз данных (СПО 09.02.07 «Информационные системы и программирование»).
Раздел 2: Взаимосвязи в моделях и реляционный подход к построению моделей (§2.2 с.7 программы).
Тема занятия 11: Практическое занятие №3: сущности и связи.
Форма занятия: Практическое занятие (формирование и закрепление умений и навыков).

1. Детальный хронометраж учебного занятия

Занятие рассчитано на 2 академических часа. Ниже представлены два утвержденных регламента проведения: основной (80 минут) и сокращенный (60 минут).

Этап занятия Основной регламент (80 мин) Сокращенный регламент (60 мин) Дидактические цели и деятельность преподавателя
1. Организационный момент и мотивация 7 минут 5 минут Проверка явки, постановка проблемной инженерной ситуации: «Почему СУБД не умеет соединять таблицы при связи многие-ко-многим без третьей таблицы?». Анонс критериальной шкалы (4 балла).
2. Вводный инструктаж и методология трансляции 23 минуты 15 минут Фронтальный разбор презентации (слайды 1–14). Алгоритм отображения сильных и слабых сущностей, правила миграции внешних ключей при 1:1, 1:M и M:N, выбор каскадных опций (RESTRICT, CASCADE, SET NULL).
3. Демонстрация сквозного эталона 10 минут 7 минут Разбор на доске/экране эталонного примера: «Врачи — Медицинские приемы — Пациенты». Выделение составного PK, фиксация цены на момент приема, демонстрация DDL-скрипта.
4. Самостоятельная практическая работа 25 минут 21 минута Индивидуальное выполнение заданий в zanyatie.html по 4 вариантам (Кинотеатр, Доставка еды, Фитнес-клуб, Ритейл-маркетплейс). Индивидуальное консультирование, контроль атомарности.
5. Экспертный разбор и анализ коллизий 10 минут 8 минут Фронтальный анализ типичных девиаций: утрата атрибута связи, инверсия внешнего ключа в 1:M, попытка записи списков через запятую. Демонстрация мема xkcd (слайд 15).
6. Подведение итогов и рефлексия 5 минут 4 минут Оценка работ по 4-балльной критериальной матрице, сохранение интерактивных листов в PDF, инструктаж по резервному домашнему заданию (для пропустивших студентов).

2. Методология трансформации ER-диаграммы в реляционные таблицы

2.1. Трансляция сильных сущностей

Сильная сущность обладает семантической независимостью и существует автономно от других объектов предметной области. Правила преобразования:

2.2. Трансляция слабых (зависимых) сущностей

Слабая сущность не имеет смысловой автономности и зависит от существования сущности-владельца (родительской сущности). Правила преобразования:

2.3. Правила трансляции бинарных связей 1:1, 1:M и M:N

Тип связи Правило трансляции в реляционную модель Особенности первичных и внешних ключей Типичный пример
Один к одному (1:1) Внешний ключ помещается в дочернюю (или более специализированную) таблицу. Для гарантии однозначности на колонку FK накладывается ограничение UNIQUE. В случае жесткой зависимости PK дочерней таблицы объявляется внешним ключом. FK снабжается ограничением UNIQUE NOT NULL или совпадает с PK (id_pokupatelya INT PRIMARY KEY REFERENCES pokupateli(id)). Покупатель ↔ Корзина покупок; Гражданин ↔ Паспорт.
Один ко многим (1:M) Фундаментальное правило: внешний ключ ВСЕГДА мигрирует в таблицу, находящуюся на стороне «Многие» (M). Таблица на стороне «Один» (родитель) не модифицируется. Колонка FK в дочерней таблице ссылается на PK родителя. Если участие обязательное — NOT NULL. Создание B-Tree индекса на FK строго обязательно. Режиссер (1) ↔ Фильмы (M); Клиент (1) ↔ Заказы (M); Тренер (1) ↔ Занятия (M).
Многие ко многим (M:N) Отношение M:N строго декомпозируется на две связи 1:M через создание третьей — промежуточной ассоциативной таблицы (Junction Table). Прямая реализация M:N в РСУБД физически невозможна. Ассоциативная таблица содержит два внешних ключа на обе родительские таблицы. Первичный ключ формируется как составной PRIMARY KEY (fk_1, fk_2) или суррогатный с UNIQUE(fk_1, fk_2). Актеры (M) ↔ Фильмы (N) через таблицу film_akter; Заказы (M) ↔ Блюда (N) через таблицу poziciya_zakaza.

2.4. Реализация связей M:N через ассоциативные таблицы

Ассоциативная (связующая) таблица выполняет три ключевые функции:

  1. Разрешение кардинальности: превращает нереализуемую в реляционной алгебре связь M:N в две стандартные связи 1:M.
  2. Хранение атрибутов связи: принимает атрибуты, которые не принадлежат ни одной из сущностей по отдельности, а возникают строго в момент их взаимодействия (например, роль актера, гонорар, количество блюд, цена на момент покупки, дата тренировки).
  3. Обеспечение ссылочной целостности: гарантирует, что в ассоциацию могут входить только существующие записи исходных справочников.
-- Эталонная связующая таблица «Позиция заказа»
CREATE TABLE poziciya_zakaza (
    id_zakaza BIGINT NOT NULL REFERENCES zakazy(id_zakaza) ON DELETE CASCADE,
    id_blyuda INT NOT NULL REFERENCES blyuda(id_blyuda) ON DELETE RESTRICT,
    kolichestvo SMALLINT NOT NULL DEFAULT 1 CHECK (kolichestvo > 0),
    cena_na_moment_zakaza NUMERIC(8,2) NOT NULL CHECK (cena_na_moment_zakaza > 0),
    PRIMARY KEY (id_zakaza, id_blyuda)
);

2.5. Обеспечение каскадной ссылочной целостности (ON DELETE / UPDATE)

Преподавателю следует акцентировать внимание студентов на дифференцированном выборе каскадных действий:

3. Типовые ошибки студентов и педагогические приемы коррекции

Ошибка 1: Хранение внешних ключей в строке через запятую («Универсальный VARCHAR»)
Суть: Обучающийся пытается реализовать связь M:N без создания третьей таблицы, объявляя поле spisok_akterov VARCHAR(255) в таблице фильмов.
Последствия: Грубое нарушение первой нормальной формы (1NF) и принципа атомарности. Невозможно наложить ограничение FOREIGN KEY, невозможно построить эффективный индекс, запросы поиска требуют полного последовательного сканирования таблицы (Full Table Scan) с оператором LIKE '%id%'.
Педагогический прием: «Тест на поиск и удаление». Преподаватель просит студента написать SQL-запрос: «Как удалить актера с ID=4 из фильма, если в поле лежит строка "14, 4, 40"?». Студент осознает вычислительный тупик строковой манипуляции и соглашается с необходимостью ассоциативной таблицы.
Ошибка 2: Утечка атрибута связи в базовую сущность
Суть: Студент переносит атрибут связи (например, rol) в таблицу aktery, либо атрибут cena_zakaza в справочник blyuda.
Последствия: Если роль хранится у актера, то актер навсегда остается «Гамлетом» во всех фильмах своей фильмографии. Если цена заказа берется из таблицы блюд, то при инфляционном повышении цен в меню изменятся суммы всех закрытых финансовых чеков за прошлый год.
Педагогический прием: «Метод мысленного эксперимента с изменением времени». Преподаватель задает вопрос: «Что произойдет с бухгалтерским балансом компании за прошлый год, если директор сегодня поднимет цену пиццы на 50 рублей?». Студенты моментально приходят к понятию исторической фиксации атрибута связи.
Ошибка 3: Инверсия внешнего ключа в связи 1:M
Суть: Студент помещает внешний ключ id_filma в родительскую таблицу rezhissery.
Последствия: Режиссер физически сможет снять только один фильм за всю карьеру, так как поле FK в строке режиссера принимает лишь одно значение.
Педагогический прием: «Правило кардинальности многих». Преподаватель рисует на доске таблицу режиссера со столбцом id_filma и просит вписать туда три фильма Квентина Тарантино. Возникает наглядное противоречие: либо дублировать строки режиссера (избыточность), либо перенести FK в фильмы.
Ошибка 4: Несоответствие типов данных PK и FK
Суть: Первичный ключ объявлен как BIGINT (8 байт), а внешний ключ в связующей таблице создан как INT (4 байта) или VARCHAR.
Последствия: Ошибка создания внешнего ключа в СУБД (Type Mismatch), либо колоссальное падение производительности операций JOIN из-за неявного приведения типов.
Педагогический прием: Чек-лист попарной верификации: каждая стрелка внешнего ключа на диаграмме сверяется по типу данных родительского столбца.

4. Методические указания по критериальному оцениванию

Оценивание практической работы обучающихся на занятии осуществляется строго по 4-балльной закрытой шкале, зафиксированной в локальном нормативном документе .rubrika.md:

Оценка «5» выставляется за 4 балла, оценка «4» — за 3 балла, оценка «3» — за 2 балла, оценка «2» — за 0–1 балл.