Du har muligvis lejet en bil på din sidste ferie. Du reserverede din bil online og hentede den derefter fra dens udpegede placering efter at have betalt alle de tidligere aftalte gebyrer. Når du var færdig, returnerede du den til bureauet og betalte måske nogle ekstra gebyrer. Har du nogensinde tænkt på systemet, der får alle disse ting til at ske? I denne artikel vil vi se på en datamodel for et biludlejningssystem.
Hvorfor bygge endnu en billejedatamodel?
Jeg ønsker at designe en datamodel af et fuldt funktionelt system for et internationalt biludlejningsfirma. Virksomheden holder køretøjer til leje i forskellige segmenter (mini, økonomi, mellemklasse, SUV, fragt og limousine). Det driver sine aktiviteter fra forskellige byer på tværs af flere lande. Virksomheden giver deres kunder mulighed for at leje en bil fra ét sted (afhentningssted) og aflevere den et andet sted (afleveringssted).
Lad os på dette tidspunkt henvise til en tidligere artikel, der forklarer en simpel biludlejningsfirmamodel. Denne model henvender sig til alle de grundlæggende tjenester, der tilbydes af et biludlejningsfirma.
Inden vi tilføjer nye funktioner, vil jeg gerne inkorporere nogle mindre ændringer i denne model, nemlig:
- Tilføjelse af
city
som en kolonne ilocation
bord, og fjernelse af bybordet helt. -
Tilføjelse af en ekstra kolonne,
zip
(som i postnummer eller postnummer) pålocation
bord. Dette system vil identificere et afhentnings-/afleveringssted ved dets postnummer. Der er mange lande, hvor postnummer er et alfanumerisk tal, så jeg vil beholde denne kolonne som en varchar-kolonne. -
Tilføjer
driving license issue date
tilcustomer
bord. Der er nogle lande, hvor den maksimale hastighedsgrænse afhænger af, hvornår kørekortet blev udstedt til føreren. - Omdøbning af
category
tabel tilcar_category
, som beskriver dens indhold mere præcist. - Lagring af en kundes flyoplysninger, hvis afhentningsstedet er i nærheden af en lufthavn. Dette gør det muligt for systemet at foretage passende ændringer af kundens reservationsanmodning i tilfælde af flyforsinkelser eller aflysninger. For at gøre dette tilføjer jeg en anden tabel kaldet
flight_detail
og tilslut den tilreservation
tabel.
Tilføjelse af kundefakturaoplysninger
Til fakturering skal vi opbevare en lejeværdi for hver lagervare, inklusive biler og udstyr. Lejeprisen tildeles hver kategori, fordi reservationsprocessen omhandler kategorier frem for individuelle biler.
Lad mig tilføje rental_value
i car_category
og equipment_category
tabeller.
På lignende linjer skal der være nogle omkostninger forbundet med forsikring. Denne pris fastsættes af forsikringsselskabet. Indtil videre vil jeg tilføje en kolonne mere, pris, i insurance
tabel.
Til fakturering opretter jeg en separat tabel til at gemme alle fakturadetaljer. På denne måde kan de samme detaljer nemt hentes, når det er nødvendigt. Da beregningen af disse værdier er en smule vanskelig, vil jeg ikke gentage dem igen og igen for en faktura. Jeg tilføjer én tabel, nemlig rental_invoice
, der primært er forbundet med rental
bord.
rental_invoice
tabel indeholder følgende kolonner:
id
– den primære nøgle i denne tabel.rental_id
– den primære nøgle tilrental
bord. Jeg vil tilføje en unik begrænsning i denne kolonne:Der kan kun være én post for hver leje.car_rent
– Denne kolonne angiver lejeomkostningerne for det lejede køretøj.-
Denne pris kan bestemmes ved hjælp af følgende 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
– Denne kolonne viser det beløb, der skal opkræves for eventuelt udstyr, der er udlejet til kunden-
De samlede omkostninger kan bestemmes ved hjælp af følgende 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
– Denne kolonne er for kundens samlede forsikringsomkostninger. Dette kan bestemmes ved at bruge følgende 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
ogVAT
– Som deres navne antyder, gemmer disse kolonner værdier for gældende serviceafgift og moms.-
total_amount_payable
– Denne kolonne vil indeholde værdien af det samlede fakturabeløb. Dette ville være summen af følgende kolonner:total_amount_payable =car_rent + equipment_rent_total + insurance_cost_total
-
waiver_amount
ognet_amount_payable
– Disse kolonner gemmer værdier for frafaldsbeløb (hvis nogen) og det nettobeløb, der skal betales.waiver_amount
er, hvor meget der frafaldes af den samlede faktura. Det bruges ofte, når et udlejningsfirma tilbyder rabat til kunder. Formlen til bestemmelse afnet_amount_payable
ser sådan ud:net_amount_payable =total_amount_payable – waiver_amount
Mobilbeholdning – For et biludlejningsfirma er dets beholdning altid mobilt, fordi det flytter fra et sted til et andet. Hvis du har lagt mærke til et afkrydsningsfelt, der siger 'vender tilbage til en anden placering?', når du reserverer en bil online, har du set den i aktion. Systemet behandler din anmodning en smule anderledes, hvis returneringsstedet IKKE er det samme som afhentningsstedet. Systemet holder altid styr på sin beholdning, når og når den udlejes og returneres.
For eksempel lejer en kunde en bil fra Chicago, bekræfter, at afleveringsstedet vil være anderledes, og kører til sin destination i Saint Louis. Det er klart, at han afleverer bilen på virksomhedens Saint Louis-lokation. I dette tilfælde, så snart han kører bilen fra Chicago-lokationen, er denne del af inventaret ikke længere bundet til det kontor. Bilen vil blive registreret igen, denne gang på Saint Louis-kontoret, så snart han er færdig med den.
For at inkorporere denne mekanisme vil jeg tilføje en kolonne, nemlig current_location_id
, i car
tabellen samt equipment
bord. Denne kolonne indeholder kun de gyldige id'er for lokationer fra location
tabel.
Så med ovenstående eksempel er bilens oprindelige placering Chicago; den vil blive opdateret, efter kunden returnerer bilen til destinationskontoret.
Opsætning af brændstofindstillinger
De fleste biludlejningsfirmaer tilbyder følgende typer brændstofmuligheder:- Forskud på brændstofservice – kunden betaler for en fuld tank brændstof på forhånd, og returnerer bilen med tom tank.
- Brændstofservicegebyr – kunden får bilen med fuld tank brændstof, men betaler for det baseret på brændstofforbrug.
- Brændstofselvbetjening – kunden modtager bilen med fuld tank brændstof og returnerer bilen med fuld tank. Dette er den mest accepterede mulighed af de tre.
Her er vi ikke bekymrede for, hvilken mulighed kunden vælger. Det, vi ønsker, er at registrere deres valg, mens vi behandler lejeanmodningen.
For at imødekomme dette behov tilføjer jeg én tabel, fuel_option
, der gemmer alle mulige muligheder for tankning af bilen. Der skal være en-til-en kortlægning mellem en lejeanmodning og fuel_option
, da kunden bliver bedt om at vælge en på tidspunktet for booking af lejen.
Den endelige billejedatamodel
På mange områder skifter biludlejningsfirmaer mod at bruge en nøglefri, selvbetjent lejeoplevelse for deres kunder. De ønsker ikke at få deres kunder til at vente ved en skranke bare for at færdiggøre papirarbejde og hente bilnøgler. Kan vores nuværende datamodel imødekomme sådanne krav? Hvilke ændringer er nødvendige i vores datamodel for at få det til at ske?
Har du nogen tanker om vores billejedatamodel? Lad os starte en diskussion! Du er velkommen til at dele dit input i kommentarfeltet.