Дисциплина: ОП.08 Основы проектирования баз данных (СПО 09.02.07 «Информационные системы и программирование»).
Раздел 2: Взаимосвязи в моделях и реляционный подход к построению моделей (§2.2 с.7 программы).
Тема занятия 11: Практическое занятие №3: сущности и связи.
Форма занятия: Практическое занятие (формирование и закрепление умений и навыков).
Занятие рассчитано на 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, инструктаж по резервному домашнему заданию (для пропустивших студентов). |
Сильная сущность обладает семантической независимостью и существует автономно от других объектов предметной области. Правила преобразования:
klienty, aktery, filmy).INT / BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY).UNIQUE NOT NULL.Слабая сущность не имеет смысловой автономности и зависит от существования сущности-владельца (родительской сущности). Правила преобразования:
FOREIGN KEY NOT NULL).PRIMARY KEY (id_klienta, nomer_abonementa)), либо как суррогатный ключ с уникальным композитным индексом.ON DELETE CASCADE (при удалении клиента его абонементы или лицевые счета теряют смысл).| Тип связи | Правило трансляции в реляционную модель | Особенности первичных и внешних ключей | Типичный пример |
|---|---|---|---|
| Один к одному (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. |
Ассоциативная (связующая) таблица выполняет три ключевые функции:
-- Эталонная связующая таблица «Позиция заказа»
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)
);
Преподавателю следует акцентировать внимание студентов на дифференцированном выборе каскадных действий:
NULL при удалении родительской записи (требует, чтобы FK не имел ограничения NOT NULL). Применяется для опциональных связей (например, скидочный купон или персональный менеджер).spisok_akterov VARCHAR(255) в таблице фильмов.LIKE '%id%'.rol) в таблицу aktery, либо атрибут cena_zakaza в справочник blyuda.id_filma в родительскую таблицу rezhissery.id_filma и просит вписать туда три фильма Квентина Тарантино. Возникает наглядное противоречие: либо дублировать строки режиссера (избыточность), либо перенести FK в фильмы.
BIGINT (8 байт), а внешний ключ в связующей таблице создан как INT (4 байта) или VARCHAR.Оценивание практической работы обучающихся на занятии осуществляется строго по 4-балльной закрытой шкале, зафиксированной в локальном нормативном документе .rubrika.md:
Оценка «5» выставляется за 4 балла, оценка «4» — за 3 балла, оценка «3» — за 2 балла, оценка «2» — за 0–1 балл.