Database
 sql >> Base de Dados >  >> RDS >> Database

Toque e estacione:um modelo de dados do aplicativo de estacionamento


Vários aplicativos prometem tornar sua busca por estacionamento indolor. Vamos examinar esse tipo de aplicativo usando nossos óculos de modelagem de dados. Como é o modelo subjacente?

Em um artigo anterior, explicamos como um estacionamento é estruturado e como um modelo de dados pode ser projetado para gerenciá-lo. Neste artigo, estamos examinando o modelo de dados de um aplicativo de estacionamento. Você conhece esses aplicativos:eles listam opções de estacionamento nas proximidades, informam os preços e permitem que você reserve ou reserve uma vaga ou compre um passe de estacionamento.

Este aplicativo torna sua busca por estacionamento relativamente indolor. Eu diria que o fator mais importante na escolha de um lugar de estacionamento é o preço. Uma caminhada de cinco minutos que economiza alguns dólares sempre vale a pena. Dito isso, vamos colocar nossos óculos de modelagem de dados e dar uma olhada de perto no mundo dos aplicativos de estacionamento.

O que devemos saber sobre estacionamentos e aplicativos de estacionamento?


Os aplicativos de estacionamento são bastante simples:podemos esperar funções para rastrear a disponibilidade e o preço das vagas de estacionamento em tempo real, reservar essas vagas e pagar as taxas.

Além da localização, que é relativamente fácil para um modelador de dados manipular, o principal fator para estacionamentos é o preço. A estratégia de precificação de vagas de estacionamento é bastante direta e alguns métodos ou regras são praticamente universais:
  • Os estacionamentos costumam ter preços diferentes para horários diferentes. Um dia é geralmente dividido em três partes:manhã (6h às 11h), meio-dia (11h às 17h) e noite (17h às 22h).
  • Noites e manhãs geralmente têm preços mais altos, pois mais carros provavelmente precisarão de vaga durante esse horário.
  • Os preços também podem variar de acordo com os dias da semana. Por exemplo, um estacionamento próximo ao centro da cidade cobrará mais no fim de semana (sábado e domingo) porque é quando mais pessoas o visitam.
  • Na maioria das vezes, os lotes usam seus preços padrão. No entanto, há dias em que eles podem cobrar mais - por exemplo, estacionamentos próximos a estádios de beisebol podem cobrar mais quando há um jogo ou evento no estádio.
  • Os estacionamentos próximos a centros de transporte (aeroportos, estações ferroviárias e pontos de ônibus) podem permitir estacionamento 24 horas por dia ou por semana. Eles provavelmente terão uma tarifa especial para estacionamento de longo prazo.
  • Alguns estacionamentos emitem passes mensais a um custo fixo. Os titulares de passes mensais pagam o valor fixo todo mês em vez de pagar uma taxa diária.

O modelo de dados





Como você pode ver, existem três áreas temáticas:
  1. “Estacionamento”
  2. “Cliente”
  3. “Reserva de estacionamento”

Vamos pegar a área de assunto mais importante primeiro – aquela que lida com estacionamentos e seus preços.

Estacionamento



Esta área de assunto gira em torno do parking_lot tabela, que armazena detalhes sobre cada estacionamento em nosso sistema. Esta tabela é detalhadamente explicada em nosso artigo anterior sobre um modelo de dados de gerenciamento de estacionamento. No entanto, reiteraremos algumas colunas importantes aqui:

  • zip – Um código postal; isso desempenha um papel importante na função de pesquisa.
  • is_slot_available – Atualizado pelos operadores do estacionamento e indica se o espaço está disponível no momento.
  • is_reentry_allowed – Se um cliente pode estacionar novamente no estacionamento depois de deixá-lo. Se a reentrada não for permitida, o cliente que retornar terá que comprar outro espaço.
  • is_valet_parking_available – O estacionamento com manobrista custa extra, mas as pessoas geralmente preferem – especialmente quando estão em um encontro. 😉
  • operational_in_night – Se o estacionamento está aberto à noite. Essa informação se torna muito importante quando seu carro está estacionado próximo a um aeroporto e seu voo chega à meia-noite!
  • minimum_hr_pay – A taxa mínima para estacionar seu carro em um lote. Por exemplo, alguns lotes têm um mínimo de três horas, o que significa que você paga por três horas, mesmo que esteja estacionado por apenas 30 minutos.
  • is_monthly_pass_allowed –Se um lote oferece passes mensais.

