174 lines
7.4 KiB
Markdown
174 lines
7.4 KiB
Markdown
# Регламент выполнения лабораторных работ
|
||
|
||
### **Общие требования**
|
||
|
||
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
|
||
* диаграммы
|
||
* таблицы
|
||
* входные данные (например, запросы)
|
||
* выходные данные (таблицы с выводом по вашим данным)
|
||
* **Текстовое описание работы не подразумевается, только фиксация результата**
|
||
* устная защита на лабораторной работе.
|
||
|
||
## Лабораторная работа 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.
|
||
|
||
### **Отчетные материалы**
|
||
|
||
* сценарии для нескольких сессий;
|
||
* пошаговое описание воспроизведения;
|
||
* выводы.
|
||
|