Система резервирования парковки автомобилей с Django

Одно из исследований показывает, что сегодня автомобили остаются припаркованными 95% своего срока службы. Предполагается, что система управления парковкой должна быть умной, эффективной и надежной. В этой статье мы обсудим такой дизайн базы данных системы с Django.

Подождите, прежде чем мы углубимся в дизайн системы, мы должны понять, как работают автомобильные парковки. Понимание предметной области бизнеса очень важно при разработке любой программной системы. Для нашей цели понимания мы должны рассмотреть две ключевые области.

1] Как устроены автомобильные парковки :

Типичная автостоянка состоит из одного или нескольких блоков, которые далее подразделяются на этажи. На каждом этаже есть несколько крыльев, которые помогают водителям ориентироваться и запоминать места для парковки. Обычно они обозначаются буквами, такими как «А», «В», «С» и так далее. Этаж обычно имеет ограничение по высоте, которое ограничивает въезд определенных транспортных средств на парковку. Кроме того, на этаже есть несколько парковочных мест с уникальными номерами. Некоторые из этих слотов зарезервированы для людей с ограниченными возможностями; другие могут быть зарезервированы постоянными посетителями за определенную плату.

2] Как работают парковки:

Клиенты, въезжающие на парковку, принадлежат к одной из следующих групп. Постоянный клиент, купивший проездной на две недели, месяц или год. Клиент с предоплатой, забронировавший место удаленно (по телефону или через Интернет). ни пропуска, ни забронированного слота удаленно. Слот будет назначен такому клиенту в зависимости от наличия.

Давайте начнем проектирование системы парковки автомобилей. У нас есть три приложения с именами. В этом посте мы рассмотрим только дизайн базы данных.

1]Много

2]Клиенты

3]Парковка

Много:

Приложение Lots содержит 4 таблицы базы данных: Lot, Block, Floor, Slot.

Файл моделей нашего лота выглядит так.

сейчас мы углубимся в модель лота.

number_of_blocks: будет храниться количество блоков в партии.

is_slot_available: сообщает, что на парковке в настоящее время есть свободные места.

адрес: полный адрес парковки.

код: специальный код, который покупатели лота могут легко идентифицировать.

is_reentry_allowed: клиент может повторно въехать с тем же пропуском на парковку.

operating_company_name: хранит название компании, управляющей парковкой.

is_valet_parking_allowed: парковка предлагает услуги парковщика.

Теперь посмотрим на блочную модель.

parking_lot:столбец из таблицы parking_lot, определяющий парковку, к которой принадлежит блок.
block_code : хранит код, связанный с этим блоком. Блокам обычно присваиваются уникальные идентификационные коды
number_of_floors:хранит количество этажей в этом блоке.
is_block_full:означает, заполнен ли блок в данный момент.

Теперь перейдем к модели пола.

блок: определяет блок, к которому принадлежит этаж.
номер_этажа: представляет номер этажа
max_height_in_inch: хранит максимально допустимую высоту для транспортных средств
number_of_wings: хранит количество крыльев, существующих на полу.
number_of_slots: хранит количество существует на полу.
is_covered: указывает, покрыт ли пол.
is_accessible: указывает, легко ли доступен пол
is_floor_full : указывает, полностью ли занят этаж.
is_reserved_reg_cust : указывает, зарезервирован ли этаж строго для постоянных клиентов.

Теперь последняя модель в нашем приложении лотов.

floor_id: определяет этаж, к которому принадлежит слот.
slot_number: хранит уникальный идентификатор слота на определенном этаже.

Теперь давайте перейдем к приложению для клиентов. Наше приложение для клиентов обычно содержит две модели: клиент и обычный проход, файл моделей выглядит так, как показано ниже.

узнать подробнее о моделях клиентов.

Клиент хранит все важные сведения обо всех типах клиентов, которые могут посещать парковку (обычных, разовых и предоплаченных). Столбцы для этой таблицы:

customer_name : хранит имя клиента
Vehicle_number : хранит номер транспортного средства
Registration_date : сохраняет дату, когда транспортное средство было впервые зарегистрировано на стоянке
is_regular_customer : указывает, есть ли у клиента обычный пропуск
contact_number : хранит контактный номер клиента

RegularPass хранит информацию об обычных проездных, выданных клиентам. Столбцы для этой таблицы:

customer_id: указанный столбец из таблицы клиентов.
purchase_date: хранит дату, когда был приобретен пропуск.
start_date: хранит дату, когда пропуск будет считаться действительным,
duration_in_days: хранит количество дней, в течение которых пропуск действителен.
стоимость: хранит стоимость в местной валюте, которую клиент должен заплатить за покупку пропуска.

Теперь, наконец, наша последняя резервация парковки приложения, файл моделей выглядит так, как показано ниже.

ParkingSlotReservation хранит сведения о бронировании. Столбцы для этой таблицы:

customer_id : ссылка на идентификатор клиента

start_timestamp : ожидаемая дата и время прибытия клиента.

duration_in_minutes : продолжительность, на которую было сделано резервирование.

booking_date: дата бронирования.

parking_slot_id: внутренний столбец, который назначает место для парковки клиенту после того, как его запрос получен и платеж был произведен.

ParkingSlip хранит информацию о времени входа и выхода клиента, а также о любых соответствующих сборах.

parking_slot_reservation_id: столбец, на который указывает ссылка, которая идентифицирует связанный запрос на резервирование.

entry_time : хранит дату и временную метку прибытия клиента.

exit_time : хранит дату отправления (выхода) клиента и отметку времени.

basic_cost: хранит базовую стоимость бронирования.

штраф : сохраняет значение 0 по умолчанию. Если клиент задержит выход, будет применен штраф, а значение в этом столбце будет обновлено.

total_cost: этот столбец просто суммирует значения столбцов basic_cost и штрафов.

is_paid: В этом столбце указано, был ли произведен данный платеж.

Вывод:

В этом посте мы обсудили только дизайн системы баз данных, функциональность и варианты использования здесь не обсуждаются.