commit 6ce8a15a08078e9d62250a44f9f109a40004e4f2 Author: SEK1RO Date: Wed Feb 18 11:23:14 2026 +0300 1 diff --git a/1/report.md b/1/report.md new file mode 100644 index 0000000..e551159 --- /dev/null +++ b/1/report.md @@ -0,0 +1,71 @@ +# Лабораторная работа 1. Литвинов Б23-503 + +## **Анализ предметной области** + +### **Цель** + +Научиться извлекать бизнес-логику из текстового технического задания. + +### **Содержание работы** + +Студент должен: + +* проанализировать текст варианта; +* выявить бизнес-правила; +* определить связи между сущностями предметной области. + +### **Отчетные материалы** + +* список бизнес-правил (нумерованный); +* матрица связей сущностей. + +# список бизнес-правил (нумерованный) + +1. `Курс` состоит из `занятий`, проводимых последовательно. `Клиенты` создают `запись` на `курс` +1. Для практических и части теоретических `занятий`, требуются `продукты`, `оборудование` в зависимости от количества `клиентов` +1. `В помещении` может находится `оборудование`, которое будет использовано на `занятии`, остальное нужно докупить +1. Набор `клиентов` ограничен вместимостью `помещения`. `Клиенты`, которым не хватило места, попадают на следующий `курс` +1. Сначала `клиенты` записываются, потом арендуем `помещение` и `оборудование`, либо наоборот +1. Мастера ведут или `курс` целиком, или `занятия`. Оплата за каждое `занятие` отдельно +1. Не менее двух `мастеров` на `занятие` +1. Аптечка на каждом `курсе`, имеет доступ `мастер` +1. Непереносимость `лекарств` `мастером` или `клиентом` +1. Действия по изменению сущностей записываются в `логах действий` + +# матрица связей сущностей + +E1 клиент +E2 мастер +E3 студия +E4 занятие +E5 курс +E6 запись +E7 продукты +E8 оборудование +E9 аптечка +E10 лекарство +E11 непереносимость + +`дополнительные` +E12 лекарство как категория +E13 продукт как категория +E14 логи действий + + +| x | E1 | E2 | E3 | E4 | E5 | E6 | E7 | E8 | E9 | E10| E11| E12| E13| E14| +|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----| +| E1 | x | | | | | M | | | | | M | | | | +| E2 | | x | | M | M | | | | | | M | | | | +| E3 | | | x | M | | | | M | | | | | | | +| E4 | | M | O | x | O | | M | M | | | | | | | +| E5 | | O | | M | x | M | | | O | | | | | | +| E6 | O | | | | O | x | | | | | | | | | +| E7 | | | | O | | | x | | | | | | O | | +| E8 | | | O | M | | | | x | | | | | | | +| E9 | | | | | O | | | | x | M | | | | | +| E10| | | | | | | | | O | x | | O | | | +| E11| O | O | | | | | | | | | x | M | | | +| E12| | | | | | | | | | | | x | | | +| E13| | | | | | | | | | | | | x | | +| E14| O | O | O | O | O | | O | O | O | O | O | O | O | x | + diff --git a/задание.jpg b/задание.jpg new file mode 100644 index 0000000..42dd73c Binary files /dev/null and b/задание.jpg differ diff --git a/регламент.md b/регламент.md new file mode 100644 index 0000000..96ce8db --- /dev/null +++ b/регламент.md @@ -0,0 +1,215 @@ +# Регламент выполнения лабораторных работ + +### **Общие требования** + +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. + +### **Отчетные материалы** + +* сценарии для нескольких сессий; +* пошаговое описание воспроизведения; +* выводы. +