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

Alugar carros é tão simples quanto dirigir:um modelo de dados para uma locadora de carros


Você pode ter alugado um carro em suas últimas férias. Você reservou seu carro on-line e o pegou no local designado depois de pagar todas as cobranças acordadas anteriormente. Depois de terminar, você o devolveu à agência e talvez pagou algumas taxas adicionais. Você já pensou no sistema que faz todas essas coisas acontecerem? Neste artigo, veremos um modelo de dados para um sistema de aluguel de carros.

Por que construir outro modelo de dados de aluguel de carros?


Quero projetar um modelo de dados de um sistema totalmente funcional para uma locadora internacional de carros. A empresa mantém veículos para locação em diversos segmentos (mini, econômico, intermediário, SUV, carga e limusine). Opera suas operações em várias cidades em vários países. A empresa permite que seus clientes aluguem um carro em um local (local de retirada) e o devolvam em outro local (local de entrega).

Neste ponto, vamos nos referir a um artigo anterior que explica um modelo simples de empresa de aluguel de carros. Este modelo atende a todos os serviços fundamentais oferecidos por uma locadora de veículos.




Antes de adicionarmos novas funções, gostaria de incorporar algumas pequenas alterações neste modelo, a saber:
  • Adicionando city como uma coluna no location table e removendo completamente a tabela de cidades.

  • Adicionando uma coluna adicional, zip (como no CEP ou código postal), no location tabela. Este sistema identificará um local de coleta/devolução por seu CEP. Existem muitos países onde o CEP é um número alfanumérico, então manterei esta coluna como uma coluna varchar.



  • Adicionando driving license issue date para o customer tabela. Existem alguns países onde o limite máximo de velocidade depende de quando a licença foi emitida para o motorista.


  • Renomeando a category tabela para car_category , que descreve seu conteúdo com mais precisão.
  • Armazenar as informações de voo de um cliente se o local de embarque for próximo a um aeroporto. Isso permite que o sistema faça as alterações apropriadas na solicitação de reserva do cliente em caso de atrasos ou cancelamentos de voos. Para fazer isso, adiciono outra tabela chamada flight_detail e conecte-o à reservation tabela.

Adicionando informações da fatura do cliente


Para faturamento, precisamos armazenar um valor de aluguel para cada item do inventário, incluindo carros e equipamentos. O custo do aluguel é atribuído a cada categoria, pois o processo de reserva lida com categorias e não com carros individuais.

Deixe-me adicionar rental_value na car_category e equipment_category mesas.



Em linhas semelhantes, deve haver algum custo associado ao seguro. Este custo é determinado pela companhia de seguros. Por enquanto, adicionarei mais uma coluna, custo, no insurance tabela.

Para faturamento, crio uma tabela separada para armazenar todos os detalhes da fatura. Dessa forma, esses mesmos detalhes podem ser facilmente recuperados sempre que necessário. Como o cálculo desses valores é um pouco complicado, não os repetirei várias vezes para uma fatura. Adicionarei uma tabela, chamada rental_invoice , que está principalmente relacionado ao rental tabela.



