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

Тема 4. Проектирование структур баз данных — Организация интерфейса с пользователем: ввод

Инженерно-педагогическое руководство по проведению теоретического занятия №23 по дисциплине «ОП.08 Основы проектирования баз данных» для специальности 09.02.06 «Сетевое и системное администрирование» в АНО ПОО СИЭУиП.

Дисциплина ОП.08 Основы проектирования БД
Раздел программы Тема 4 (§2.2 с.7–8)
Формат 2 академических часа (80 мин / 60 мин)
Вид занятия Урок с объяснением теории

1. Поминутный тайминг учебного занятия (80 и 60 минут)

Занятие структурировано по комбинированной дидактической модели с упором на сквозной инженерный разбор архитектуры взаимодействия экранных форм ввода с реляционной СУБД. Ниже представлены два нормативных тайминга: основной (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.

2. Архитектурные принципы сопряжения UI и реляционной базы данных

2.1. Многоуровневая (n-уровневая) архитектура и изоляция слоев

Фундаментальный принцип современной программной инженерии при работе с базами данных — строгое разделение ответственности (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-гарантии хранения              |
+-----------------------------------------------------------------------+

2.2. Паттерны организации пользовательского интерфейса (MVC, MVP, MVVM)

2.3. Механизм связывания данных (Data Binding)

Data Binding (привязка данных) — программный мост между графическими элементами пользовательского интерфейса (UI Controls) и атрибутами программных моделей / реляционных таблиц. Различают два основных типа связывания:

Педагогический акцент: Студентам необходимо четко разъяснить: форма ввода никогда не связывается с таблицей БД напрямую. Связывание на стороне клиента всегда происходит с DTO (Data Transfer Object) или ViewModel, а затем бэкенд транслирует DTO в реляционную строку через слой DAO/ORM с помощью параметризованных команд SQL.

3. Инженерная типология элементов ввода и правила их маппинга на атрибуты БД

Каждый столбец реляционной таблицы обладает строгим типом данных, диапазоном допустимых значений и ограничениями целостности. Выбор графического контрола в 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 и записывается в одной транзакции СУБД.

4. Компоновка форм ввода и правила эргономики UI (UX-инженерия)

Качество проектного решения оценивается не только правильностью типов данных, но и эргономикой формы (сокращение числа ошибок оператора, снижение утомляемости, скорость ввода):

Золотые правила компоновки экранных форм ввода:
  1. Естественный поток взгляда (F- и Z-паттерны): Логическое группирование полей сверху вниз и слева направо. Разделение формы на семантические карточки/блоки: «Основная информация», «Адресные реквизиты», «Спецификация».
  2. Клавиатурная навигация (Tab Order): Корректный порядок табуляции (tabindex) — оператор должен иметь возможность заполнить всю форму и отправить ее (Enter), не касаясь мыши.
  3. Индикация обязательности полей: Все атрибуты со свойством NOT NULL должны быть явно помечены визуальным маркером (символ звездочки *) и поясняющим текстом.
  4. Автофокус на первом поле: При загрузке формы курсор автоматически позиционируется в первое поле ввода (autofocus).
  5. Предотвращение двойной отправки (Double Submit Prevention): После клика кнопки «Сохранить» контрол немедленно блокируется (disabled) с индикацией процесса (spinner), исключая дублирование записей в СУБД при повторном клике.
  6. Контекстные подсказки и валидация «на лету» (Inline Validation): Ошибки подсвечиваются рядом с проблемным полем сразу при потере фокуса (событие blur), а не общим нечитаемым списком после перезагрузки экрана.

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

Типовая ошибка студента Суть дефекта и последствия Педагогический прием устранения
Сохранение текстового наименования вместо 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.

6. Рекомендации по оцениванию и закрытая критериальная шкала

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

Итоговая отметка выставляется по шкале СИЭУиП: 4 балла — «отлично» (5), 3 балла — «хорошо» (4), 2 балла — «удовлетворительно» (3), 0–1 балл — «неудовлетворительно» (2).