# Регламент выполнения лабораторных работ ### **Общие требования** 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 * диаграммы * таблицы * входные данные (например, запросы) * выходные данные (таблицы с выводом по вашим данным) * **Текстовое описание работы не подразумевается, только фиксация результата** * устная защита на лабораторной работе. ## Лабораторная работа 6 **Триггеры и хранимые процедуры** **Срок выполнения: 4 недели** ### **Цель** Реализовать бизнес-логику на уровне базы данных. ### **Требования** Необходимо реализовать: * 2 триггера; * 2 хранимые процедуры. Триггеры и процедуры должны: * реализовывать реальные бизнес-правила; * обрабатывать негативные сценарии; * корректно работать при множественных вставках. ### **Отчетные материалы** * SQL-код триггеров; * SQL-код процедур; * тестовые сценарии (позитивные и негативные); * примеры выполнения. ## Лабораторная работа 7 **Оптимизация и анализ выполнения запросов** ### **Цель** Изучить влияние индексов и структуры запросов на производительность. ### **Содержание работы** * согласовать с преподавателем 2 “сложных” запроса; * снять планы выполнения `EXPLAIN (ANALYZE, BUFFERS)` до индексов; * спроектировать индексы: * составной, * частичный, * покрывающий; * повторно снять планы; * сравнить результаты. ### **Отчетные материалы** * планы выполнения до и после; * таблица сравнения показателей; * пояснение выбора индексов и join-стратегий. ## Лабораторная работа 8 (дополнительная) **Транзакции и уровни изоляции** ### **Цель** Понять принципы ACID и конкурентного доступа. ### **Содержание работы** Студент демонстрирует: * non-repeatable read; * phantom read; * write skew; * использование SAVEPOINT и ROLLBACK TO. ### **Отчетные материалы** * сценарии для нескольких сессий; * пошаговое описание воспроизведения; * выводы.