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

Autos vermieten ist so einfach wie Fahren:Ein Datenmodell für eine Autovermietung

Möglicherweise haben Sie in Ihrem letzten Urlaub ein Auto gemietet. Sie haben Ihr Auto online reserviert und es dann am vorgesehenen Standort abgeholt, nachdem Sie alle zuvor vereinbarten Gebühren bezahlt haben. Sobald Sie fertig waren, haben Sie es an die Agentur zurückgegeben und möglicherweise einige zusätzliche Gebühren bezahlt. Haben Sie jemals über das System nachgedacht, das all diese Dinge möglich macht? In diesem Artikel sehen wir uns ein Datenmodell für ein Mietwagensystem an.

Warum ein weiteres Mietwagen-Datenmodell erstellen?

Ich möchte ein Datenmodell eines voll funktionsfähigen Systems für eine internationale Autovermietung entwerfen. Das Unternehmen hält Fahrzeuge in verschiedenen Segmenten (Mini, Economy, Intermediate, SUV, Cargo und Limousine) zur Miete bereit. Es betreibt seine Geschäfte von verschiedenen Städten in mehreren Ländern aus. Das Unternehmen ermöglicht seinen Kunden, ein Auto an einem Ort (Abholort) zu mieten und an einem anderen Ort (Rückgabeort) abzugeben.

Lassen Sie uns an dieser Stelle auf einen früheren Artikel verweisen, der ein einfaches Mietwagenmodell erklärt. Dieses Modell deckt alle grundlegenden Dienstleistungen ab, die von einer Autovermietung angeboten werden.




Bevor wir neue Funktionen hinzufügen, möchte ich einige kleinere Änderungen in dieses Modell einbauen, nämlich:

  • Hinzufügen von city als Spalte im location Tabelle und das vollständige Entfernen der Stadttabelle.
  • Hinzufügen einer zusätzlichen Spalte, zip (wie in Postleitzahl oder Postleitzahl) im location Tisch. Dieses System identifiziert einen Abhol-/Abgabeort anhand seiner Postleitzahl. Es gibt viele Länder, in denen die Postleitzahl eine alphanumerische Zahl ist, daher werde ich diese Spalte als Varchar-Spalte beibehalten.

  • Hinzufügen von driving license issue date an den customer Tisch. In einigen Ländern hängt die Höchstgeschwindigkeit davon ab, wann der Führerschein dem Fahrer ausgestellt wurde.

  • Umbenennen der category Tabelle zu car_category , die den Inhalt genauer beschreibt.
  • Speichern der Fluginformationen eines Kunden, wenn sich der Abholort in der Nähe eines Flughafens befindet. Dadurch kann das System bei Flugverspätungen oder -ausfällen entsprechende Änderungen an der Reservierungsanfrage des Kunden vornehmen. Dazu füge ich eine weitere Tabelle namens flight_detail und verbinden Sie es mit der reservation Tabelle.

Hinzufügen von Kundenrechnungsinformationen

Für die Rechnungsstellung müssen wir für jeden Inventargegenstand, einschließlich Autos und Ausrüstung, einen Mietwert hinterlegen. Die Mietkosten werden jeder Kategorie zugeordnet, da sich der Reservierungsprozess eher um Kategorien als um einzelne Autos handelt.

Lassen Sie mich rental_value hinzufügen in der car_category und equipment_category Tische.

In ähnlicher Weise müssen mit der Versicherung einige Kosten verbunden sein. Diese Kosten werden von der Krankenkasse festgelegt. Fürs Erste füge ich eine weitere Spalte, Kosten, in insurance Tabelle.

Für die Rechnungsstellung erstelle ich eine separate Tabelle, um alle Rechnungsdetails zu speichern. Auf diese Weise können dieselben Details bei Bedarf einfach abgerufen werden. Da die Berechnung dieser Werte etwas kniffelig ist, werde ich sie nicht immer wieder für eine Rechnung wiederholen. Ich füge eine Tabelle hinzu, nämlich rental_invoice , das ist in erster Linie mit der rental Tisch.

