Database
 sql >> Database >  >> RDS >> Database

Noleggiare un'auto è semplice come guidare:un modello di dati per una società di autonoleggio

Potresti aver noleggiato un'auto durante la tua ultima vacanza. Hai prenotato la tua auto online e poi l'hai ritirata nel luogo designato dopo aver pagato tutte le spese concordate in precedenza. Una volta finito, lo hai restituito all'agenzia e forse hai pagato alcune commissioni aggiuntive. Hai mai pensato al sistema che fa accadere tutte queste cose? In questo articolo esamineremo un modello di dati per un sistema di autonoleggio.

Perché creare un altro modello di dati di noleggio auto?

Voglio progettare un modello di dati di un sistema completamente funzionale per una società di autonoleggio internazionale. L'azienda mantiene veicoli da noleggiare in vari segmenti (mini, economy, intermedi, SUV, cargo e limousine). Gestisce le sue operazioni da varie città in più paesi. L'azienda consente ai propri clienti di noleggiare un'auto da un luogo (punto di ritiro) e riconsegnarlo in un altro luogo (luogo di riconsegna).

A questo punto, facciamo riferimento a un articolo precedente che spiega un semplice modello di società di autonoleggio. Questo modello soddisfa tutti i servizi fondamentali offerti da una società di autonoleggio.




Prima di aggiungere nuove funzioni, vorrei incorporare alcune modifiche minori in questo modello, vale a dire:

  • Aggiunta di city come colonna nella location tabella e rimuovendo del tutto la tabella della città.
  • Aggiunta di una colonna aggiuntiva, zip (come nel CAP o CAP), nella location tavolo. Questo sistema identificherà un luogo di ritiro/consegna tramite il suo codice postale. Ci sono molti paesi in cui il CAP è un numero alfanumerico, quindi manterrò questa colonna come una colonna varchar.

  • Aggiunta della driving license issue date al customer tavolo. Ci sono alcuni paesi in cui il limite di velocità massimo dipende da quando è stata rilasciata la patente al conducente.

  • Rinominare la category tabella a car_category , che ne descrive il contenuto in modo più preciso.
  • Memorizzare le informazioni sul volo di un cliente se il luogo di ritiro è vicino a un aeroporto. Ciò consente al sistema di apportare le modifiche appropriate alla richiesta di prenotazione del cliente in caso di ritardo o cancellazione del volo. Per fare ciò, aggiungo un'altra tabella chiamata flight_detail e collegalo alla reservation tabella.

Aggiunta delle informazioni sulla fattura del cliente

Per la fatturazione, dobbiamo memorizzare un valore di noleggio per ogni articolo di inventario, comprese le auto e le attrezzature. Il costo del noleggio viene assegnato a ciascuna categoria, perché il processo di prenotazione riguarda le categorie anziché le singole auto.

Fammi aggiungere rental_value nella car_category e equipment_category tavoli.

Su linee simili, ci devono essere dei costi associati all'assicurazione. Questo costo è determinato dalla compagnia di assicurazione. Per ora, aggiungo un'altra colonna, il costo, nella insurance tabella.

Per la fatturazione, creo una tabella separata per memorizzare tutti i dettagli della fattura. In questo modo, questi stessi dettagli possono essere facilmente recuperati quando necessario. Poiché il calcolo di questi valori è un po' complicato, non li ripeterò più e più volte per una fattura. Aggiungerò una tabella, ovvero rental_invoice , che è principalmente collegato al rental tavolo.

