Внедрение баз данных и автоматизированных информационных систем на современных предприятиях имеет огромное значение, поскольку это позволяет:
Улучшить качество обслуживания клиентов, предоставляя быстрый и эффективный сервис.
Повысить производительность труда благодаря автоматизации бизнес-процессов и упрощению работы сотрудников.
Получать актуальную информацию о деятельности компании и принимать обоснованные решения.
Снизить затраты на ведение бизнеса, оптимизируя управление ресурсами и процессами.
Создать инфраструктуру для увеличения рентабельности, снижения издержек и обеспечения стабильно высокого качества продукции и услуг.
Таким образом, разработка и внедрение информационной системы является актуальной задачей, которая способствует росту бизнеса и его устойчивому развитию.
Целью работы является проектирование и разработка базы данных и информационной системы учета аренды автотранспорта.
Для достижения поставленной цели необходимо решить следующие задачи:
провести анализ предметной области;
создать техническое задание на разработку информационной системы;
разработать модели информационной системы;
реализовать информационную систему учета аренды
автотранспорта;
выполнить контрольный запуск информационной системы;
описать последовательность шагов по внедрению информационной системы.
Объектом исследования является бизнес-процесс аренды автотранспорта.
Предметом исследования является база данных учета аренды автотранспорта.
ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
Компания «АвтоАренда» предлагает услуги аренды автомобилей для различных целей: путешествия, деловые поездки, корпоративные мероприятия и прочее. Основные бизнес-процессы компании включают [1]:
Приём заявок от клиентов: клиенты могут связаться с компанией через сайт, мобильное приложение или по телефону, чтобы забронировать автомобиль на определённое время.
Подбор автомобилей: менеджеры компании подбирают автомобили в соответствии с требованиями и предпочтениями клиента, учитывая марку, модель, тип кузова, пробег и стоимость аренды.
Оформление договора аренды: после подтверждения бронирования клиент подписывает договор аренды, в котором указаны условия аренды, ответственность сторон и порядок оплаты.
Предоставление автомобилей: компания предоставляет автомобили в оговоренное время и место, обеспечивая их техническое состояние и соответствие заявленным характеристикам.
Контроль состояния автомобилей: сотрудники компании следят за состоянием автомобилей и своевременно проводят техническое обслуживание и ремонт.
Оплата услуг: клиенты оплачивают услуги аренды безналичным расчётом или наличными средствами.
Возврат автомобилей: после окончания срока аренды клиент возвращает автомобиль в указанное место и время, проверяя его состояние и отсутствие повреждений.
Реклама и маркетинг: компания активно продвигает свои услуги на рынке, используя различные каналы коммуникации, такие как интернет, печатная реклама, радио и телевидение.
Финансовый учёт и анализ: компания ведёт учёт доходов и расходов, анализирует финансовые показатели и планирует развитие бизнеса.
Развитие и инновации: компания постоянно совершенствует свои услуги, внедряет новые технологии и предложения, чтобы оставаться конкурентоспособной на рынке аренды автотранспорта.
Внедрение базы данных по учету аренды автотранспорта позволит получить следующие преимущества:
Повышение эффективности бизнес-операций [2]: автоматизация процессов управления автопарком, отслеживание наличия транспортных средств, планирование графиков технического обслуживания и анализ использования автомобилей.
Рост выручки: увеличение клиентской базы, автоматизация процессов и сокращение операционных издержек.
Получение гибкой системы: возможность масштабирования системы в зависимости от количества запросов и операций [3].
Проектируемая система должна обеспечивать автоматизацию процессов аренда автотранспорта.
Функциональные требования к информационной системе учёта аренды автотранспорта включают:
Создание и редактирование информации о клиентах, автомобилях и договорах аренды.
Ведение истории всех арендных отношений с клиентами и автомобилями.
Возможность просмотра отчётов о состоянии аренды и финансов.
Управление клиентской базой, включая регистрацию новых клиентов, изменение их контактных данных и статуса.
Возможность настройки прав доступа пользователей к различным функциям системы.
Требования к интерфейсу.
Интерфейс пользователя должен быть выполнен в виде веб-приложения с набором веб-страниц, обеспечивающим выполнение возложенных задач.
Интерфейс системы должен быть интуитивно понятным и простым в использовании.
Требования к безопасности.
Система должна обеспечивать защиту от несанкционированного доступа к данным.
Требования к интеграции.
ИС должна иметь возможность интеграции с сайтом организации для обеспечения возможности онлайн-записи.
ИС будет разрабатываться как клиент-серверное приложение, в качестве основной парадигмы будет использоваться объектно- ориентированный подход.
ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
Этап концептуального проектирования
Концептуальное проектирование представляет собой начальный этап разработки базы данных, в ходе которого создается общая информационная модель данных, полностью независимая от конкретных технических реализаций. На этом этапе определяются основные сущности и их взаимосвязи.
Для предметной области проката автомобилей выделим следующие предметные области:
Скидка - описание скидок, которые может получить клиент в компании проката.
Клиент - описывает клиента автопроката.
Штраф - описание штрафов, которые может получить клиент за порчу арендуемого автомобиля.
Автомобиль - описывает арендуемый автомобиль.
СрокНадбавка - описание надбавок к оплате в зависимости от срока аренды.
Графически концептуальная модель представлена на рисунке 1 в виде ER-диаграммы, текущая и последующие диаграммы выполнены в среде ERWin.
Рисунок 1 - Концептуальная ER-модель базы данных
Как видно из диаграммы, многие сущности объединяются связью "многие-ко-многим", что в реляционной модели данных должно преобразовываться в дополнительную таблицу при дальнейшем проектировании.
Этап логического проектирования
Следующий этап — логическое проектирование — преобразует полученную концептуальную модель в структуру, учитывающую особенности выбранной модели данных. В процессе логического проектирования создаются схемы отношений, определяются первичные и внешние ключи, формируется логическая структура базы данных.
Логическая модель базы данных представлена на рисунке 2. Следует отметить, что в целом сущности логической модели соответствуют сущностям ранее сформированной концептуальной модели. Для реализации связей "многие-ко-многим" создана таблица "Сделка", которая описывает совершенные и действующие договоры аренды. Также созданы таблицы-
справочники "ТипАвтомобиля" и "ГодКоэф", которые описывают типы кузовов автомобилей и надбавку в цене в зависимости от года выпуска автомобиля.
Рисунок 2 - Логическая ER-модель базы данных
Этап физического проектирования
Завершающий этап — физическое проектирование — отвечает за создание конкретной реализации базы данных в выбранной СУБД. На этом этапе учитываются технические особенности системы, определяются способы физического хранения данных, создаются индексы и настраиваются методы доступа к информации.
Для реализации базы данных будет использоваться СУБД MySQL как одна из наиболее используемых и функциональных на данный момент.
В физической модели базы данных, представленной на рисунке 3, выбраны типы данных для каждого из атрибутов, соответствующие СУБД MySQL, а также названия таблиц и атрибутов переведены на английский язык для обеспечения лучшей совместимости с языками программирования при последующей разработке интерфейса информационной системы проката автомобилей.
Рисунок 3 - Физическая ER-модель базы данных
Следующим шагом является создание скрипта для генерации таблиц базы данных, в соответствии с разработанной физической моделью. Чтобы обеспечить правильность создания таблиц при многократном перезапуске скрипта, первым действием будет проверка их существования и удаления таблиц, как показано на рисунке 4.
Далее с помощью соответствующих запросов «CREATE» создаются все таблицы базы данных.
Рисунок 4 - Фрагмент скрипта создания базы данных
Полный листинг скрипта создания базы данных приведен в приложении к пояснительной записке.
ПРОЕКТИРОВАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ИНТЕРФЕЙСОВ
Список требуемых транзакций
В число основных транзакций, выполняемых менеджером компании по аренде автомобилей входит:
вывод списка автомобилей не старше заданного года;
вывод списка автомобилей заданной марки;
вывод списка автомобилей заданного производителя;
вывод списка клиентов;
вывод списка заказов за определенный период;
вывод списка незавершенных заказов.
Анализ транзакций на этапе логического проектирования
Для вывода списка автомобилей не старше заданного года следует выполнить выборку из таблицы Auto указав в условии, что поле year должно быть меньше заданного параметра. В результате запроса необходимо вывести поля brand, model, body, cost, year, year_fee, car_number. Для отображения названия кузова необходимо выполнить соединение таблицы Auto с таблицей CarBody с помощью внешнего ключа body. Для отображения надбавки за год авто, следует выполнить соединение таблицы Auto с таблицей YearFee с помошью внешнего ключа year_fee.
Для вывода списка автомобилей заданной марки следует выполнить выборку из таблицы Auto указав в условии, что поле model должно быть равно заданному параметру. В результате запроса необходимо вывести поля brand, model, body, cost, year, year_fee, car_number. Для отображения названия кузова необходимо выполнить соединение таблицы Auto с таблицей CarBody с помощью внешнего ключа body. Для отображения надбавки за год авто,
следует выполнить соединение таблицы Auto с таблицей YearFee с помошью внешнего ключа year_fee.
Для вывода списка автомобилей заданного бренда следует выполнить выборку из таблицы Auto указав в условии, что поле brand должно быть равно заданному параметру. В результате запроса необходимо вывести поля brand, model, body, cost, year, year_fee, car_number. Для отображения названия кузова необходимо выполнить соединение таблицы Auto с таблицей CarBody с помощью внешнего ключа body. Для отображения надбавки за год авто, следует выполнить соединение таблицы Auto с таблицей YearFee с помошью внешнего ключа year_fee.
Для отображения списка клиентов следует выбрать поля s_name, f_name, m_name, address, phone из таблицы Client, а также поля name и value из таблицы Discount. Выполнить соединение таблицы Client с таблицей Discount с помощью внешнего ключа discount.
Для отображения списка заказов за определенный период необходимо прочитать записи из таблицы Contract и выполнить ее соединение с таблицами Client и Auto по внешним ключам client и auto соответственно. Полученный список необходимо отфильтровать по условию, в котором поле start_date больше или равно первого параметра и в то же время поле end_date меньше или равно второго параметра. Запрос должен выводить полное имя клиента (созданное объединением полей s_name, f_name и m.name), название автомобиля (объединение полей brand и model), номер автомобиля, дата начала аренды, дата окончания аренды.
Для отображения списка незавершенных заказов необходимо прочитать записи из таблицы Contract и выполнить ее соединение с таблицами Client и Auto по внешним ключам client и auto соответственно. Полученный список необходимо отфильтровать по условию, в котором поле end_date равно NULL.
Документация на пользовательские интерфейсы
Интерфейс пользователя включает в себя набор окон, с помощью которых пользователь может решить задачу просмотра записей таблиц БД, а также их добавления, изменения и удаления. Также интерфейс обеспечивает отображение отчетов базы данных.
Информационная система должна удовлетворять следующим функциональным требованиям:
пользователь должен иметь возможность просмотра списка таблиц базы данных;
пользователь должен иметь возможность просмотра содержимого заданной таблицы БД;
интерфейс должен предоставлять возможность добавления новых записей в таблицу;
интерфейс должен предоставлять возможность удаления заданной записи из таблицы;
информационная система должна предоставлять возможность отображать отчет об активных заказов (заказах, в которых не установлена дата возврата);
информационная система должна предоставлять возможность отображать отчет о клиентах компании.
Далее опишем интерфейс информационной системы в контексте данных требований.
Интерфейс информационной системы разработан с помощью языка программирования Python и фреймворка Django. Для реализации базы данных использовалась СУБД MySQL.
После запуска информационной системы пользователь должен перейти в веб-браузере по адресу «127.0.0.1:8000», чтобы попасть на главную
страницу. Главная страница отображает список таблиц базы данных (рисунок 5).
Рисунок 5 - Отображение списка таблиц базы данных
При нажатии на кнопку с названием определенной таблицы БД, пользователь переходит на страницу отображения записей таблицы. Записи сущности базы данных отображаются в табличном виде, причем последний столбец каждой строки содержит кнопки «Изменить» и «Удалить», которые позволяют изменить значения соответствующей записи или удалить ее.
Последняя строка таблицы повторяет поля сущности, но содержит элементы ввода данных. При заполнении этих полей и нажатии кнопки
«Добавить», создаются новые записи.
В качестве примера добавим три тестовые записи в таблицу carbody (рисунок 6).
Рисунок 6 - Добавление тестовых записей в таблицу carbody
Продемонстрируем удаление записи из таблицы carbody, на примере записи с id=14 (test2). Для этого в соответствующей строке нажмем
«Удалить». Страница автоматически обновится и отобразит измененную сущность (рисунок 7).
Рисунок 7 - Удаление тестовой записи из таблицы carbody
Для перехода на страницу отчетов следует ввести в адресной строке браузера «127.0.0.1:8000/report». Страница отчетов содержит выпадающий список, в котором можно выбрать нужный отчет и нажать кнопку «Показать». После этого в таблице ниже отобразится содержимое отчета.
На рисунке 8 показан отчет о незавершенных заказах.
Рисунок 8 - Отчет о незавершенных заказах
Отчет о клиентах показан на рисунке 9.
Рисунок 9 - Отчет о клиентах
Таким образом, показано выполнение всех заявленных функциональных тестов.
Реализация транзакций средствами выбранной СУБД
Описание реализованных в СУБД транзакций представлено в таблице
Таблица 1. Описание реализованных в СУБД MySQL транзакций
Далее покажем исходный код скриптов для организации каждой из транзакций и результате их выполнения в СУБД MySQL.
Скрипт и результат выполнения процедуры GetCars показаны на рисунках 10 и 11.
Рисунок 10 - Скрипт создания процедуры GetCars
Рисунок 11 - Результат выполнения процедуры GetCars
Скрипт и результат выполнения процедуры GetCarsByModels показаны на рисунках 12 и 13.
Рисунок 12 - Скрипт создания процедуры GetCarsByModels
Рисунок 13 - Результат выполнения процедуры GetCarsByModels
Скрипт и результат выполнения процедуры GetCarsByBrand показаны на рисунках 14 и 15.
Рисунок 14 - Скрипт создания процедуры GetCarsByBrand
Рисунок 15 - Результат выполнения процедуры GetCarsByBrand
Скрипт и результат выполнения представления clients_info показаны на рисунках 16 и 17.
Рисунок 16 - Скрипт создания представления clients_info
Рисунок 17 - Результат вызова представления clients_info
Скрипт и результат выполнения процедуры GetOrdersInDate показаны на рисунках 18 и 19.
Рисунок 18 - Скрипт создания процедуры GetOrdersInDate
Рисунок 19 - Результат выполнения процедуры GetOrdersInDate
Скрипт и результат выполнения процедуры GetCars показаны на рисунках 20 и 21.
Рисунок 20 - Скрипт создания представления active_orders
Рисунок 21 - Результат выполнения представления active_orders
Скрипт и результат выполнения процедуры AddClient показаны на рисунках 22 и 23.
Рисунок 22 - Скрипт создания процедуры AddClient
Рисунок 23 - Результат выполнения процедуры AddClient
Скрипт и результат выполнения процедуры UpdateClient показаны на рисунках 24 и 25.
Рисунок 24 - Скрипт создания процедуры UpdateClient
Рисунок 25 - Результат выполнения процедуры UpdateClient
Скрипт и результат выполнения процедуры AddCar показаны на рисунках 26 и 27.
Рисунок 26 - Скрипт создания процедуры AddCar
Рисунок 27 - Результат выполнения процедуры AddCar
Скрипт и результат выполнения процедуры AddContract показаны на рисунках 28 и 29.
Рисунок 28 - Скрипт создания процедуры AddContract
Рисунок 29 - Результат выполнения процедуры AddContract
Анализ транзакций на этапе физического проектирования
Целью данного анализа является определение функциональных характеристик транзакций, которые будут выполняться в базе данных, и выявление наиболее важных из них. Чтобы гарантировать, что разработанный физический дизайн базы данных соответствует требуемому уровню производительности, нам необходимо собрать как можно больше информации о транзакциях, которые будут выполняться в базе данных. Нам понадобятся как качественные, так и количественные характеристики. Для каждой транзакции необходимо знать:
ожидаемую частоту выполнения транзакции;
отношения и атрибуты, к которым транзакция должна будет получить доступ, а также тип доступа (R – извлечение, I – вставка);
ограничения на допустимое время выполнения транзакции.
Во многих случаях просто нецелесообразно анализировать все транзакции, поэтому мы должны выбрать самые «важные». Возвращаясь к диаграмме, используемой для анализа транзакций на этапе логического проектирования (см. рисунок 3.1), нам необходимо определить, какие отношения используются наиболее интенсивно во время выполнения транзакции. Для этого мы должны подсчитать количество входящих стрелок для каждой сущности. Например, в нашем случае результат будет следующим:
Таблица 2. Таблица количества вхождений для каждой сущности
Поскольку в нашем примере анализировалось лишь небольшое количество транзакций, количество входящих стрелок для всех сущностей примерно одинаково. Однако обычно 2–3 сущности имеют значительно больше входящих стрелок, чем остальные. На этапе физического проектирования имеет смысл анализировать только те транзакции, которые подразумевают доступ к отношениям с большим количеством входящих стрелок. В нашем случае это сущности Client, Auto и особенно Contract, через которые проходят все заявленные транзакции в нашем примере.
Далее необходимо указать ожидаемое количество строк в отношениях, а также среднюю и максимальную кардинальность каждого отношения. Например, мы ожидаем около 500 клиентов, до 200 автомобилей и более 1000 контрактов в год.
При анализе каждой транзакции важно не только знать среднее и максимальное количество вызовов в час, но и иметь информацию о днях недели и часах суток, когда транзакция обычно выполняется, включая данные о времени пиковой нагрузки. Например, частота определенных транзакций может оставаться на постоянном уровне большую часть времени, но все равно показывать четкий пик в конце месяца из-за подготовки отчетов. Другие транзакции могут выполняться только по будням с 9:00 до 18:00.
Когда поток транзакций требует частого доступа к определенным отношениям, выбранные для них стратегии выполнения становятся весьма значимыми. Если эти транзакции независимы друг от друга, риск проблем с производительностью уменьшается. Однако, если их планы выполнения конфликтуют, потенциальные проблемы можно частично решить, внимательно изучив транзакции и найдя способы их изменения для повышения производительности. В нашем случае нам нужно сосредоточиться на транзакциях, проходящих через таблицы Client, Auto и Contract.
Результаты анализа представлены в таблице 3.
Таблица 3. Результаты анализа транзакций