# Регламент выполнения лабораторных работ ### **Общие требования** 1. Все решения должны быть **логически согласованы между лабораторными работами**. 2. Изменение модели данных допускается, но должно быть аргументировано. 3. Запрещается: 1. копирование чужих схем и SQL-кода; 2. использование ORM и автоматических генераторов схем; 3. подмена логики БД логикой приложения; 4. использование языковых моделей для выполнения пунктов ЛР. 4. Все SQL-решения должны быть читаемыми, воспроизводимыми, корректно работающими на тестовых данных. 5. Названия таблиц, полей и сущностей должны отражать их семантику. 6. Разрешается использование языковых моделей для генерации массива тестовых данных. 7. Незнание какого-либо метода в коде вашей лабораторной работы будет приравнено к нарушению пункта 3.4. Сдача работы в таком случае останавливается. Баллы за лабораторные работы: * Сложность 2 из 5: Коэффициент 1.0 * Сложность 3 из 5: Коэффициент 1.1 * Сложность 4 из 5: Коэффициент 1.2 * Сложность 5 из 5: Коэффициент 1.3 Бонусные баллы, полученные от коэффициентов, могу быть добавлены к ответу на экзамене или баллам за КР *по усмотрению преподавателя*. ### **Формат сдачи** Каждая лабораторная работа сдается в формате: * ссылка на Git-репозиторий со всеми материалами ЛР; * создание отчета о выполнение ЛР в формате pdf, который может включать в себя: * ссылку на git * диаграммы * таблицы * входные данные (например, запросы) * выходные данные (таблицы с выводом по вашим данным) * **Текстовое описание работы не подразумевается, только фиксация результата** * устная защита на лабораторной работе. ## Лабораторная работа 2 **Концептуальное проектирование базы данных** ### **Цель** Построить логически корректную модель данных. ### **Содержание работы** Студент разрабатывает: * ER-диаграмму; * KB-диаграмму (ключи, ограничения, связи); * описание атрибутов и доменов; Студент должен понимать: * семантику удаления и обновления данных. ### **Отчетные материалы** * ER-диаграмма; * KB-диаграмма; * таблица атрибутов и доменов; ## Лабораторная работа 3 **Функциональная модель системы** ### **Цель** Понять, как данные используются в бизнес-процессах. ### **Содержание работы** * Студент строит FA-диаграмму ### **Отчетные материалы** * FA-диаграмма; ## Лабораторная работа 4 **Физическая реализация базы данных** **Срок выполнения: 2 недели** ### **Цель** Перевести логическую модель в реальную базу данных. ### **Содержание работы** Студент должен: * разработать физическую схему БД (DDL); * определить ограничения целостности; * подготовить тестовые данные; * автоматизировать пересоздание базы данных. ### **Отчетные материалы** * SQL-скрипт создания схемы; * SQL-скрипт начального наполнения; * скрипт генерации тестовых данных (Python или другой удобный вам язык); * инструкция по запуску. ## Лабораторная работа 5 **Аналитические SQL-запросы** **Срок выполнения: 2 недели** ### **Цель** Освоить сложные запросы и аналитические возможности SQL. ### **Обязательные требования к запросам** Все запросы должны: * использовать CTE; * возвращать расширенный набор данных (не менее 7 строк вывода). ### **Необходимо реализовать 5 запросов, среди которые должны использоваться:** 1. Сложный JOIN (3+ таблиц) с фильтрами и HAVING. 2. Поиск отсутствующих данных (LEFT JOIN \+ IS NULL). 3. Оконная функция с `ROWS BETWEEN`. 4. Оконная функция смещения (`LAG` / `LEAD`). ### **Отчетные материалы** * SQL-код запросов; * примеры выполнения; краткое описание логики каждого запроса. ## Лабораторная работа 6 **Триггеры и хранимые процедуры** **Срок выполнения: 4 недели** ### **Цель** Реализовать бизнес-логику на уровне базы данных. ### **Требования** Необходимо реализовать: * 2 триггера; * 2 хранимые процедуры. Триггеры и процедуры должны: * реализовывать реальные бизнес-правила; * обрабатывать негативные сценарии; * корректно работать при множественных вставках. ### **Отчетные материалы** * SQL-код триггеров; * SQL-код процедур; * тестовые сценарии (позитивные и негативные); * примеры выполнения. ## Лабораторная работа 7 **Оптимизация и анализ выполнения запросов** ### **Цель** Изучить влияние индексов и структуры запросов на производительность. ### **Содержание работы** * согласовать с преподавателем 2 “сложных” запроса; * снять планы выполнения `EXPLAIN (ANALYZE, BUFFERS)` до индексов; * спроектировать индексы: * составной, * частичный, * покрывающий; * повторно снять планы; * сравнить результаты. ### **Отчетные материалы** * планы выполнения до и после; * таблица сравнения показателей; * пояснение выбора индексов и join-стратегий. ## Лабораторная работа 8 (дополнительная) **Транзакции и уровни изоляции** ### **Цель** Понять принципы ACID и конкурентного доступа. ### **Содержание работы** Студент демонстрирует: * non-repeatable read; * phantom read; * write skew; * использование SAVEPOINT и ROLLBACK TO. ### **Отчетные материалы** * сценарии для нескольких сессий; * пошаговое описание воспроизведения; * выводы.