sql >> Database >  >> RDS >> Database

Auto's verhuren is net zo eenvoudig als autorijden:een gegevensmodel voor een autoverhuurbedrijf

Misschien heb je tijdens je laatste vakantie een auto gehuurd. U reserveerde uw auto online en haalde deze vervolgens op van de aangewezen locatie nadat u alle eerder overeengekomen kosten had betaald. Toen je klaar was, stuurde je het terug naar het bureau en betaalde je misschien wat extra kosten. Heb je ooit nagedacht over het systeem dat al deze dingen mogelijk maakt? In dit artikel bekijken we een datamodel voor een autoverhuursysteem.

Waarom nog een datamodel voor autoverhuur bouwen?

Ik wil een datamodel ontwerpen van een volledig functioneel systeem voor een internationaal autoverhuurbedrijf. Het bedrijf verhuurt voertuigen in verschillende segmenten (mini, economy, intermediate, SUV, cargo en limousine). Het opereert zijn activiteiten vanuit verschillende steden in meerdere landen. Het bedrijf stelt hun klanten in staat om een ​​auto te huren op de ene locatie (ophaallocatie) en deze op een andere locatie in te leveren (inleverlocatie).

Laten we op dit punt verwijzen naar een eerder artikel waarin een eenvoudig model van een autoverhuurbedrijf wordt uitgelegd. Dit model is geschikt voor alle fundamentele diensten die worden aangeboden door een autoverhuurbedrijf.




Voordat we nieuwe functies toevoegen, wil ik enkele kleine wijzigingen in dit model opnemen, namelijk:

  • city toevoegen als een kolom in de location tafel, en de stadstabel helemaal verwijderen.
  • Een extra kolom toevoegen, zip (zoals in postcode of postcode), op de location tafel. Dit systeem identificeert een ophaal-/afleverlocatie aan de hand van de postcode. Er zijn veel landen waar de postcode een alfanumeriek nummer is, dus ik zal deze kolom als een varchar-kolom behouden.

  • Toevoegen driving license issue date aan de customer tafel. Er zijn enkele landen waar de maximumsnelheid afhangt van wanneer het rijbewijs aan de bestuurder is afgegeven.

  • De naam van de category tabel naar car_category , die de inhoud nauwkeuriger beschrijft.
  • De vluchtinformatie van een klant opslaan als de ophaallocatie zich in de buurt van een luchthaven bevindt. Hierdoor kan het systeem passende wijzigingen aanbrengen in het reserveringsverzoek van de klant in geval van vertragingen of annuleringen van vluchten. Om dit te doen, voeg ik een andere tabel toe genaamd flight_detail en verbind het met de reservation tafel.

Klantfactuurgegevens toevoegen

Voor facturering moeten we een huurwaarde opslaan voor elk inventarisitem, inclusief auto's en apparatuur. De huurkosten worden toegewezen aan elke categorie, omdat het reserveringsproces zich bezighoudt met categorieën in plaats van individuele auto's.

Laat me rental_value toevoegen in de car_category en equipment_category tafels.

Op vergelijkbare lijnen moeten er kosten verbonden zijn aan verzekeringen. Deze kosten worden bepaald door de verzekeringsmaatschappij. Voor nu voeg ik nog een kolom toe, kosten, in de insurance tafel.

Voor facturatie maak ik een aparte tabel aan om alle factuurgegevens op te slaan. Op deze manier kunnen dezelfde details gemakkelijk worden opgevraagd wanneer dat nodig is. Omdat het berekenen van deze waarden een beetje lastig is, zal ik ze niet steeds herhalen voor een factuur. Ik zal één tabel toevoegen, namelijk rental_invoice , dat voornamelijk verband houdt met de rental tafel.

