Рус | Eng
Проект представляет собой базу данных для сети сервисных центров, специализирующихся на ремонте компьютеров и игровых консолей. Основная цель системы - автоматизация бизнес-процессов, включая управление заказами, бронированием, клиентами, сотрудниками и запчастями
- ServiceCenters_and_StorageCenters - информация о сервисных центрах и складах
- Employees - данные о сотрудниках (техники, менеджеры, администраторы)
- Clients - информация о клиентах и их статусе (Ordinary, Regular, Premium)
- Services - перечень предоставляемых услуг
- Parts - каталог запчастей с указанием количества и мест хранения
- Orders - заказы на ремонт
- Receipts - чеки по завершенным заказам
- Bookings - записи на прием
- OrderContent - состав заказов (услуги и запчасти)
- PartsPurchases - закупки запчастей
В проекте также представле набор тестовых данных для всех таблиц.
-
Администраторы (administrator)
- Полный доступ ко всем таблицам, функциям и последовательностям
- Доступ ограничен по сервисным центрам с помощью RLS (Row Level Security)
-
Аналитики (analyst)
- Только чтение всех данных
- Доступ к аналитическим функциям
- Нет прав на модификацию данных
-
Техники (technician)
- Чтение и обновление данных по своим сервисным центрам
- Доступ к заказам, запчастям и клиентам своего центра
- Могут создавать закупки запчастей
-
Менеджеры (manager)
- Полный доступ к клиентам, заказам, бронированиям своего центра
- Могут создавать и обновлять заказы, бронирования, чеки
- Ограниченный доступ к данным сотрудников
-
Функция
update_client_status()
Обновляет статус клиента (Premium, Regular, Ordinary) на основе суммы его чеков. -
Триггер
trg_update_client_status
Автоматически обновляет статус клиента при добавлении или изменении чека. -
Функция
burn_client_bonuses()
Обнуляет бонусные баллы клиентов, если с момента последней покупки прошел год. -
Функция
transfer_client_to_another_technician()
Переводит клиента к другому мастеру, обновляя его бронирования. -
Функция
calculate_order_cost()
Рассчитывает общую стоимость заказа, включая услуги и запчасти. -
Функция
create_receipt_for_order()
Создает чек для завершенного заказа, учитывая скидки и бонусные баллы. -
Функция
check_part_availability()
Проверяет наличие запчасти на складе перед добавлением в заказ. -
Триггер
trg_check_part_availability
Блокирует добавление запчасти в заказ, если её нет в наличии. -
Триггер
trg_decrease_part_count
Уменьшает количество запчастей на складе после их добавления в заказ. -
Функция
check_booking_availability()
Проверяет доступность времени бронирования у мастера. -
Функция
create_booking_with_check()
Создает бронирование, предварительно проверяя доступность времени. -
Функция
suggest_booking_alternatives()
Предлагает альтернативные варианты бронирования, если выбранное время занято. -
Функция
get_bookings_statistics_by_date()
Возвращает статистику бронирований по датам, включая количество клиентов и популярные услуги. -
Функция
get_popular_services_stats()
Показывает статистику по востребованным услугам, включая количество бронирований и завершенных заказов. -
Функция
get_completed_services_stats()
Анализирует выполненные услуги, включая выручку и среднее время выполнения.
В базе данных созданы индексы для оптимизации.
Проект включает подключение к Grafana для визуализации ключевых метрик:
-
Отфражения выручки по каждому серсному центру;
-
Выручка по дням;
-
Популярные услуги и методы оплаты;
-
Распределение клиентов по статусам.
Реализована модель RandomForest для:
-
Предсказания востребованных услуг
-
Персонализированных предложений клиентам
-
Анализа трендов спроса
-
Гибкая система бронирования с проверкой доступности и предложением альтернатив
-
Автоматическое обновление статусов клиентов на основе их активности
-
Комплексные аналитические функции для принятия управленческих решений
-
Система прав доступа с Row Level Security
-
Оптимизированная структура с индексами для быстрого поиска
-
Установка базы данных:
- Запустите скрипт
Service_Centers_Schema.sqlиз папкиDB_source/Schemaдля создания базы данных и таблиц. - Заполните таблицы тестовыми данными, используя скрипт
Test_data.sqlиз папкиDB_source/Importing_Test_data.
- Запустите скрипт
-
Настройка функций и триггеров:
- Примените скрипты из папки
DB_source/Functions_and_Triggers.
- Примените скрипты из папки
-
Настройка прав доступа и индексов:
- Используйте скрипты из папки
DB_source/Politics_and_Privilegesдля создания ролей и настройки политик. - Выполните скрипт из папки
DB_source/Indexesдля установки индексов на БД.
- Используйте скрипты из папки
-
Аналитика:
- Для выполнения аналитических запросов используйте файлы из папки
Analytical_queries. - Для визуализации данных подключите Grafana к вашей базе данных (см. пример в
Resources/Grafana.png).
- Для выполнения аналитических запросов используйте файлы из папки
- Запрос 1 – Выявление запчастей с низким спросом и высокой стоимостью хранения для оптимизации складских запасов.
- Запрос 2 – Анализ эффективности сотрудников (техников) по количеству выполненных заказов, времени выполнения и доходу.
- Запрос 3 – Определение сотрудников, заслуживающих премии, на основе их продуктивности за последние 3 месяца.
- Запрос 4 – Тестирование функции создания бронирования с проверкой накладок во времени.
- Запрос 5 – Расчет ключевых метрик сервисных центров (заказы, бронирования, выручка, клиенты).
- Запрос 6 – Анализ сезонных тенденций по месяцам и типам устройств для выявления спроса на услуги и запчасти.
- Запрос 7 – Пример транзакции для безопасного создания чека с блокировкой строки заказа.
- Запрос 8 – Анализ сезонности по месяцам и неделям, а также популярности услуг и запчастей.
- Запрос 9 – Подготовка данных для кластеризации клиентов по их активности и предпочтениям.
- Запрос 10 – Анализ спроса на запчасти за последний месяц для управления запасами.
- Запрос 11 – Анализ загруженности временных слотов и пиковых часов для оптимизации расписания.
- Запрос 12 – Выявление запчастей для обмена между сервисными центрами на основе их востребованности.
- Запрос 13 – Анализ востребованности и прибыльности услуг и запчастей для стратегического планирования.
- Запрос 14 – Расчет процента занятости временных слотов для записи за последний год.
- Запрос 16 – Создание датасета для анализа клиентского поведения и истории заказов.
- Запрос 18 – Генерация персонализированных рекомендаций и скидок для клиентов на основе их истории заказов.