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 nolocation
table e removendo completamente a tabela de cidades. -
Adicionando uma coluna adicional,zip
(como no CEP ou código postal), nolocation
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.
-
Adicionandodriving license issue date
para ocustomer
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 paracar_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 dorental
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
eVAT
– 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
enet_amount_payable
– Essas colunas armazenam valores para valores de isenção (se houver) e o valor líquido devido para pagamento. Owaiver_amount
é quanto será dispensado da fatura total. É comumente usado quando uma locadora oferece um desconto aos clientes. A fórmula para determinarnet_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:- 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.
- 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.
- 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.