De rental_invoice tabel bevat de volgende kolommen:

  • id – de primaire sleutel van deze tabel.
  • rental_id – de primaire sleutel van de rental tafel. Ik zal één unieke beperking aan deze kolom toevoegen:er kan slechts één record zijn voor elke verhuur.
  • car_rent – In deze kolom staan ​​de huurkosten voor het gehuurde voertuig.
  • Deze kost kan worden bepaald met behulp van de volgende 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 – Deze kolom toont het bedrag dat in rekening moet worden gebracht voor apparatuur die aan de klant wordt verhuurd
  • De totale kosten kunnen worden bepaald met behulp van de volgende 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 – Deze kolom is voor de totale verzekeringskosten van de klant. Dit kan worden bepaald met behulp van de volgende 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 en VAT – Zoals de naam doet vermoeden, slaan deze kolommen waarden op voor de toepasselijke servicebelasting en btw.
  • total_amount_payable – Deze kolom bevat de waarde van het totale factuurbedrag. Dit zou de som zijn van de volgende kolommen:

    total_amount_payable =car_rent + equipment_rent_total + insurance_cost_total

  • waiver_amount en net_amount_payable – In deze kolommen worden waarden opgeslagen voor ontheffingsbedragen (indien van toepassing) en het netto te betalen bedrag. Het waiver_amount is hoeveel zal worden kwijtgescholden van de totale factuur. Het wordt vaak gebruikt wanneer een verhuurbedrijf klanten korting biedt. De formule voor het bepalen van net_amount_payable ziet er zo uit:

    net_amount_payable =total_amount_payable – waiver_amount

Mobiele inventaris – Voor een autoverhuurbedrijf is zijn inventaris altijd mobiel omdat het van de ene locatie naar de andere gaat. Als je bij het online reserveren van een auto een selectievakje hebt opgemerkt met de tekst 'terugkeren naar een andere locatie?', heb je deze in actie gezien. Het systeem behandelt uw verzoek iets anders als de retourlocatie NIET hetzelfde is als de ophaallocatie. Het systeem houdt altijd de voorraad bij wanneer deze wordt verhuurd en geretourneerd.

Een klant huurt bijvoorbeeld een auto uit Chicago, bevestigt dat de inleverlocatie anders zal zijn en rijdt naar zijn bestemming in Saint Louis. Het is duidelijk dat hij de auto aflevert op de locatie van het bedrijf in Saint Louis. In dit geval, zodra hij met de auto vanaf de locatie in Chicago rijdt, is dit deel van de inventaris niet langer gebonden aan dat kantoor. De auto wordt opnieuw geregistreerd, dit keer bij het Saint Louis-kantoor, zodra hij ermee klaar is.

Om dit mechanisme op te nemen, zal ik één kolom toevoegen, namelijk current_location_id , in de car tafel en de equipment tafel. Deze kolom bevat alleen de geldige ID's van locaties van de location tafel.

Dus, met het bovenstaande voorbeeld, is de oorspronkelijke locatie van de auto Chicago; het wordt bijgewerkt nadat de klant de auto heeft teruggebracht naar het kantoor van bestemming.

Opties voor tanken instellen

De meeste autoverhuurbedrijven geven de volgende soorten tankopties:
  1. Vooruitgang brandstofservice – de klant betaalt vooraf voor een volle tank brandstof en levert de auto met een lege tank in.
  2. Brandstofservicekosten – de klant krijgt de auto met een volle tank brandstof, maar betaalt deze op basis van het brandstofverbruik.
  3. Zelfbediening voor brandstof – de klant ontvangt de auto met een volle tank brandstof en levert de auto met een volle tank in. Dit is de meest algemeen aanvaarde optie van de drie.

Het gaat ons hier niet om welke optie de klant kiest. Wat we willen, is hun keuze registreren tijdens het verwerken van de huuraanvraag.

Om aan deze behoefte te voldoen, zal ik één tabel toevoegen, fuel_option , die alle mogelijke opties voor het tanken van de auto opslaat. Er moet een-op-een-toewijzing zijn tussen een huurverzoek en de fuel_option , aangezien de klant wordt gevraagd om er een te selecteren op het moment van boeking van de huur.

Het definitieve gegevensmodel voor autoverhuur




In veel gebieden veranderen autoverhuurbedrijven in de richting van het gebruik van een sleutelloze, selfservice-huurervaring voor hun klanten. Ze willen hun klanten niet aan een balie laten wachten om papierwerk in te vullen en autosleutels op te halen. Kan ons huidige datamodel aan dergelijke eisen voldoen? Welke veranderingen zijn er nodig in ons datamodel om dit mogelijk te maken?

Heeft u een mening over ons datamodel voor autoverhuur? Laten we een discussie starten! Voel je vrij om je input te delen in het opmerkingengedeelte.


  1. Hoe vind ik de MySQL my.cnf-locatie

  2. Krijg bijgewerkte rij

  3. Cloud Database-opties vergelijken voor PostgreSQL

  4. django.db.utils.OperationalError Kon geen verbinding maken met de server