Já discutimos os fatores que determinam os preços dos estacionamentos. Agora vamos ver como vamos lidar com os preços em nosso modelo. Usaremos o parking_pricing tabela para manter um registro dos preços regulares e da pricing_exception tabela para registrar quaisquer exceções. Ambas as tabelas têm uma estrutura semelhante e as colunas são autoexplicativas. As únicas diferenças são:
  1. O parking_pricing tabela tem uma coluna (day_of_week ) que armazena o dia da semana relevante para um preço. A pricing_exception tabela tem uma calendar_date coluna que contém a data real em que o preço especial era aplicável.
  2. Quando o aplicativo mostra preços, a pricing_exception tabela tem precedência sobre o parking_pricing tabela. Portanto, se a tarifa normal de hoje for US$ 5 por hora, mas houver uma taxa especial em vigor para US$ 7, o aplicativo mostrará US$ 7 por hora.

A tabela final nesta área de assunto é offers . Ele mantém registros de cupons de desconto e seus detalhes associados. Explicamos o modelo de dados por trás de ofertas, promoções e descontos em um artigo anterior. Esta tabela é baseada na mesma teoria, e todas as colunas devem ser autoexplicativas.

Cliente



Quando pensamos em um aplicativo de estacionamento, geralmente pensamos nesses três elementos:

  • Clientes – Isso inclui um ID de cliente exclusivo e detalhes básicos sobre os usuários do aplicativo, como nome e número de telefone. Além disso, seria bom ter o endereço de cobrança.
  • Veículos – Uma pessoa pode ter vários carros, então devemos ter a capacidade de um relacionamento um-para-muitos entre um usuário de aplicativo e seus veículos. Obviamente, precisaríamos de uma maneira de identificar os veículos, por exemplo, pelo número da licença.
  • Formas de pagamento – Como este aplicativo permite que os clientes reservem uma vaga de estacionamento e paguem por ela, precisamos de uma maneira de armazenar os métodos de pagamento. Mais uma vez, deve haver uma maneira de ter vários métodos de pagamento por usuário.

Este modelo possui uma tabela para cada uma dessas entidades. O customer_id atributo é referenciado no vehicle e payment_method tabelas; ele liga os usuários a veículos e métodos de pagamento.

Reserva de estacionamento



Esta área de assunto contém apenas duas tabelas. Das duas, a tabela “parking_one_time_reservation” armazena os detalhes da reserva. Algumas de suas colunas são autoexplicativas; os outros são:

  • start_timestamp – A data e hora de início do período de reserva.
  • pay_for_min_hr – Possui um 'N' se a reserva for para um número específico de horas (por exemplo, das 9h às 12h). Caso contrário, este atributo terá um 'Y'.
  • booking_for_hr – O número de horas de uma reserva. Este é um campo anulável; ele terá um valor somente quando pay_for_min_hr é definido como 'N'. No exemplo acima, seria definido como "3" para as três horas que decorrem entre 9h e meio-dia.
  • basic_parking_cost – O custo básico do estacionamento, em moeda local.
  • offer_code – Um código de cupom, se houver. Como a aplicação de um código de oferta é opcional e está sujeita à disponibilidade, esta coluna é anulável.
  • net_cost – O valor real que os clientes pagam no checkout (quando saem do lote).
  • is_paid – Se as taxas de estacionamento foram pagas. Isso se torna uma coluna importante quando a reentrada é permitida na mesma vaga de estacionamento. Nesses casos, os pagamentos geralmente são liquidados no primeiro check-out (ou seja, na primeira vez que o carro sai do estacionamento).

O parking_monthly_pass tabela registra informações sobre todos os passes mensais emitidos aos clientes por meio deste aplicativo. Os passes mensais podem ser adquiridos a qualquer momento, mesmo para datas futuras. Portanto, temos duas colunas separadas, purchase_date e start_date , que permitem que os usuários do aplicativo comprem passes válidos no futuro. As demais colunas são autoexplicativas.

O que mais podemos adicionar ao modelo de dados do aplicativo de estacionamento?


Os estacionamentos modernos estão equipados com todos os tipos de tecnologias, como leitores de placas, sensores, sistemas automatizados de controle de acesso ao estacionamento e parquímetros inteligentes. Esses sistemas avançados tornam os estacionamentos mais fáceis de operar e mais fáceis de usar para os motoristas.

Que mudanças adicionais esse modelo de dados precisa para dar suporte a estacionamentos totalmente equipados? Por favor, conte-nos seus pensamentos na seção de comentários.