Инженерно-педагогическое руководство по проведению теоретического занятия №23 по дисциплине «ОП.08 Основы проектирования баз данных» для специальности 09.02.06 «Сетевое и системное администрирование» в АНО ПОО СИЭУиП.
Занятие структурировано по комбинированной дидактической модели с упором на сквозной инженерный разбор архитектуры взаимодействия экранных форм ввода с реляционной СУБД. Ниже представлены два нормативных тайминга: основной (80 минут) и сокращенный (60 минут при выпадающих парах / расписании по сокращенному звонку).
| Этап занятия | Основной (80 мин) | Сокращ. (60 мин) | Дидактическое содержание и контрольные точки этапа |
|---|---|---|---|
| 1. Оргмомент и мотивация | 5 минут | 3 минуты | Приветствие, фиксация явки, технический чек рабочих мест. Разбор антипаттерна «Прямой SQL из кнопки UI» и инцидента утечки целостности данных. Формулирование темы и цели. |
| 2. Актуализация знаний | 8 минут | 5 минут | Блиц-опрос по нормальным формам (1NF-3NF), ограничениям целостности (PRIMARY KEY, FOREIGN KEY, NOT NULL, CHECK), разобранным на занятии 22. Постановка проблемы: как превратить реляционную модель в эргономичную форму ввода? |
| 3. Изложение нового материала | 35 минут | 27 минут |
Теоретический блок (слайды 2–14): • N-уровневая архитектура (View → Controller → Service/DAO → Database); • Паттерны MVC, MVP, MVVM и концепция Data Binding (одностороннее и двустороннее связывание); • Маппинг элементов управления формы на атрибуты таблиц БД (Input, Mask, Select/Combobox для FK, Radio/Checkbox, DatePicker); • Компоновка сложных форм ввода: паттерн Master-Detail (Шапка – Табличная часть спецификации); • Двухуровневая валидация (UI-валидация для UX vs. DB-валидация для абсолютной целостности). |
| 4. Сквозной инженерный кейс | 12 минут | 10 минут | Живой разбор сквозного примера: форма регистрации складского заказа (Master-Detail). Демонстрация DDL master/detail таблиц, DTO-контракта, потока валидации и атомарной фиксации транзакции через BEGIN ... COMMIT. |
| 5. Первичное закрепление | 14 минут | 11 минут | Работа студентов в интерактивном рабочем листе zanyatie.html по 4 вариантам: проектирование формы ввода, выбор контролов, составление матрицы маппинга полей на атрибуты БД и схемы Master-Detail. Контроль преподавателя. |
| 6. Итоги, рефлексия, ДЗ | 6 минут | 4 минуты | Разбор типичных ошибок маппинга. Показ и обсуждение тематического мема (слайд 15). Оценивание по рубрике .rubrika.md. Инструктаж по сохранению работы в PDF и разъяснение условий сдачи резервного ДЗ domashnee_zadanie.html. |
Фундаментальный принцип современной программной инженерии при работе с базами данных — строгое разделение ответственности (Separation of Concerns, SoC). Прямой доступ интерфейса пользователя к базе данных категорически запрещен в промышленных информационных системах, так как создает критические уязвимости безопасности (SQL Injection, перехват учетных данных БД), исключает масштабирование и делает систему неподдерживаемой.
+-----------------------------------------------------------------------+
| УРОВЕНЬ ПРЕДСТАВЛЕНИЯ (Presentation Layer / View) |
| Элементы управления: Input, Select, DatePicker, Таблицы Detail |
+-----------------------------------+-----------------------------------+
| (События UI: Submit, Change, Input)
v
+-----------------------------------------------------------------------+
| УРОВЕНЬ БИЗНЕС-ЛОГИКИ И КООРДИНАЦИИ (Controller / Service / Backend) |
| - Парсинг DTO, валидация бизнес-правил, аутентификация пользователя |
| - Управление транзакциями (Transaction Boundary: BEGIN / COMMIT) |
+-----------------------------------+-----------------------------------+
| (Вызов методов репозитория / DAO)
v
+-----------------------------------------------------------------------+
| УРОВЕНЬ ДОСТУПА К ДАННЫМ (Data Access Layer / DAO / ORM Repository) |
| - Формирование параметризованных запросов INSERT / UPDATE / SELECT |
| - Преобразование объектов (Object-Relational Mapping / Data Mapper) |
+-----------------------------------+-----------------------------------+
| (SQL через драйвер БД: JDBC, Npgsql, asyncpg)
v
+-----------------------------------------------------------------------+
| СЛОЙ ХРАНЕНИЯ ДАННЫХ (Database Engine / PostgreSQL, MySQL, Oracle) |
| - Первичные (PK) и внешние (FK) ключи, CHECK, UNIQUE, NOT NULL |
| - Индексы, триггеры целостности, ACID-гарантии хранения |
+-----------------------------------------------------------------------+
Data Binding (привязка данных) — программный мост между графическими элементами пользовательского интерфейса (UI Controls) и атрибутами программных моделей / реляционных таблиц. Различают два основных типа связывания:
<input> немедленно модифицирует свойство в оперативной памяти, а программное изменение модели мгновенно перерисовывает контрол интерфейса.Каждый столбец реляционной таблицы обладает строгим типом данных, диапазоном допустимых значений и ограничениями целостности. Выбор графического контрола в UI должен строго соответствовать реляционной семантике атрибута:
| Элемент управления UI | Тип данных в СУБД (PostgreSQL / ANSI) | Назначение и поддерживаемые ограничения | Принцип сопряжения и маппинга |
|---|---|---|---|
| Текстовое поле с маской ввода (Masked Input) | VARCHAR(n), CHAR(n), предикаты CHECK (col ~ '^[0-9...]+$') |
Структурированные строковые идентификаторы: телефоны, СНИЛС, ИНН, почтовые индексы, номера авто, паспорта. | Маска отсекает некорректные символы в реальном времени. В БД передается очищенная строка без символов маски (raw-значение), либо нормализованная строка строго фиксированной длины. |
| Выпадающий список (Combobox / Select / Autocomplete) | INT, BIGINT, UUID со связью FOREIGN KEY REFERENCES parent(id) |
Отображение связей «многие к одному» (M:1). Выбор значения из родительского справочника (клиенты, товары, города, статусы). | Разделение Text и Value: пользователю отображается читаемое имя display_name, а в DTO и далее во внешний ключ foreign_key_id записывается первичный ключ выбранной записи. При больших справочниках (>100 записей) обязателен динамический Autocomplete с сервером. |
| Группа переключателей (RadioGroup) | VARCHAR(n), ENUM, INT (код статуса), CHECK (status IN (...)) |
Взаимоисключающий выбор из небольшого фиксированного набора альтернатив (от 2 до 5 вариантов): приоритет (Low/Medium/High), пол, режим доставки. | Все радиокнопки объединяются общим атрибутом name. Атрибут value выбранной кнопки напрямую мапится в строковую константу перечисления или код категории. Исключает ввод пустого значения, если один пункт выбран по умолчанию. |
| Флажок (Checkbox / Switch) | BOOLEAN (BOOLEAN NOT NULL DEFAULT FALSE) |
Бинарные атрибуты и флаги состояния: «Активен», «Доставлен», «Согласен на обработку ПДн», «НДС включен». | Состояние checked конвертируется в TRUE или FALSE. Для nullable-булевых колонок в СУБД требуется трехпозиционный переключатель (Tri-state checkbox), но в проектировании UI их рекомендуется избегать. |
| Выбор даты и времени (DatePicker / DateTimePicker) | DATE, TIMESTAMP, TIMESTAMPTZ, интервалы TSRANGE |
Календарные даты, время создания, дата отгрузки, дата госпитализации. | Календарный виджет предотвращает ввод несуществующих дат (например, 31 февраля). Маппинг выполняется в стандартном формате ISO 8601 (YYYY-MM-DD или YYYY-MM-DD"T"HH:mm:ssZ) для исключения региональных коллизий СУБД. |
| Табличная часть деталей (Master-Detail Grid) | Две связанные таблицы master (id PK) и detail (id PK, master_id FK) |
Спецификации заказов, позиции накладной, этапы работ, прикрепленные документы. Отношение 1:M. | Шапка формы привязана к записи Master. Табличная сетка отображает массив строк Detail. При сохранении весь пакет (Master + массив Detail) передается в бэкенд единым DTO и записывается в одной транзакции СУБД. |
Качество проектного решения оценивается не только правильностью типов данных, но и эргономикой формы (сокращение числа ошибок оператора, снижение утомляемости, скорость ввода):
tabindex) — оператор должен иметь возможность заполнить всю форму и отправить ее (Enter), не касаясь мыши.NOT NULL должны быть явно помечены визуальным маркером (символ звездочки *) и поясняющим текстом.autofocus).disabled) с индикацией процесса (spinner), исключая дублирование записей в СУБД при повторном клике.blur), а не общим нечитаемым списком после перезагрузки экрана.| Типовая ошибка студента | Суть дефекта и последствия | Педагогический прием устранения |
|---|---|---|
| Сохранение текстового наименования вместо ID внешнего ключа | Студент связывает поле ввода клиента или категории с текстовым названием (client_name), записывая его напрямую в дочернюю таблицу. Это разрушает нормализацию (де-факто возврат к 0NF/1NF), приводит к дублированию строк и потере целостности при переименовании сущности. |
Разбор анатомии тега <select>: демонстрация атрибута value="142" (PK) в связке с видимым текстом ООО "Альфа". Пояснение механизма реляционного JOIN по числовому суррогатному ключу. |
| Прямой SQL-запрос из обработчика кнопки формы (Direct SQL) | Вставка кода вида SELECT ... FROM ... или INSERT INTO прямо в обработчик события кнопки (onClick). Создает катастрофическую уязвимость SQL Injection, делает невозможным разграничение прав доступа и нарушает n-уровневую модель. |
Концептуальный разбор слоев. Показать архитектурный барьер: клиент → HTTP/JSON (DTO) → Backend Controller → Repository (SQL с параметрами) → СУБД. |
| Исключительная ставка на клиентскую валидацию | Студент считает, что атрибутов HTML5 required, maxlength или JS-валидаторов достаточно для защиты БД, и не проектирует ограничения в самой СУБД (CHECK, NOT NULL). |
Показ сценария обхода: отправка запроса напрямую через cURL / Postman или отключение JavaScript в браузере. Вывод правила: «Клиентская валидация — для удобства пользователя (UX); серверные ограничения СУБД — для гарантии целостности (ACID)». |
| Разрушение атомарности в Master-Detail формах | Студент сохраняет шапку заказа одним запросом, а каждую строку спецификации — отдельными несвязанными запросами без транзакции. При сбое сети или ошибке во второй строке в БД остается заказ-«пустышка» или полузаполненная спецификация. | Объяснение транзакционного контекста: вся форма Master-Detail собирается в единый агрегат и фиксируется на бэкенде внутри блока BEGIN ... COMMIT. При ошибке любой позиции спецификации происходит полный ROLLBACK. |
Оценивание результатов работы студентов на уроке производится по 4-балльной шкале, зафиксированной в критериальной рубрике .rubrika.md:
Итоговая отметка выставляется по шкале СИЭУиП: 4 балла — «отлично» (5), 3 балла — «хорошо» (4), 2 балла — «удовлетворительно» (3), 0–1 балл — «неудовлетворительно» (2).