Die rental_invoice Tabelle enthält die folgenden Spalten:

  • id – der Primärschlüssel dieser Tabelle.
  • rental_id – der Primärschlüssel der rental Tisch. Ich werde dieser Spalte eine eindeutige Einschränkung hinzufügen:Es kann nur einen Datensatz für jede Anmietung geben.
  • car_rent – Diese Spalte kennzeichnet die Mietkosten für das gemietete Fahrzeug.
  • Diese Kosten können mit dem folgenden SQL ermittelt werden:

    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 – In dieser Spalte wird der Betrag angezeigt, der für an den Kunden vermietete Geräte zu berechnen ist
  • Die Gesamtkosten können mit dem folgenden SQL ermittelt werden:

    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 – Diese Spalte enthält die gesamten Versicherungskosten des Kunden. Dies kann mit dem folgenden SQL

    ermittelt werden

    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 und VAT – Wie der Name schon sagt, speichern diese Spalten Werte für die anwendbare Dienstleistungssteuer und Mehrwertsteuer.
  • total_amount_payable – Diese Spalte enthält den Wert des gesamten Rechnungsbetrags. Dies wäre die Summe der folgenden Spalten:

    total_amount_payable =car_rent + equipment_rent_total + Insurance_cost_total

  • waiver_amount und net_amount_payable – Diese Spalten speichern Werte für Verzichtsbeträge (sofern vorhanden) und den zur Zahlung fälligen Nettobetrag. Der waiver_amount wird von der Gesamtrechnung abgezogen. Es wird häufig verwendet, wenn ein Vermieter seinen Kunden einen Rabatt anbietet. Die Formel zur Bestimmung von net_amount_payable sieht so aus:

    net_amount_payable =total_amount_payable – waiver_amount

Mobiles Inventar – Bei einem Autovermieter ist sein Bestand immer mobil, da er von einem Standort zum anderen wechselt. Wenn Sie bei der Online-Reservierung eines Autos ein Kontrollkästchen mit der Aufschrift „Zurück an einen anderen Ort?“ bemerkt haben, haben Sie es in Aktion gesehen. Das System behandelt Ihre Anfrage etwas anders, wenn der Rückgabeort NICHT mit dem Abholort identisch ist. Das System behält immer den Überblick über seinen Bestand, wenn er vermietet und zurückgegeben wird.

Beispiel:Ein Kunde mietet ein Auto in Chicago, bestätigt, dass der Rückgabeort anders sein wird, und fährt zu seinem Ziel in Saint Louis. Natürlich wird er das Auto am Standort des Unternehmens in Saint Louis abgeben. Sobald er in diesem Fall mit dem Auto vom Standort Chicago fährt, ist dieser Teil des Inventars nicht mehr an dieses Büro gebunden. Sobald er damit fertig ist, wird das Auto erneut zugelassen, diesmal bei der Niederlassung in Saint Louis.

Um diesen Mechanismus zu integrieren, werde ich eine Spalte hinzufügen, nämlich current_location_id , im car Tisch sowie die equipment Tisch. Diese Spalte enthält nur die gültigen IDs von Standorten aus location Tabelle.

Im obigen Beispiel ist der ursprüngliche Standort des Autos also Chicago; sie wird aktualisiert, nachdem der Kunde das Auto an das Bestimmungsbüro zurückgibt.

Einrichten von Tankoptionen

Die meisten Autovermietungen bieten die folgenden Arten von Betankungsoptionen an:
  1. Fuel Service Advance – Der Kunde zahlt im Voraus für einen vollen Tank und gibt das Auto mit leerem Tank zurück.
  2. Tankservicegebühr – Der Kunde bekommt das Auto vollgetankt, zahlt aber nach Verbrauch.
  3. Kraftstoff-Selbstbedienung – Der Kunde erhält das Auto vollgetankt und gibt das Auto vollgetankt zurück. Dies ist die am weitesten akzeptierte Option der drei.

Dabei ist es uns egal, für welche Variante sich der Kunde entscheidet. Was wir möchten, ist ihre Wahl zu registrieren, während die Mietanfrage bearbeitet wird.

Um diesem Bedarf gerecht zu werden, füge ich eine Tabelle hinzu, fuel_option , das alle möglichen Optionen zum Betanken des Autos speichert. Zwischen einer Mietanfrage und der fuel_option , da der Kunde gebeten wird, zum Zeitpunkt der Buchung der Anmietung eine auszuwählen.

Das endgültige Mietwagen-Datenmodell




In vielen Bereichen gehen Autovermietungen dazu über, ihren Kunden ein schlüsselloses Self-Service-Mieterlebnis zu bieten. Sie wollen ihre Kunden nicht an einem Schalter warten lassen, nur um Papierkram zu erledigen und Autoschlüssel abzuholen. Kann unser aktuelles Datenmodell solchen Anforderungen gerecht werden? Welche Änderungen sind in unserem Datenmodell erforderlich, um dies zu erreichen?

Haben Sie irgendwelche Gedanken zu unserem Mietwagen-Datenmodell? Beginnen wir eine Diskussion! Fühlen Sie sich frei, Ihren Beitrag im Kommentarbereich zu teilen.