Може да сте наели кола на последната си ваканция. Резервирахте колата си онлайн и след това я взехте от определеното й място, след като сте платили всички предварително договорени такси. След като приключите, вие го върнахте на агенцията и може би сте платили някои допълнителни такси. Мислили ли сте някога за системата, която кара всички тези неща да се случват? В тази статия ще разгледаме модел на данни за система за коли под наем.
Защо да създадете друг модел на данни за коли под наем?
Искам да проектирам модел на данни на напълно функционална система за международна компания за коли под наем. Компанията поддържа автомобили под наем в различни сегменти (мини, икономични, средни, SUV, карго и лимузини). Оперира операциите си от различни градове в множество държави. Компанията позволява на своите клиенти да наемат кола от едно място (место за вземане) и да я оставят на друго място (место за връщане).
В този момент нека се обърнем към по-ранна статия, която обяснява прост модел на компания за коли под наем. Този модел обслужва всички основни услуги, предлагани от компания за коли под наем.
Преди да добавим нови функции, бих искал да включа някои малки промени в този модел, а именно:
- Добавяне на
city
като колона вlocation
маса и премахване на градската маса като цяло. -
Добавяне на една допълнителна колона,
zip
(както в пощенски код или пощенски код), вlocation
маса. Тази система ще идентифицира място за вземане/спускане по неговия пощенски код. Има много държави, в които пощенският код е буквено-цифров номер, така че ще запазя тази колона като колона с varchar. -
Добавяне на
driving license issue date
наcustomer
маса. Има някои държави, в които максималната скорост зависи от това кога е издадена книжката на водача. - Преименуване на
category
таблица къмcar_category
, което описва съдържанието му по-точно. - Съхраняване на информация за полета на клиента, ако мястото за вземане е близо до летище. Това позволява на системата да прави подходящи промени в заявката за резервация на клиента в случай на закъснение или отмяна на полет. За да направя това, добавям друга таблица, наречена
flight_detail
и го свържете сreservation
маса.
Добавяне на информация за фактурите на клиента
За фактуриране трябва да съхраняваме наемна стойност за всеки артикул от инвентара, включително автомобили и оборудване. Цената за наем се определя за всяка категория, тъй като процесът на резервация се занимава с категории, а не с отделни автомобили.
Нека добавя rental_value
в car_category
и equipment_category
маси.
По подобен начин трябва да има някои разходи, свързани със застраховката. Тази цена се определя от застрахователната компания. Засега ще добавя още една колона, цена, в insurance
таблица.
За фактуриране създавам отделна таблица, в която да съхранявам всички данни за фактурата. По този начин същите тези подробности могат лесно да бъдат извлечени, когато е необходимо. Тъй като изчисляването на тези стойности е малко сложно, няма да ги повтарям отново и отново за фактура. Ще добавя една таблица, а именно rental_invoice
, което е основно свързано с rental
маса.
rental_invoice
таблицата съдържа следните колони:
id
– първичният ключ на тази таблица.rental_id
– първичният ключ наrental
маса. Ще добавя едно уникално ограничение към тази колона:може да има само един запис за всеки наем.car_rent
– Тази колона показва разходите за наем на наетото превозно средство.-
Тази цена може да се определи с помощта на следния 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
– Тази колона показва сумата за таксуване за всяко оборудване, отдадено под наем на клиента-
Общата цена може да се определи с помощта на следния 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
– Тази колона е за общата цена на застраховката на клиента. Това може да се определи с помощта на следния 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
иVAT
– Както подсказват имената им, тези колони съхраняват стойности за приложимия данък за услуги и ДДС.-
total_amount_payable
– Тази колона ще съдържа стойността на общата сума на фактурата. Това ще бъде сборът от следните колони:total_amount_payable =car_rent + equipment_rent_total + insurance_cost_total
-
waiver_amount
иnet_amount_payable
– Тези колони съхраняват стойности за сумите за освобождаване (ако има такива) и нетната сума, дължима за плащане.waiver_amount
е колко ще бъде отменено от общата фактура. Обикновено се използва, когато компания за отдаване под наем предлага отстъпка на клиентите. Формулата за определяне наnet_amount_payable
изглежда така:net_amount_payable =total_amount_payable – сума за отказ
Мобилен инвентар – За компания за коли под наем, нейният инвентар е винаги мобилен, защото се движи от едно място на друго. Ако сте забелязали квадратче за отметка „връщане на друго място?“, когато резервирате кола онлайн, сте го виждали в действие. Системата третира вашата заявка малко по-различно, ако мястото на връщане НЕ е същото като мястото за получаване. Системата винаги следи инвентара си, когато и когато се отдава под наем и връща.
Например, един клиент наема кола от Чикаго, потвърждава, че мястото на връщане ще бъде различно и кара до местоназначението си в Сейнт Луис. Очевидно той ще остави колата на мястото на компанията в Сейнт Луис. В този случай, веднага щом той кара колата от местоположението в Чикаго, тази част от инвентара вече не е обвързана с този офис. Колата ще бъде регистрирана отново, този път в офиса на Сейнт Луис, веднага щом приключи с нея.
За да включа този механизъм, ще добавя една колона, а именно current_location_id
, в car
маса, както и equipment
маса. Тази колона съдържа само валидните идентификатори на местоположения от location
таблица.
И така, с горния пример, първоначалното местоположение на колата е Чикаго; той ще бъде актуализиран, след като клиентът върне автомобила в офиса на местоназначението.
Настройване на опции за зареждане с гориво
Повечето компании за коли под наем предлагат следните видове опции за зареждане:- Предварително обслужване на гориво – клиентът заплаща предварително пълен резервоар гориво и връща автомобила с празен резервоар.
- Такса за обслужване на гориво – клиентът получава автомобила с пълен резервоар гориво, но го плаща на база разход на гориво.
- Самообслужване на гориво – клиентът получава автомобила с пълен резервоар и връща автомобила с пълен резервоар. Това е най-широко приетата опция от трите.
Тук ние не се притесняваме коя опция избира клиентът. Това, което искаме, е да регистрираме техния избор, докато обработваме заявката за наем.
За да отговоря на тази нужда, ще добавя една таблица, fuel_option
, който съхранява всички възможни опции за зареждане на автомобила. Трябва да има съпоставяне едно към едно между заявка за наем и fuel_option
, тъй като клиентът е помолен да избере един в момента на резервацията на наема.
Окончателният модел на данни за коли под наем
В много области компаниите за коли под наем се насочват към използване на безключово изживяване при наемане на самообслужване за своите клиенти. Те не искат да карат клиентите си да чакат на гише само за да попълнят документи и да вземат ключовете за колата. Може ли настоящият ни модел на данни да се погрижи за такива изисквания? Какви промени са необходими в нашия модел на данни, за да се случи това?
Имате ли някакви мисли относно нашия модел данни за коли под наем? Да започнем дискусия! Чувствайте се свободни да споделите своя принос в секцията за коментари.