This is an old revision of the document!
Table of Contents
Базы данных
базы_данных&navbar
🎓 Лабораторные работы
🎯 Лабораторная работа 1. Проектирование структуры БД
<wrap important>Важно! Согласовать модель с преподавателем до продолжения работы</wrap>
Цель: Спроектировать структуру базы данных, соответствующую бизнес-требованиям и нормализованную до 3NF.
📋 Требования:
| Требование | Описание |
| ———— | ———- |
| Требование 1 | Соответствие всем частям задания (структура + выходные документы) |
| Требование 2 | 3-5 таблиц в базе данных |
| Требование 3 | Нормализация до третьей нормальной формы |
🚀 Шаги выполнения:
1. **Выбор задачи** из учебных пособий:
* {{db:варианты_заданий_по_уд.pdf| Варианты заданий к.т.н. Сосинской С.С.}}
* Задачи, сгенерированные [[db:nn_tasks|нейронной сетью]]
2. **Проектирование ER-диаграммы** в современных инструментах:
* [[https://dbdiagram.io|DBDiagram]] (рекомендуется)
* [[https://draw.io|Draw.io]]
* [[https://plantuml.com|PlantUML]]
3. **Валидация модели** через [[https://github.com/eugeneai/lab-db-2025-1|Deepseek]]
4. **Согласование** полученной модели с преподавателем
📊 Пример проекта: Github репозиторий
🎯 Лабораторная работа 2. Инсталляция БД на сервере
Цель: Практическое развертывание базы данных и работа с SQL.
🔧 Инструменты: * Клиент БД: pgAdmin 4 или DBeaver * СУБД: PostgreSQL 15+
📋 Задачи:
- Преобразование ER-диаграммы в логическую модель
- Проектирование физической модели
- Создание DDL-запросов для PostgreSQL
- Заполнение таблиц данными (минимум 4 строки)
- Выполнение содержательных SELECT-запросов с JOIN 2-3 таблиц
-- Пример запроса с JOIN SELECT u.name, o.order_date, p.product_name FROM users u JOIN orders o ON u.id = o.user_id JOIN products p ON o.product_id = p.id;
🎯 Лабораторная работа 3. Представления и процедуры
Цель: Освоение механизмов абстракции данных и программных модулей.
📋 Задачи:
- Создание представлений для выходных документов
- Разработка хранимых процедур с параметрами
- Оптимизация запросов через представления
-- Пример создания представления CREATE VIEW sales_report AS SELECT c.name, SUM(o.amount) AS total_sales FROM customers c JOIN orders o ON c.id = o.customer_id GROUP BY c.name;
🎯 Лабораторная работа 4. Анализ производительности
Цель: Освоение методов анализа и оптимизации производительности БД.
📋 Задачи:
- Создание генератора данных (20 000 записей в каждой таблице)
- Анализ планов выполнения запросов (EXPLAIN ANALYZE)
- Оптимизация БД через индексы и настройки
- Сравнение производительности до/после оптимизации
🔧 Инструменты: ```sql EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM large_table WHERE condition; ```
🎯 Лабораторная работа 5. Триггеры и аудит
Цель: Реализация бизнес-логики на уровне БД и системы аудита.
📋 Задачи:
- Триггеры каскадного удаления для связей “один-ко-многим”
- Триггеры аудита изменений (INSERT, UPDATE, DELETE)
- Создание таблицы-журнала для отслеживания изменений
-- Пример триггера аудита CREATE TRIGGER audit_customer_changes AFTER INSERT OR UPDATE OR DELETE ON customers FOR EACH ROW EXECUTE FUNCTION log_customer_changes();
🚀 ТОП-ИТ УРОВЕНЬ
💡 Лабораторная работа 6. Репликация и кластеризация
Продвинутый уровень: Работа с распределенными системами
Цель: Освоение принципов построения отказоустойчивых систем.
📋 Задачи:
- Настройка master-slave репликации PostgreSQL
- Создание кластера из 2-х узлов
- Тестирование отказоустойчивости
- Нагрузочное тестирование кластера
🔧 Технологии: * *Docker для контейнеризации * PgPool-II для балансировки нагрузки * WAL-G для непрерывного архивирования 📊 Критерии оценки: ^ Задача ^ Баллы ^ | Настройка репликации | 40 | | Тестирование отказоустойчивости | 30 | | Документация архитектуры | 30 | ==== 💡 Лабораторная работа 7. Миграции и CI/CD для БД ==== Цель: Освоение современных практик управления изменениями БД. 📋 Задачи: - Настройка Flyway/Liquibase для миграций - Создание pipeline для автоматического развертывания - Реализация отката миграций (rollback) - Интеграция с GitLab CI/GitHub Actions 📁 Структура проекта:**
db/ ├── migrations/ │ ├── V1__Create_tables.sql │ ├── V2__Add_indexes.sql │ └── V3__Insert_test_data.sql ├── flyway.conf └── docker-compose.yml
