Pesquisas mostram que os carros permanecem estacionados por 95% de sua vida útil, sugerindo que os sistemas de gerenciamento de estacionamentos devem ser inteligentes, eficientes e robustos. Neste artigo, construiremos um modelo de dados para esse sistema.
Introdução
Antes de começarmos a construir nosso modelo de dados, devemos primeiro entender como os estacionamentos são estruturados e como funcionam. Vamos dar uma breve olhada nessas duas áreas principais.
-
Como os estacionamentos são estruturados?
Um estacionamento típico consiste em um ou mais blocos que são subdivididos em andares. Cada andar contém várias alas que ajudam os motoristas a se orientar e lembrar de suas vagas de estacionamento. Eles geralmente são rotulados com letras, como “A”, “B”, “C” e assim por diante. Um piso geralmente tem um limite de altura que restringe a entrada de determinados veículos no estacionamento. Além disso, um andar contém várias vagas de estacionamento numeradas exclusivamente. Algumas dessas vagas são reservadas para pessoas com deficiência; outros podem ser reservados por visitantes regulares a um certo custo.
-
Como funcionam os estacionamentos?
Para entender como os estacionamentos funcionam, precisamos saber mais sobre os tipos de pessoas que visitam os estacionamentos. Os clientes que entram nos estacionamentos pertencem a um dos seguintes grupos:
- Um cliente regular que comprou um passe quinzenal, mensal ou anual.
- Um cliente pré-pago que reservou um slot remotamente (por telefone ou on-line).
- Um cliente que não tem um passe nem reservou uma vaga remotamente. Um slot será atribuído a esse cliente com base na disponibilidade.
Os clientes regulares geralmente recebem cartões/adesivos para colocar em algum lugar visível em seu painel ou pára-brisa, para que o gerenciamento do estacionamento possa determinar facilmente que os clientes não violam nenhuma regra de estacionamento. Ao contrário dos visitantes ocasionais, os clientes regulares nunca recebem guias de estacionamento diariamente. Um estacionamento normalmente reserva um quarteirão ou andar inteiro para seus visitantes regulares para garantir que sempre tenham lugares para estacionar. Os clientes regulares também podem reservar vagas para si mesmos para que possam estacionar seus veículos nas mesmas vagas designadas todos os dias, mas isso normalmente custa mais.
Aqueles que fazem reservas de estacionamento remoto normalmente só podem usar seus slots designados por uma janela de tempo limitada de algumas horas, após o qual os slots são liberados. Ao entrar no estacionamento, esses visitantes devem estacionar em suas vagas reservadas. Uma multa é cobrada para os clientes que não saem do estacionamento após o término de suas janelas de tempo, mas os clientes certamente podem sair antes que suas reservas expirem. Alguns estacionamentos têm uma janela de tempo mínima fixa (por exemplo, o cliente pode ter que reservar uma vaga por três horas, mesmo que só vá ficar fora por uma hora).
Os clientes walk-in recebem talões de estacionamento quando entram em um estacionamento. Uma vaga de estacionamento é então atribuída ao cliente à medida que o boleto é gerado, com base nas preferências especificadas por ele. O processo de reserva aqui é essencialmente o mesmo para os clientes pré-pagos. No entanto, uma reserva walk-in depende inteiramente da disponibilidade. Um slot pode custar mais do que se você reservar um lugar com antecedência, especialmente se houver disponibilidade limitada e alta demanda.
Modelo de dados
Com esses requisitos em mente, vamos em frente e criar nosso modelo de dados. Desta vez, trabalharemos com três seções principais:
- Estacionamento
- Cliente
- Reserva de estacionamento
Vamos dar uma olhada mais de perto em cada uma dessas áreas do nosso modelo de dados.
Seção 1:Estacionamento
A seção Estacionamento não apenas captura todas as informações importantes sobre o estacionamento em si, mas também simplifica a maneira como a menor unidade do estacionamento (uma vaga) pode ser gerenciada pela empresa. Algumas colunas de tabela foram adicionadas com o único propósito de tornar as reservas e operações de estacionamento mais eficientes em seções posteriores.
De acordo com a estrutura do estacionamento que discutimos na introdução, criamos as tabelas a seguir para capturar todos os detalhes que precisaremos.
parking_lot
– armazena informações básicas sobre um estacionamento. As colunas desta tabela são:
id
– a chave primária para esta tabela. Ele atribui um número exclusivo a cada estacionamento.number_of_blocks
– rastreia o número de blocos em um estacionamento.is_slot_available
– indica se o estacionamento tem vagas disponíveis no momento.address
– armazena o endereço completo de um estacionamento.zip
– armazena o CEP de um estacionamento, permitindo que os clientes pesquisem mais facilmente os estacionamentos disponíveis em uma determinada área, simplesmente consultando o CEP desejado.is_reentry_allowed
– significa se um cliente pode sair do estacionamento e entrar novamente com a mesma vaga. Observe que muitos estacionamentos normalmente não permitem que os clientes façam isso. Nesses estacionamentos, você deve comprar um novo boleto toda vez que entrar novamente em um determinado dia.operating_company_name
– armazena o nome da empresa que opera o estacionamento.is_valet_parking_available
– indica se o estacionamento oferece serviços de manobrista.
block
– um estacionamento é dividido em um ou mais blocos. Esta tabela armazena informações sobre cada bloco de um estacionamento. As colunas desta tabela são:– um estacionamento é dividido em um ou mais blocos. Esta tabela armazena informações sobre cada bloco de um estacionamento. As colunas desta tabela são:id
– a chave primária para esta tabela.parking_lot_id
– a coluna referenciada doparking_lot
tabela que identifica o estacionamento ao qual o bloco pertence.block_code
– armazena o código associado a este bloco. Os blocos geralmente recebem códigos de identificação exclusivos, como "A", "B", "C", "11", "22", "33" e assim por diante.number_of_floors
– armazena o número de andares neste bloco. O número "1" indica que este é um bloco térreo sem andares.is_block_full
– indica se o bloco está cheio no momento.
floor
– em estacionamentos de vários níveis, os blocos podem ter mais de um andar. No entanto, esta tabela também pode ser referenciada por blocos ao nível do solo. As colunas desta tabela são:id
– a chave primária para esta tabela.block_id
– identifica o bloco ao qual um andar pertence.floor_number
– representa o número de um andar (onde 1 =nível do solo).max_height_in_inch
– em um estacionamento de vários níveis, cada andar tem uma restrição de altura. Esta coluna armazena a altura máxima permitida para veículos em um piso.number_of_wings
– um andar é dividido em alas, que ajudam os clientes a lembrar onde estacionaram. Esta coluna armazena o número de alas que existem em um piso.number_of_slots
– armazena o número de slots que existem em um andar.is_covered
– identifica se um piso está coberto. O último andar de um estacionamento de vários níveis ou de um estacionamento térreo nunca será coberto.is_accessible
– indica se o piso é de fácil acesso, especialmente para deficientes. Se um lote de vários níveis tiver um elevador operacional, cada um de seus andares será considerado acessível.is_floor_full
– indica se um andar está totalmente ocupado.is_reserved_reg_cust
– indica se um andar é estritamente reservado para clientes regulares.
parking_slot
– esta tabela armazena todas as informações sobre as vagas de estacionamento de um estacionamento. As colunas desta tabela são:id
– chave primária para esta tabela.floor_id
– identifica o andar ao qual um slot pertence.slot_number
– armazena o identificador exclusivo do slot em um andar específico.wing_code
– identifica a asa na qual um slot está localizado.
Seção 2:Clientes
Seguindo em frente, agora começaremos a detalhar todas as informações relevantes sobre os clientes. Observe que os estacionamentos não se preocupam em capturar e armazenar informações pessoais como nomes, endereços, etc., pois podem acessar seus portais locais do Detran a qualquer momento para obter tais informações, se necessário.
customer
– armazena todos os detalhes relevantes sobre todos os tipos de clientes que podem visitar o estacionamento (regular, único e pré-pago). As colunas desta tabela são:
id
– identificador exclusivo para o cliente.vehicle_number
– armazena o número da placa do veículo de um cliente.registration_date
– armazena a data em que o veículo foi registrado pela primeira vez no estacionamento.is_regular_customer
– indica se um cliente tem passe regular. Se a coluna armazena um valor true, deve existir uma entrada válida noregular_pass
tabela. Quando um passe expira e o cliente ainda não o renova, o valor nesta coluna é atualizado para falso.contact_number
– armazena o número de contato de um cliente. Como algumas pessoas relutam em compartilhar seus números de contato com estacionamentos, mantivemos essa coluna anulável.
regular_pass
– armazena informações sobre passes regulares que são emitidos para os clientes. As colunas desta tabela são:id
– chave primária para esta tabela.customer_id
– uma coluna referenciada da tabela de clientes.purchase_date
– armazena a data em que o passe foi comprado.start_date
– armazena a data em que o passe será considerado válido, que pode não ser necessariamente a data da compra, pois alguns clientes compram passes com antecedência.duration_in_days
– armazena o número de dias para os quais um passe é válido. Um passe mensal geralmente permanece válido por 30 dias.cost
– armazena o custo, em moeda local, que um cliente deve pagar para comprar um passe.
Seção 3:Reservas
Nossa última seção é dedicada a detalhar o processo de reserva de vagas de estacionamento. Ao fazer uma reserva, um cliente normalmente deve fornecer alguns detalhes, como a data e hora prevista de chegada, a quantidade de tempo em que gostaria de reservar a vaga e assim por diante. Discutimos as duas tabelas principais desta seção abaixo.
parking_slot_reservation
– mantém os detalhes da reserva. As colunas desta tabela são:
id
– atribui um número de referência único a um pedido de reserva individual.customer_id
– referência ao identificador do cliente que está fazendo esta reserva.start_timestamp
– armazena a data e hora previstas de chegada do cliente.duration_in_minutes
– armazena a duração para a qual a reserva foi feita.booking_date
– armazena a data em que a reserva foi feita.parking_slot_id
– coluna interna que atribui uma vaga de estacionamento a um cliente assim que sua solicitação for capturada e o pagamento efetuado.
parking_slip
– armazena informações sobre os horários de entrada e saída do cliente, bem como quaisquer taxas relevantes. Criamos esta tabela para estacionamentos que permitem várias entradas e saídas sob a mesma reserva. As colunas desta tabela são:id
– a chave primária para esta tabela.parking_slot_reservation_id
– coluna referenciada que identifica a solicitação de reserva associada.actual_entry_time
– armazena a data e hora de chegada do cliente.actual_exit_time
– armazena a data e hora de partida (saída) do cliente.basic_cost
– armazena o custo básico da reserva.penalty
– armazena um valor de 0 por padrão. Se um cliente atrasar sua saída, uma multa será aplicada e o valor nesta coluna será atualizado.total_cost
– esta coluna apenas adiciona os valores dobasic_cost
e colunas de penalidade.is_paid
– a reentrada geralmente é permitida apenas quando um cliente pagou sua taxa de estacionamento. Esta coluna indica se este pagamento foi feito.
Conclusão
Neste artigo, apresentamos uma visão geral de um modelo de dados para um sistema de gerenciamento de estacionamento. Existem muitos aplicativos que ajudam os usuários a encontrar vagas de estacionamento extraindo, processando e compilando dados (como disponibilidade e custos) para estacionamentos em uma determinada vizinhança. Isso é especialmente útil para pessoas que visitam grandes cidades como Nova York, Los Angeles e outras, onde encontrar um estacionamento pode ser um pesadelo se você não planejar sua visita com cuidado. Esses aplicativos contam com modelos de dados bem projetados e APIs de bancos de dados para recuperar essas informações.
Em nosso próximo artigo, transformaremos nosso modelo de dados atual em uma solução para um sistema de disponibilidade de estacionamento em tempo real. Sinta-se à vontade para postar seus pensamentos, comentários e recomendações na seção de comentários abaixo.