Database
 sql >> Base de données >  >> RDS >> Database

Louer des voitures est aussi simple que conduire :un modèle de données pour une société de location de voitures

Vous avez peut-être loué une voiture lors de vos dernières vacances. Vous avez réservé votre voiture en ligne, puis vous l'avez récupérée à son emplacement désigné après avoir payé tous les frais préalablement convenus. Une fois que vous avez terminé, vous l'avez retourné à l'agence et vous avez peut-être payé des frais supplémentaires. Avez-vous déjà pensé au système qui rend toutes ces choses possibles ? Dans cet article, nous examinerons un modèle de données pour un système de location de voitures.

Pourquoi créer un autre modèle de données de location de voitures ?

Je souhaite concevoir un modèle de données d'un système entièrement fonctionnel pour une société internationale de location de voitures. La société conserve des véhicules à louer dans divers segments (mini, économique, intermédiaire, SUV, cargo et limousine). Elle exerce ses activités à partir de différentes villes dans plusieurs pays. L'entreprise permet à ses clients de louer une voiture à un endroit (lieu de prise en charge) et de la restituer à un autre endroit (lieu de dépôt).

À ce stade, référons-nous à un article précédent qui explique un modèle simple de société de location de voitures. Ce modèle couvre tous les services fondamentaux offerts par une société de location de voitures.




Avant d'ajouter de nouvelles fonctions, j'aimerais incorporer quelques modifications mineures dans ce modèle, à savoir :

  • Ajout de city sous forme de colonne dans l'location table, et supprimer complètement la table city.
  • Ajout d'une colonne supplémentaire, zip (comme dans le code postal ou le code postal), dans le location table. Ce système identifiera un lieu de prise en charge/dépose par son code postal. Il existe de nombreux pays où le code postal est un nombre alphanumérique, je vais donc conserver cette colonne en tant que colonne varchar.

  • Ajout de la driving license issue date au customer table. Dans certains pays, la limite de vitesse maximale dépend de la date à laquelle le permis a été délivré au conducteur.

  • Renommer la category tableau à car_category , qui décrit plus précisément son contenu.
  • Stocker les informations de vol d'un client si le lieu de prise en charge se trouve à proximité d'un aéroport. Cela permet au système d'apporter les modifications appropriées à la demande de réservation du client en cas de retard ou d'annulation de vol. Pour ce faire, j'ajoute une autre table appelée flight_detail et connectez-le à la reservation tableau.

Ajouter des informations sur la facture client

Pour la facturation, nous devons stocker une valeur locative pour chaque article d'inventaire, y compris les voitures et l'équipement. Le coût de la location est attribué à chaque catégorie, car le processus de réservation traite des catégories plutôt que des voitures individuelles.

Laissez-moi ajouter rental_value dans la car_category et equipment_category les tables.

Dans le même ordre d'idées, il doit y avoir des frais associés à l'assurance. Ce coût est déterminé par la compagnie d'assurance. Pour l'instant, je vais ajouter une colonne supplémentaire, coût, dans le insurance tableau.

Pour la facturation, je crée une table séparée pour stocker tous les détails de la facture. De cette façon, ces mêmes détails peuvent facilement être récupérés en cas de besoin. Comme le calcul de ces valeurs est un peu délicat, je ne les répéterai pas encore et encore pour une facture. Je vais ajouter un tableau, à savoir rental_invoice , qui est principalement lié à la rental table.