Il rental_invoice la tabella contiene le seguenti colonne:

  • id – la chiave primaria di questa tabella.
  • rental_id – la chiave primaria del rental tavolo. Aggiungerò un vincolo univoco su questa colonna:può esserci un solo record per ogni noleggio.
  • car_rent – Questa colonna indica i costi di noleggio per il veicolo noleggiato.
  • Questo costo può essere determinato utilizzando il seguente 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 – Questa colonna mostra l'importo da addebitare per qualsiasi attrezzatura noleggiata al cliente
  • Il costo totale può essere determinato utilizzando il seguente 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 – Questa colonna indica il costo totale dell'assicurazione del cliente. Questo può essere determinato utilizzando il seguente 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 e VAT – Come suggeriscono i loro nomi, queste colonne memorizzano i valori per l'imposta sui servizi e l'IVA applicabili.
  • total_amount_payable – Questa colonna conterrà il valore dell'importo totale della fattura. Questa sarebbe la somma delle seguenti colonne:

    total_amount_payable =auto_noleggio + equipment_rent_total + Insurance_cost_total

  • waiver_amount e net_amount_payable – Queste colonne memorizzano i valori per gli importi di rinuncia (se presenti) e l'importo netto dovuto per il pagamento. Il waiver_amount è quanto verrà trattenuto dalla fattura totale. È comunemente usato quando una società di noleggio offre uno sconto ai clienti. La formula per determinare net_amount_payable assomiglia a questo:

    net_amount_payable =total_amount_payable – waiver_amount

Inventario per cellulari – Per una società di autonoleggio, il suo inventario è sempre mobile perché si sposta da un luogo all'altro. Se hai notato una casella di controllo che dice "tornare in un luogo diverso?" quando prenoti un'auto online, l'hai visto in azione. Il sistema tratta la tua richiesta in modo leggermente diverso se il luogo di restituzione NON è lo stesso del luogo di ritiro. Il sistema tiene sempre traccia del suo inventario man mano che viene noleggiato e restituito.

Ad esempio, un cliente noleggia un'auto da Chicago, conferma che il luogo di riconsegna sarà diverso e si dirige verso la sua destinazione a Saint Louis. Ovviamente, lascerà l'auto presso la sede dell'azienda a Saint Louis. In questo caso, non appena guida l'auto dalla sede di Chicago, questa parte dell'inventario non è più vincolata a quell'ufficio. L'auto verrà immatricolata di nuovo, questa volta presso l'ufficio di Saint Louis, non appena avrà finito.

Per incorporare questo meccanismo, aggiungerò una colonna, ovvero current_location_id , nell'car tavolo e l'equipment tavolo. Questa colonna contiene solo gli ID validi delle località della location tabella.

Quindi, con l'esempio sopra, la posizione iniziale dell'auto è Chicago; verrà aggiornato dopo che il cliente ha riconsegnato l'auto all'ufficio di destinazione.

Impostazione delle opzioni di rifornimento

La maggior parte delle compagnie di autonoleggio offre i seguenti tipi di opzioni di rifornimento:
  1. Servizio carburante avanzato – il cliente paga in anticipo il pieno di carburante e restituisce l'auto con il serbatoio vuoto.
  2. Costo del servizio carburante – il cliente riceve l'auto con il pieno di carburante, ma la paga in base al consumo di carburante.
  3. Autoservizio carburante – il cliente riceve l'auto con il pieno di carburante e restituisce l'auto con il pieno. Questa è l'opzione più ampiamente accettata delle tre.

Qui, non ci interessa quale opzione sceglie il cliente. Quello che vogliamo è registrare la loro scelta durante l'elaborazione della richiesta di noleggio.

Per soddisfare questa esigenza, aggiungerò una tabella, fuel_option , che memorizza tutte le opzioni possibili per il rifornimento dell'auto. Deve esserci una mappatura uno a uno tra una richiesta di noleggio e il fuel_option , in quanto il cliente è pregato di selezionarne uno al momento della prenotazione del noleggio.

Il modello definitivo di dati sull'autonoleggio




In molte aree, le società di autonoleggio si stanno orientando verso l'utilizzo di un'esperienza di noleggio self-service senza chiavi per i propri clienti. Non vogliono far aspettare i loro clienti allo sportello solo per completare le scartoffie e ritirare le chiavi della macchina. Il nostro attuale modello di dati può soddisfare tali requisiti? Quali modifiche sono necessarie nel nostro modello di dati per realizzarlo?

Hai qualche idea sul nostro modello di dati di noleggio auto? Iniziamo una discussione! Sentiti libero di condividere il tuo contributo nella sezione commenti.