Database
 sql >> база данни >  >> RDS >> Database

Отдаването на автомобили под наем е толкова просто, колкото и шофирането:Модел на данни за компания за коли под наем

Може да сте наели кола на последната си ваканция. Резервирахте колата си онлайн и след това я взехте от определеното й място, след като сте платили всички предварително договорени такси. След като приключите, вие го върнахте на агенцията и може би сте платили някои допълнителни такси. Мислили ли сте някога за системата, която кара всички тези неща да се случват? В тази статия ще разгледаме модел на данни за система за коли под наем.

Защо да създадете друг модел на данни за коли под наем?

Искам да проектирам модел на данни на напълно функционална система за международна компания за коли под наем. Компанията поддържа автомобили под наем в различни сегменти (мини, икономични, средни, 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 – Тази колона е за общата цена на застраховката на клиента. Това може да се определи с помощта на следния 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 и 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 таблица.

И така, с горния пример, първоначалното местоположение на колата е Чикаго; той ще бъде актуализиран, след като клиентът върне автомобила в офиса на местоназначението.

Настройване на опции за зареждане с гориво

Повечето компании за коли под наем предлагат следните видове опции за зареждане:
  1. Предварително обслужване на гориво – клиентът заплаща предварително пълен резервоар гориво и връща автомобила с празен резервоар.
  2. Такса за обслужване на гориво – клиентът получава автомобила с пълен резервоар гориво, но го плаща на база разход на гориво.
  3. Самообслужване на гориво – клиентът получава автомобила с пълен резервоар и връща автомобила с пълен резервоар. Това е най-широко приетата опция от трите.

Тук ние не се притесняваме коя опция избира клиентът. Това, което искаме, е да регистрираме техния избор, докато обработваме заявката за наем.

За да отговоря на тази нужда, ще добавя една таблица, fuel_option , който съхранява всички възможни опции за зареждане на автомобила. Трябва да има съпоставяне едно към едно между заявка за наем и fuel_option , тъй като клиентът е помолен да избере един в момента на резервацията на наема.

Окончателният модел на данни за коли под наем




В много области компаниите за коли под наем се насочват към използване на безключово изживяване при наемане на самообслужване за своите клиенти. Те не искат да карат клиентите си да чакат на гише само за да попълнят документи и да вземат ключовете за колата. Може ли настоящият ни модел на данни да се погрижи за такива изисквания? Какви промени са необходими в нашия модел на данни, за да се случи това?

Имате ли някакви мисли относно нашия модел данни за коли под наем? Да започнем дискусия! Чувствайте се свободни да споделите своя принос в секцията за коментари.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване и внедряване на множество версии на база данни чрез моментни снимки на схема

  2. RowGen v3 Автоматизира генерирането на тестови данни за база данни

  3. Свързване с Teradata в IRI Workbench

  4. Оценка на кардиналността:Комбиниране на статистика на плътността

  5. Salesforce SOQL от Java