A rental_invoice tabela contém as seguintes colunas:

  • id – a chave primária desta tabela.
  • rental_id – a chave primária do rental tabela. Adicionarei uma restrição exclusiva a esta coluna:só pode haver um registro para cada locação.
  • car_rent – Esta coluna significa os custos de aluguel do veículo alugado.

  • Esse custo pode ser determinado usando o seguinte SQL:

    select a.rental_value from car_category a, car b, rental c
    where  c.car_id = b.car_id and b.category_id = a.id
    and c.id = ;
    

  • equipment_rent_total – Esta coluna mostra o valor a ser cobrado por qualquer equipamento alugado ao cliente

  • O custo total pode ser determinado usando o seguinte SQL:

    select sum(a.rental_value) from equipment_category a, equipment b, car_equipment c, car d, rental e
    where  a.id = b.equipment_category_id and b.id = c.equipment_id
    and c.car_id = d.id and d.id = e.car_id 
    and e.id = ;
    


  • insurance_cost_total – Esta coluna é para o custo total do seguro do cliente. Isso pode ser determinado usando o seguinte SQL

    select sum(a.cost) from insurance a, rental_insurance b, rental c
    where a.id = b.insurance_id and b.rental_id = c.id 
    and c.id = ;
    

  • service_tax e VAT – Como seus nomes sugerem, essas colunas armazenam valores para imposto de serviço e IVA aplicáveis.

  • total_amount_payable – Esta coluna conterá o valor do valor total da fatura. Esta seria a soma das seguintes colunas:

    total_amount_payable =carro_rent + equipment_rent_total + seguro_cost_total


  • waiver_amount e net_amount_payable – Essas colunas armazenam valores para valores de isenção (se houver) e o valor líquido devido para pagamento. O waiver_amount é quanto será dispensado da fatura total. É comumente usado quando uma locadora oferece um desconto aos clientes. A fórmula para determinar net_amount_payable se parece com isso:

    net_amount_payable =total_amount_payable – dispenser_amount


Inventário para celular – Para uma locadora de carros, seu estoque é sempre móvel porque está se movendo de um local para outro. Se você notou uma caixa de seleção dizendo "voltando para um local diferente?" ao reservar um carro on-line, você o viu em ação. O sistema trata sua solicitação de maneira um pouco diferente se o local de retorno NÃO for o mesmo que o local de retirada. O sistema sempre mantém um controle de seu estoque à medida que é alugado e devolvido.

Por exemplo, um cliente aluga um carro em Chicago, confirma que o local de entrega será diferente e dirige até seu destino em Saint Louis. Obviamente, ele deixará o carro no local da empresa em Saint Louis. Nesse caso, assim que ele dirige o carro do local de Chicago, essa parte do estoque não está mais vinculada a esse escritório. O carro será registrado novamente, desta vez no escritório de Saint Louis, assim que ele terminar.

Para incorporar esse mecanismo, adicionarei uma coluna, chamada current_location_id , no car tabela, bem como o equipment tabela. Esta coluna contém apenas os IDs válidos de locais do location tabela.



Assim, com o exemplo acima, a localização inicial do carro é Chicago; ele será atualizado após o cliente devolver o carro ao escritório de destino.

Configurando opções de abastecimento

A maioria das empresas de aluguel de carros oferece os seguintes tipos de opções de abastecimento:
  1. Avanço do serviço de combustível – o cliente paga antecipadamente por um tanque cheio de combustível e devolve o carro com o tanque vazio.
  2. Taxa de serviço de combustível – o cliente recebe o carro com o tanque cheio, mas paga com base no consumo de combustível.
  3. Autoatendimento de combustível – o cliente recebe o carro com o tanque cheio e devolve o carro com o tanque cheio. Essa é a opção mais aceita das três.

Aqui, não estamos preocupados com qual opção o cliente escolhe. O que pretendemos é registar a sua escolha durante o processamento do pedido de aluguer.

Para atender a essa necessidade, adicionarei uma tabela, fuel_option , que armazena todas as opções possíveis para abastecer o carro. Deve haver um mapeamento individual entre uma solicitação de aluguel e a fuel_option , uma vez que o cliente é solicitado a selecionar um no momento da reserva do aluguel.


O modelo final de dados de aluguel de carros





Em muitas áreas, as empresas de aluguel de carros estão adotando uma experiência de aluguel de autoatendimento sem chave para seus clientes. Eles não querem que seus clientes esperem no balcão apenas para preencher a papelada e pegar as chaves do carro. Nosso modelo de dados atual pode atender a esses requisitos? Quais mudanças são necessárias em nosso modelo de dados para que isso aconteça?

Você tem alguma opinião sobre nosso modelo de dados de aluguel de carros? Vamos iniciar uma discussão! Sinta-se à vontade para compartilhar sua opinião na seção de comentários.