Сценарий занятия (конспект преподавателя)

ОП.08 Основы проектирования баз данных · №29
Тема: Тема 5. Организация запросов SQL — Понятия SQL. Синтаксис операторов, типы данных.
Два академических часа. Основной регламент — 80 минут; сокращённый — 60 минут.

Основной вариант — 80 минут

0–4 мин · Организационный этап

Прямая речь преподавателя: «Здравствуйте. Проверьте, пожалуйста, что у вас открыт конспект. Сегодня разберём SQL как язык работы с базой: сначала группы команд и грамматику оператора, затем типы данных и безопасное преобразование. В конце вы сможете обосновать выбор типа для конкретного значения».
Студенты: готовят записи, открывают лекцию. Преподаватель отмечает готовность.

4–10 мин · Мотивация и актуализация

Прямая речь: «Представьте расчёт стоимости: 0,10 + 0,20. Должна ли база хранить деньги приблизительным числом? Вспомните, что такое таблица, поле и запрос. Какими свойствами поля мы управляем при проектировании?»
Ожидаемые ответы: тип, допустимые значения, длина, точность. Принять гипотезы, не раскрывать все ответы заранее.

10–18 мин · Понятие SQL и стандарты

Прямая речь: «SQL расшифровывается Structured Query Language. Это декларативный язык: запрос сообщает, какой результат нужен, а оптимизатор СУБД решает, как его получить. SQL-92 закрепил зрелое общее ядро; SQL:1999, известный как SQL3, добавил ряд объектно-реляционных и процедурных возможностей; SQL:2016 стандартизовал расширенные функции, включая JSON. Но стандарт — не обещание, что любая СУБД реализует всё одинаково. У каждой системы есть свой диалект».
Вопрос: «Если запрос соответствует стандарту, будет ли он обязательно одинаково работать во всех СУБД?» Ожидается: нет, реализация, типы и расширения различаются.

18–27 мин · Классификация команд

Прямая речь: «Разделим команды по назначению. DDL определяет объекты и схему: CREATE, ALTER, DROP. DML меняет строки: INSERT, UPDATE, DELETE. DQL удобно использовать для выборки SELECT, хотя в широкой классификации SELECT иногда включают в DML. DCL задаёт права GRANT/REVOKE; TCL управляет транзакциями COMMIT/ROLLBACK. Назовите группу команды CREATE TABLE».
Студенты: относят примеры к группам; преподаватель уточняет неоднозначность DQL.

27–37 мин · Синтаксис оператора

Прямая речь: «В SQL есть ключевые слова, имена объектов, литералы, выражения и условия. Разберём структуру: SELECT перечисляет, что вывести; FROM задаёт источник; WHERE фильтрует строки; GROUP BY формирует группы; HAVING фильтрует группы; ORDER BY задаёт порядок. Квадратные скобки в грамматической записи показывают необязательную часть — в запрос их не печатают. Одинарные кавычки в строке — это данные, не имя столбца».
SELECT название, цена
FROM товар
WHERE цена > 100
ORDER BY цена DESC;
Действия студентов: называют назначение каждой строки запроса, находят точку завершения.

37–41 мин · Пауза и короткий прогноз

Прямая речь: «Обсудите с соседом: в каком случае 0,1 + 0,2 может дать неожиданное для денежного отчёта представление? Одним предложением сформулируйте причину».

41–56 мин · Числовые, символьные и временные типы

Прямая речь: «Для целых значений есть SMALLINT, INT, BIGINT — выбираем требуемый диапазон. Для точной десятичной суммы используем NUMERIC или DECIMAL с достаточными precision и scale. REAL и DOUBLE PRECISION — приближённые числа с плавающей точкой. Они важны для измерений, где есть допустимая погрешность, но не заменяют точную денежную арифметику. CHAR — фиксированная строка; VARCHAR — переменная с ограничением; TEXT — тип/возможность хранения длинного текста, особенности определяет СУБД. DATE — календарная дата; TIME — время суток; TIMESTAMP — дата и время; INTERVAL — промежуток времени. При выборе времени учитывайте часовую зону и правила своей СУБД».
Студенты: заполняют пары: цена — NUMERIC; код фиксированного формата — CHAR; комментарий — VARCHAR/TEXT; дата рождения — DATE; момент события — TIMESTAMP. Требовать короткое обоснование.

56–65 мин · Логические и специализированные типы

