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 delocation
tafel, en de stadstabel helemaal verwijderen.-
Een extra kolom toevoegen,
zip
(zoals in postcode of postcode), op delocation
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 decustomer
tafel. Er zijn enkele landen waar de maximumsnelheid afhangt van wanneer het rijbewijs aan de bestuurder is afgegeven. - De naam van de
category
tabel naarcar_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 dereservation
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 derental
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 SQLselect 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
enVAT
– 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
ennet_amount_payable
– In deze kolommen worden waarden opgeslagen voor ontheffingsbedragen (indien van toepassing) en het netto te betalen bedrag. Hetwaiver_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 vannet_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:- Vooruitgang brandstofservice – de klant betaalt vooraf voor een volle tank brandstof en levert de auto met een lege tank in.
- Brandstofservicekosten – de klant krijgt de auto met een volle tank brandstof, maar betaalt deze op basis van het brandstofverbruik.
- 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.