Le rental_invoice table contient les colonnes suivantes :

  • id – la clé primaire de cette table.
  • rental_id – la clé primaire du rental table. J'ajouterai une contrainte unique sur cette colonne :il ne peut y avoir qu'un seul enregistrement pour chaque location.
  • car_rent – Cette colonne indique les frais de location du véhicule loué.
  • Ce coût peut être déterminé à l'aide du SQL suivant :

    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 – Cette colonne indique le montant à facturer pour tout équipement loué au client
  • Le coût total peut être déterminé à l'aide du SQL suivant :

    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 – Cette colonne correspond au coût total de l'assurance du client. Cela peut être déterminé en utilisant le SQL suivant

    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 et VAT – Comme leur nom l'indique, ces colonnes stockent des valeurs pour la taxe de service et la TVA applicables.
  • total_amount_payable – Cette colonne contiendra la valeur du montant total de la facture. Ce serait la somme des colonnes suivantes :

    total_amount_payable =car_rent + equipment_rent_total + insurance_cost_total

  • waiver_amount et net_amount_payable – Ces colonnes stockent les valeurs des montants de renonciation (le cas échéant) et le montant net dû pour le paiement. Le waiver_amount est le montant qui sera supprimé de la facture totale. Il est couramment utilisé lorsqu'une société de location offre une remise aux clients. La formule pour déterminer net_amount_payable ressemble à ceci :

    net_amount_payable =total_amount_payable – waiver_amount

Inventaire mobile – Pour une société de location de voitures, son inventaire est toujours mobile car il se déplace d'un endroit à un autre. Si vous avez remarqué une case à cocher indiquant "retour à un autre endroit ?" lorsque vous réservez une voiture en ligne, vous l'avez vue en action. Le système traite votre demande un peu différemment si le lieu de retour n'est PAS le même que le lieu de prise en charge. Le système garde toujours une trace de son inventaire au fur et à mesure de sa location et de sa restitution.

Par exemple, un client loue une voiture à Chicago, confirme que le lieu de restitution sera différent et se rend à sa destination à Saint Louis. Évidemment, il déposera la voiture à l'emplacement de l'entreprise à Saint Louis. Dans ce cas, dès qu'il conduit la voiture depuis l'emplacement de Chicago, cette partie de l'inventaire n'est plus liée à ce bureau. La voiture sera immatriculée à nouveau, cette fois au bureau de Saint Louis, dès qu'il en aura fini avec elle.

Pour intégrer ce mécanisme, je vais ajouter une colonne, à savoir current_location_id , dans la car tableau ainsi que le equipment table. Cette colonne ne contient que les identifiants valides des emplacements de l'location tableau.

Ainsi, avec l'exemple ci-dessus, l'emplacement initial de la voiture est Chicago ; il sera mis à jour une fois que le client aura rendu la voiture au bureau de destination.

Configuration des options de ravitaillement

La plupart des sociétés de location de voitures proposent les types d'options de ravitaillement suivants :
  1. Avance sur le service de carburant – le client paie à l'avance un réservoir plein de carburant et restitue la voiture avec un réservoir vide.
  2. Frais de service de carburant – le client obtient la voiture avec un réservoir plein de carburant, mais le paie en fonction de la consommation de carburant.
  3. Carburant en libre-service – le client reçoit la voiture avec un réservoir plein de carburant et restitue la voiture avec un réservoir plein. Il s'agit de l'option la plus largement acceptée des trois.

Ici, nous ne nous soucions pas de l'option choisie par le client. Ce que nous voulons, c'est enregistrer leur choix lors du traitement de la demande de location.

Pour répondre à ce besoin, je vais ajouter une table, fuel_option , qui stocke toutes les options possibles pour alimenter la voiture. Il doit y avoir un mappage un à un entre une demande de location et le fuel_option , puisqu'il est demandé au client d'en sélectionner un au moment de la réservation de la location.

Le modèle de données final de location de voitures




Dans de nombreux domaines, les sociétés de location de voitures se tournent vers une expérience de location en libre-service sans clé pour leurs clients. Ils ne veulent pas faire attendre leurs clients au comptoir juste pour remplir des papiers et récupérer les clés de la voiture. Notre modèle de données actuel peut-il répondre à de telles exigences ? Quels changements sont nécessaires dans notre modèle de données pour que cela se produise ?

Avez-vous des idées sur notre modèle de données de location de voitures ? Lançons une discussion ! N'hésitez pas à partager votre contribution dans la section des commentaires.