В рамках курсового проекта была успешно разработана система управления базой данных для чат-бота, автоматизирующего процесс продаж в «Sokol Coffee. Проект охватывает все ключевые аспекты проектирования и администрирования баз данных, включая создание структуры базы данных, реализацию SQL-запросов, разработку хранимых процедур, триггеров и функций, а также настройку стратегий безопасности и резервного копирования. Работа выполнялась в соответствии с требованиями предметной области, что обеспечило простоту использования, надежность и масштабируемость системы.
На этапе проектирования была создана структура базы данных, включающая такие таблицы, как «Клиенты», «Заказы», «Продукты», «Сотрудники» и «Поставка». Каждая таблица проектировалась с учетом нормализации и целостности данных. Для оптимизации производительности были созданы индексы по таким ключевым полям, как OrderID, ClientID, EmployeeID и Category. Это значительно повысило скорость выполнения запросов, особенно при работе с большими объемами данных. Анализ предметной области показал, что выбранная структура полностью соответствует требованиям и позволяет эффективно управлять данными.
Были реализованы различные типы SQL-запросов, включая простые выборки, агрегатные функции, группировки, вычисляемые поля и запросы с использованием табличных соединений. Например, запросы позволяют вычислять общую сумму заказа для каждого клиента, подсчитывать количество сотрудников по ролям и получать информацию о доставке вместе с ответственными сотрудниками. Также были созданы запросы на добавление, обновление и удаление данных, что обеспечивает полный контроль над содержимым базы данных. Была разработана отдельная страница для отображения результатов ключевых запросов, что упрощает анализ данных и управление системой.
Серверное приложение было улучшено хранимыми процедурами, функциями и триггерами, которые автоматизируют часто выполняемые операции и повышают производительность системы. Например, хранимая процедура AddOrder позволяет добавлять новые заказы с помощью транзакций, обеспечивая целостность данных. Функция GetTotalSpentByClient вычисляет общую сумму заказа для указанного клиента, упрощая финансовый анализ. Такие триггеры, как UpdateDeliveryStatus и LogOrderDeletion, автоматически реагируют на события и выполняют дополнительные действия, такие как обновление статуса доставки или регистрация удалений. Эти объекты значительно повышают удобство использования базы данных и минимизируют риск ошибок.
На этапе администрирования были созданы роли пользователей (Администратор, Менеджер, Курьер) с четко определенными правами доступа. Это позволяет разделить ответственность между пользователями и предотвратить несанкционированный доступ. Для повышения безопасности была реализована система авторизации с использованием логинов и паролей. Была настроена стратегия резервного копирования, включающая регулярное полное и инкрементальное резервное копирование. Тестирование подтвердило, что базу данных можно успешно восстановить из резервных копий. Также были реализованы дополнительные меры безопасности, такие как шифрование данных, ограничение доступа по IP и ведение журнала операций.
Все поставленные задачи были успешно выполнены. Созданная база данных и серверное приложение представляют собой эффективное решение для управления информацией в предметной области. Однако есть несколько областей для улучшения. Некоторые хранимые процедуры, такие как CalculateDeliveryCost, можно перенести в клиентское приложение, чтобы снизить нагрузку на сервер. По мере роста количества записей в таблицах время выполнения запросов может увеличиться. Для оптимизации производительности можно добавить дополнительные индексы или пересмотреть планы выполнения запросов. В будущем функциональность системы может быть расширена за счет добавления новых таблиц (например, для отзывов клиентов) и реализации более сложных аналитических запросов.
Проект имеет значительный потенциал для дальнейшего развития. Будущие улучшения могут включать добавление аналитического модуля для визуализации данных (например, не только с помощью Chart.js, но также и экспорт в PDF формат для составления реальных отчетов), реализацию API для интеграции с мобильными приложениями, внедрение системы уведомлений для клиентов и сотрудников (например, по электронной почте или SMS), а также расширение функционала триггеров и хранимых процедур для автоматизации новых операций.
В целом работа была выполнена на высоком уровне. Все этапы проектирования, разработки и администрирования были реализованы в соответствии с требованиями. Система демонстрирует высокую производительность, надежность и простоту использования. Она готова к развертыванию в реальных условиях и легко адаптируется под новые задачи.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
Грекул, В. И. Проектирование информационных систем : учебник и практикум для среднего профессионального образования / В. И. Грекул, Н. Л. Коровкина, Г. А. Левочкина. — 2-е изд. — Москва : Издательство Юрайт, 2023. — 423 с. — (Профессиональное образование). — ISBN 978-5-534-17836-4. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/533817
Д. В. Чистов, П. П. Мельников, А. В. Золотарюк, Н. Б. Ничепорук. Проектирование информационных систем: учебник и практикум для среднего профессионального образования— 2-е изд., перераб. и доп.— Москва Издательство Юрайт, 2023.— 293с.— (Профессиональное образование). — ISBN 978-5-534-16217-2. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/530635
Григорьев, М. В. Проектирование информационных систем : учебное пособие для среднего профессионального образования / М. В. Григорьев, И. И. Григорьева. — Москва : Издательство Юрайт, 2022. — 318 с. — (Профессиональное образование). — ISBN 978-5-534-12105-6. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/496197
Зараменских, Е. П. Информационные системы: управление жизненным циклом : учебник и практикум для среднего профессионального образования / Е. П. Зараменских. — 2-е изд., перераб. и доп. — Москва: Издательство Юрайт, 2023. — 497 с. — (Профессиональное образование). — ISBN 978-5-534-16179-3. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/530571
Нетесова, О. Ю. Информационные системы в экономике : учебное пособие для среднего профессионального образования / О. Ю. Нетесова. — 5-е изд., испр. и доп. — Москва : Издательство Юрайт, 2024. — 152 с. — (Профессиональное образование). — ISBN 978-5-534-20212-0. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/557803
Стружкин, Н. П. Базы данных: проектирование : учебник для среднего профессионального образования / Н. П. Стружкин, В. В. Годин. — Москва : Издательство Юрайт, 2023. — 477 с. — (Профессиональное образование). — ISBN 978-5-534-11635-9. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/518499
Советов, Б. Я. Базы данных : учебник для среднего профессионального образования / Б. Я. Советов, В. В. Цехановский, В. Д. Чертовской. — 4-е изд., перераб. и доп. — Москва : Издательство Юрайт, 2024. — 403 с. — (Профессиональное образование). — ISBN 978-5-534-18784-7. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/545704
Кудрявцев, В. Б. Интеллектуальные системы : учебник и практикум для среднего профессионального образования / В. Б. Кудрявцев, Э. Э. Гасанов, А. С. Подколзин. — 2-е изд., испр. и доп. — Москва : Издательство Юрайт, 2024. — 165 с. — (Профессиональное образование). — ISBN 978-5-534-12968-7. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/542810
Управление проектами. It-технологии : учебное пособие для среднего профессионального образования / В. Е. Гвоздев [и др.]. — 2-е изд. — Москва : Издательство Юрайт, 2025. — 167 с. — (Профессиональное образование). — ISBN 978-5-534-20796-5. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/558795
Системы управления технологическими процессами и информационные технологии : учебное пособие для среднего профессионального образования / В. В. Троценко, В. К. Федоров, А. И. Забудский, В. В. Комендантов. — 2-е изд., испр. и доп. — Москва : Издательство Юрайт, 2024. — 136 с. — (Профессиональное образование). — ISBN 978-5-534-09939-3. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/539749 (дата обращения: 18.12.2024).
Богатырев, В. А. Надежность информационных систем : учебное пособие для среднего профессионального образования / В. А. Богатырев. — 2-е изд. — Москва : Издательство Юрайт, 2024. — 366 с. — (Профессиональное образование). — ISBN 978-5-534-18930-8. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/555113
Зыков, С. В. Объектно-ориентированное программирование : учебник и практикум для вузов / С. В. Зыков. — 2-е изд. — Москва : Издательство Юрайт, 2024. — 151 с. — (Высшее образование). — ISBN 978-5-534-16941-6. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/537385
Лаврищева, Е. М. Программная инженерия и технологии программирования сложных систем : учебник для вузов / Е. М. Лаврищева. — 2-е изд., испр. и доп. — Москва : Издательство Юрайт, 2023. — 432 с. — (Высшее образование). — ISBN 978-5-534-07604-2. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/513067
Илюшечкин, В. М. Основы использования и проектирования баз данных : учебник для среднего профессионального образования / В. М. Илюшечкин. — Москва : Издательство Юрайт, 2024. — 213 с. — (Профессиональное образование). — ISBN 978-5-534-01283-5. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/538545
Маркин, А. В. Программирование на SQL : учебник и практикум для вузов / А. В. Маркин. — 3-е изд., перераб. и доп. — Москва : Издательство Юрайт, 2024. — 805 с. — (Высшее образование). — ISBN 978-5-534-18371-9. — Текст : электронный // Образовательная платформа Юрайт [сайт]. — URL: https://urait.ru/bcode/534873
ПРИЛОЖЕНИЯ
tables.sql
-- Создание таблицы Clients
CREATE TABLE Clients (
ClientID INTEGER PRIMARY KEY AUTOINCREMENT,
Name VARCHAR(50) NOT NULL,
Phone VARCHAR(15) NOT NULL UNIQUE,
Address VARCHAR(100),
INDEX (Phone)
);
-- Создание таблицы Products
CREATE TABLE Products (
ProductID INTEGER PRIMARY KEY AUTOINCREMENT,
Name VARCHAR(50) NOT NULL,
Description VARCHAR(200),
Category VARCHAR(20) CHECK(Category IN ('Напиток', 'Десерт')),
Price DECIMAL(10, 2) CHECK(Price > 0),
Stock INTEGER CHECK(Stock BETWEEN 0 AND 1000),
INDEX (Category)
);
-- Создание таблицы Orders
CREATE TABLE Orders (
OrderID INTEGER PRIMARY KEY AUTOINCREMENT,
ClientID INTEGER NOT NULL,
OrderDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
Status VARCHAR(20) CHECK(Status IN ('Новый', 'Готовится', 'В пути', 'Доставлен')),
TotalAmount DECIMAL(10, 2) CHECK(TotalAmount > 0),
FOREIGN KEY (ClientID) REFERENCES Clients(ClientID) ON DELETE CASCADE,
INDEX (OrderDate)
);
-- Создание таблицы Delivery
CREATE TABLE Delivery (
DeliveryID INTEGER PRIMARY KEY AUTOINCREMENT,
OrderID INTEGER NOT NULL UNIQUE,
DeliveryAddress VARCHAR(100) NOT NULL,
TimeWindow VARCHAR(20) CHECK(TimeWindow IN ('10:00-12:00', '14:00-16:00')),
EmployeeID INTEGER NOT NULL,
DeliveryStatus VARCHAR(20) CHECK(DeliveryStatus IN ('В обработке', 'В пути', 'Завершена')),
DeliveryCost DECIMAL(10, 2) CHECK(DeliveryCost > 0),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID) ON DELETE CASCADE,
FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID) ON DELETE SET NULL,
INDEX (DeliveryStatus)
);
-- Создание таблицы Employees
CREATE TABLE Employees (
EmployeeID INTEGER PRIMARY KEY AUTOINCREMENT,
FullName VARCHAR(50) NOT NULL,
Role VARCHAR(30) CHECK(Role IN ('Курьер', 'Бариста', 'Администратор')),
Phone VARCHAR(15) NOT NULL UNIQUE,
Email VARCHAR(50) UNIQUE,
WorkSchedule VARCHAR(50),
IsActive BOOLEAN DEFAULT TRUE,
INDEX (Role)
);
-- Создание таблицы для связи "многие-ко-многим" между Orders и Products
CREATE TABLE OrderProducts (
OrderProductID INTEGER PRIMARY KEY AUTOINCREMENT,
OrderID INTEGER NOT NULL,
ProductID INTEGER NOT NULL,
Quantity INTEGER CHECK(Quantity > 0),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID) ON DELETE CASCADE,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID) ON DELETE CASCADE,
INDEX (OrderID, ProductID)
);
queries.sql
-- Клиенты
SELECT * FROM Clients;
INSERT INTO Clients (Name, Phone, Address) VALUES (?, ?, ?);
UPDATE Clients SET Name = ?, Phone = ?, Address = ? WHERE ClientID = ?;
DELETE FROM Clients WHERE ClientID = ?;
-- Продукты
SELECT * FROM Products;
INSERT INTO Products (Name, Description, Category, Price, Stock) VALUES (?, ?, ?, ?, ?);
UPDATE Products SET Name = ?, Description = ?, Category = ?, Price = ?, Stock = ? WHERE ProductID = ?;
DELETE FROM Products WHERE ProductID = ?;
-- Заказы
SELECT * FROM Orders;
INSERT INTO Orders (ClientID, OrderDate, Status, TotalAmount) VALUES (?, ?, ?, ?);
UPDATE Orders SET ClientID = ?, OrderDate = ?, Status = ?, TotalAmount = ? WHERE OrderID = ?;
DELETE FROM Orders WHERE OrderID = ?;
-- Доставки
SELECT * FROM Delivery;
INSERT INTO Delivery (OrderID, DeliveryAddress, TimeWindow, EmployeeID, DeliveryStatus, DeliveryCost) VALUES (?, ?, ?, ?, ?, ?);
UPDATE Delivery SET OrderID = ?, DeliveryAddress = ?, TimeWindow = ?, EmployeeID = ?, DeliveryStatus = ?, DeliveryCost = ? WHERE DeliveryID = ?;
DELETE FROM Delivery WHERE DeliveryID = ?;
-- Сотрудники
SELECT * FROM Employees;
INSERT INTO Employees (FullName, Role, Phone, Email, WorkSchedule, IsActive) VALUES (?, ?, ?, ?, ?, ?);
UPDATE Employees SET FullName = ?, Role = ?, Phone = ?, Email = ?, WorkSchedule = ?, IsActive = ? WHERE EmployeeID = ?;
DELETE FROM Employees WHERE EmployeeID = ?;
-- Отчеты и аналитика
-- 1. Количество заказов по статусам
SELECT Status, COUNT(*) AS Count FROM Orders GROUP BY Status;
-- 2. Общая сумма заказов по клиентам
SELECT c.Name AS ClientName, SUM(o.TotalAmount) AS TotalSpent
FROM Orders o
JOIN Clients c ON o.ClientID = c.ClientID
GROUP BY c.ClientID;
-- 3. Распределение продуктов по категориям
SELECT Category, COUNT(*) AS Count FROM Products GROUP BY Category;
-- 4. Активные сотрудники и их роли
SELECT Role, COUNT(*) AS Count
FROM Employees
WHERE IsActive = 1
GROUP BY Role;
-- SQL-запросы на странице запросов
-- 1. Все клиенты
SELECT * FROM Clients;
-- 2. Общая сумма заказов по клиентам
SELECT c.ClientID, c.Name, SUM(o.TotalAmount) AS TotalSpent
FROM Orders o
JOIN Clients c ON o.ClientID = c.ClientID
GROUP BY c.ClientID;
-- 3. Количество сотрудников по ролям
SELECT Role, COUNT(*) AS Count
FROM Employees
GROUP BY Role;
-- 4. Информация о доставках с указанием сотрудников
SELECT d.DeliveryID, d.DeliveryAddress, e.FullName
FROM Delivery d
JOIN Employees e ON d.EmployeeID = e.EmployeeID;