# Регламент выполнения лабораторных работ

### **Общие требования**

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  
  * диаграммы   
  * таблицы  
  * входные данные (например, запросы)  
  * выходные данные (таблицы с выводом по вашим данным)  
  * **Текстовое описание работы не подразумевается, только фиксация результата**  
* устная защита на лабораторной работе.

## Лабораторная работа 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.

### **Отчетные материалы**

* сценарии для нескольких сессий;  
* пошаговое описание воспроизведения;  
* выводы.

