Этап 1. Организационный момент и постановка проблемы 80 мин: 5 мин (00:00–00:05) | 60 мин: 3 мин (00:00–00:03)
Преподаватель входит в аудиторию, организует проверку присутствующих по журналу, контролирует готовность персональных компьютеров студентов.
Прямая речь преподавателя:
«Здравствуйте, уважаемые студенты! Рассаживайтесь по рабочим местам, запускайте компьютеры. Сегодня на занятии по дисциплине "Основы проектирования баз данных" мы переходим от теоретического проектирования структуры таблиц к непосредственной работе с реальными кортежами данных. Тема нашего практического занятия №5: "Записи и логические условия".
Позвольте начать наше занятие с реального случая из практики крупного маркетплейса. Молодой администратор баз данных получил задачу обнулить цены на тестовые товары в тестовой витрине. Он открыл консоль СУБД и уверенно набрал команду: UPDATE products SET price = 0;. Ровно через 30 секунд цены обнулились на все 150 000 реальных товаров каталога, а покупатели начали оформлять заказы на новейшие ноутбуки и смартфоны за 0 рублей. Компания понесла многомиллионные убытки, а сервис был парализован на 12 часов.
В чем была фатальная ошибка специалиста? Он забыл ключевую секцию WHERE. В базах данных любая небрежность в логическом условии может стоить предприятию бизнеса. Сегодня вы научитесь составлять абсолютно точные, безопасные логические предикаты любой сложности, освоите трехзначную логику SQL и навсегда зафиксируете "Золотой регламент безопасной модификации данных". Работаем по 4-балльной критериальной шкале, зафиксированной в критериальной рубрике. Приступаем!»
Этап 2. Актуализация опорных знаний и блиц-опрос 80 мин: 10 мин (00:05–00:15) | 60 мин: 7 мин (00:03–00:10)
Преподаватель инициирует интерактивный диалог с группой, задавая проблемные вопросы по булевой логике и поведению неопределенных значений.
Прямая речь преподавателя:
«Давайте освежим базовые знания. В программировании на Python или C++ вы привыкли к классической булевой логике: условие либо True, либо False. А сколько значений логики существует в стандарте SQL? Кто ответит?
Верно, в реляционных базах данных правит трехзначная логика — Three-Valued Logic, или 3VL. Третье состояние называется UNKNOWN. Оно возникает всякий раз, когда мы пытаемся сравнить что-либо со значением NULL.
А теперь вопрос на миллион: что вернет запрос SELECT * FROM staff WHERE dismissal_date = NULL;? Поднимите руки, кто считает, что мы получим список работающих сотрудников, у которых дата увольнения пуста?
Вижу несколько рук, и это самая распространенная ошибка новичков! Этот запрос вернет ровно ноль строк. Потому что dismissal_date = NULL вычисляется не в TRUE, а в UNKNOWN. А блок WHERE отбирает только те строки, для которых условие строго равно TRUE! Для проверки отсутствия данных в SQL существует специальный предикат — IS NULL. Запомните это железно.
Второй критический вопрос: каков приоритет выполнения связок AND и OR? Вспомните школьную алгебру: AND — это умножение, OR — это сложение. Если вы пишете WHERE A OR B AND C, что выполнится первым? Конечно, B AND C! Поэтому при малейшей дизъюнкции мы обязаны использовать круглые скобки.»
Этап 3. Теоретический инструктаж и разбор эталонного кейса 80 мин: 15 мин (00:15–00:30) | 60 мин: 10 мин (00:10–00:20)
Преподаватель переключает экран на проектор, демонстрирует интерактивную презентацию (слайды 3–13) и показывает в терминале СУБД эталонный процесс модификации данных.
Прямая речь преподавателя:
«Обратите внимание на слайды презентации. Мы разбираем специализированные предикаты SQL:
1. Оператор
BETWEEN 5 AND 50 — строго инклюзивен, включает обе границы:
>= 5 AND <= 50. Если перепутать порядок и написать
BETWEEN 50 AND 5, запрос не выдаст синтаксической ошибки, но условие будет тождественно ложным, и ни одна запись не обновится!
2. Оператор
IN ('Senior', 'Lead') заменяет длинные цепочки дизъюнкций и предотвращает ошибки приоритета.
3. Шаблоны
LIKE '%PostgreSQL%' — знак процента заменяет любую последовательность символов.
А теперь главное правило профессионального инженера баз данных — "Золотой регламент модификации":
1) SELECT product_id, price FROM products WHERE <условие>;
2) BEGIN TRANSACTION;
3) UPDATE products SET price = price * 1.10 WHERE <условие>;
4) Проверка: Rows affected = 2?
5) COMMIT (если всё верно) или ROLLBACK (если изменилось 100 строк вместо двух)!
Всегда, подчеркиваю, ВСЕГДА сначала выполняем проверочный SELECT. И только убедившись глазами, что отобраны ровно нужные 2 или 3 строки, мы вставляем этот же предикат в команду UPDATE внутри явной транзакции.»
Этап 4. Самостоятельная практическая работа студентов 80 мин: 35 мин (00:30–01:05) | 60 мин: 28 мин (00:20–00:48)
Студенты открывают файл zanyatie.html на рабочих станциях. Преподаватель объявляет распределение по 4 вариантам и координирует самостоятельную работу.
Прямая речь преподавателя:
«Открываем в браузерах интерактивный рабочий лист zanyatie.html. В верхней части введите свою фамилию, имя и номер учебной группы. Распределение по вариантам следующее:
• 1-й ряд — Вариант 1: База данных "Интернет-аптека". Пересчет цен на 10% для витаминов с проверкой остатка через BETWEEN и даты годности.
• 2-й ряд — Вариант 2: База данных "Автосалон". Бронирование автомобилей Toyota и Lexus с годом выпуска от 2023 и пробегом до 15 000 км. Внимание к скобкам вокруг OR!
• 3-й ряд — Вариант 3: База данных "Кадровое агентство". Изменение статуса соискателей уровней Senior и Lead со знанием PostgreSQL и незаполненной датой найма. Помним про IS NULL!
• 4-й ряд (резервный) — Вариант 4: База данных "Складской терминал". Списание партий поставщика "Логистик-Групп" по браку или превышению срока хранения.
По каждому варианту вы должны выполнить 4 шага: написать проверочный SELECT, составить транзакционный UPDATE, заполнить подробный протокол состояния строк "до" и "после" с указанием новых значений, и ответить на вопрос по трехзначной логике. Все поля формы автоматически сохраняются в вашем браузере. Время пошло, приступайте!»
Этап 5. Экспертная верификация и разбор ошибок 80 мин: 10 мин (01:05–01:15) | 60 мин: 7 мин (00:48–00:55)
Преподаватель останавливает самостоятельную работу, проецирует эталоны на экран и проводит фронтальный анализ допущенных неточностей.
Прямая речь преподавателя:
«Время вышло. Давайте разберем самые опасные моменты, с которыми вы столкнулись:
Во втором варианте двое студентов написали: WHERE brand = 'Toyota' OR brand = 'Lexus' AND year_manufactured >= 2023 без скобок. Что в итоге произошло? Обновилась старая Corolla 2021 года! Потому что условие по году привязалось только к марке Lexus. Без скобок запрос сработал катастрофически некорректно.
В третьем варианте встретилась ошибка: hire_date = NULL. Как мы уже знаем, ни один кандидат не получил бы новый статус, и вакансии остались бы открытыми, пока бизнес нес убытки.
Взгляните на экран (слайд 15 презентации). Перед вами легендарный комикс xkcd про "Little Bobby Tables". Он напоминает каждому инженеру баз данных: халатность при составлении SQL-команд приводит к уничтожению данных. Архитектурная строгость — это главный навык профессионала.»
Этап 6. Подведение итогов, рефлексия и домашнее задание 80 мин: 5 мин (01:15–01:20) | 60 мин: 5 мин (00:55–01:00)
Преподаватель подводит итоги, оценивает студентов по 4-балльной рубрике и инструктирует по резервному домашнему заданию.
Прямая речь преподавателя:
«Подведем итоги занятия. Подавляющее большинство группы успешно справилось с конструированием составных предикатов и протоколированием состояния данных. Оценки выставлены в соответствии с критериальной рубрикой: составление условий — 2 балла, протокол до/после — 1 балл, понимание 3VL и самопроверка — 1 балл.
Нажмите кнопку "Сохранить работу" и при необходимости сохраните электронную копию в PDF.
Обращаю ваше внимание: файл domashnee_zadanie.html является резервным дистанционным модулем. На нем размещена специальная плашка: вы выполняете его только в том случае, если вам назначено дистанционное доосвоение темы или пересдача. Срок сдачи будет сообщен дополнительно.
Спасибо за активную и продуктивную инженерную работу! Занятие окончено, до встречи на следующем уроке!»