Прямая речь: «BOOLEAN хранит логическое значение, но NULL в условиях SQL создаёт третье значение — UNKNOWN. Бинарные данные — это байты, не строка. UUID служит идентификатором. JSON хранит структурированный документ; PostgreSQL предлагает JSONB и массивы ARRAY. Именно JSONB, запись FLOAT[] и оператор :: в наших примерах — признаки PostgreSQL-диалекта. Не переносите их автоматически в другую СУБД».
Контрольный вопрос: «Является ли JSONB обязательным стандартным типом каждой СУБД?» Ответ: нет.

65–73 мин · Приведение типов

Прямая речь: «Явное преобразование показывает наше намерение и делает код понятнее: CAST('42' AS INTEGER). PostgreSQL допускает короткую форму '42'::INTEGER. Неявное приведение может произойти по правилам СУБД, но оно не исправит плохое проектирование. Строка может оказаться недопустимой; число — переполнить диапазон; дробь — округлиться; время — потерять важные сведения о зоне».
CAST('42' AS INTEGER)      -- стандартная форма
'42'::INTEGER              -- PostgreSQL
CAST('31/12/2026' AS DATE) -- формат может быть неоднозначен
Студенты: находят риск в последней строке, предлагают ISO-формат и проверку целевой СУБД.

73–78 мин · Закрепление и рефлексия

Прямая речь: «Быстрый выходной билет: 1) класс CREATE TABLE? 2) какой тип у цены с двумя знаками после запятой? 3) как записать стандартное явное преобразование строки '42' в INTEGER? 4) что сообщает ::?»
Ключ: DDL; NUMERIC/DECIMAL; CAST('42' AS INTEGER); PostgreSQL-диалект.

78–80 мин · Итог и резервное задание

Прямая речь: «Сегодня мы связали смысл данных, грамматику SQL и выбор типа. Вспомните правило: сначала определяем смысл и точность значения, потом выбираем тип. Файл домашнего задания резервный: выполняйте его только если я назначил. Срок сообщу отдельно».
Студенты: фиксируют назначение/неназначение и называют одно усвоенное правило.

Сокращённый сценарий — 60 минут

0–3 мин · Организация

Преподаватель: «Сегодня изучим группы SQL-команд, форму оператора, типы и приведение. Откройте лекцию».

3–7 мин · Мотивация

Преподаватель: «Для точной цены подходит ли приближённая дробь? Почему? Сформулируйте гипотезу».

7–13 мин · Стандарты

Преподаватель: «SQL-92 — общее ядро; SQL:1999 расширил язык; SQL:2016 стандартизовал среди прочего JSON-возможности. Стандарт и конкретная реализация не одно и то же».

13–19 мин · Классы и синтаксис

Преподаватель: «CREATE — DDL, INSERT/UPDATE/DELETE — DML, SELECT обычно DQL, GRANT — DCL, COMMIT — TCL. Найдите в примере SELECT, FROM и WHERE. DQL — удобная классификация, в некоторых источниках SELECT считают DML».

19–32 мин · Основные типы

Преподаватель: «SMALLINT/INT/BIGINT — целые; NUMERIC/DECIMAL — точные числа; REAL/DOUBLE PRECISION — приближённые; CHAR/VARCHAR/TEXT — строки; DATE/TIME/TIMESTAMP/INTERVAL — календарные значения и длительность. Сопоставьте цену, имя и дату заказа».

32–34 мин · Пауза

Преподаватель: «Обсудите с соседом одно применение типа интервала».

34–43 мин · Типы PostgreSQL и логика

Преподаватель: «BOOLEAN, бинарные данные, UUID, JSONB, ARRAY. JSONB и массивный синтаксис здесь специфичны для PostgreSQL; UUID и бинарные типы также различаются между системами. NULL даёт UNKNOWN в логических выражениях».

43–51 мин · Приведение

Преподаватель: «Запишите CAST('42' AS INTEGER). Форма ::INTEGER — PostgreSQL. Что пойдёт не так при переполнении, некорректной строке или неоднозначном формате даты?»

51–57 мин · Закрепление

Преподаватель: «Парами выберите точный тип цены, тип даты рождения и способ преобразовать строку числа. Каждое решение обоснуйте одним предложением».

57–60 мин · Итог

Преподаватель: «Назовите одну группу команд, один тип и одну ошибку приведения. Домашнее задание — только при моём назначении; срок сообщу отдельно».