Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Preisregeldatenbankdesign für Hotelreservierungssystem

Ich habe tatsächlich an der Gestaltung und Implementierung eines Hotelreservierungssystems gearbeitet und kann auf der Grundlage meiner Erfahrung die folgenden Ratschläge geben.

Ich würde Ihre zweite Designoption empfehlen, bei der für jede einzelne Kombination aus Datum und Hotel ein Datensatz gespeichert wird. Der Grund dafür ist, dass, obwohl es Zeiträume geben wird, in denen die Rate eines Hotels über mehrere Tage gleich ist, dies wahrscheinlicher ist dass er sich je nach Verfügbarkeit im Laufe der Zeit ändert und anders wird (Hotels neigen dazu, den Zimmerpreis zu erhöhen, wenn die Verfügbarkeit sinkt).

Es gibt auch andere wichtige Informationen, die für einen bestimmten Tag spezifisch gespeichert werden müssen:

  1. Sie müssen die Hotelverfügbarkeit verwalten, d. h. am Datum x es gibt y Zimmer frei. Dies wird mit ziemlicher Sicherheit von Tag zu Tag variieren.
  2. Einige Hotels haben Sperrzeiten, in denen das Hotel für kurze Zeit (normalerweise an bestimmten Tagen) nicht verfügbar ist.
  3. Vorlaufzeit - einige Hotels erlauben nur die Buchung von Zimmern eine bestimmte Anzahl von Tagen im Voraus, diese kann zwischen Wochentagen und Wochenenden unterschiedlich sein.
  4. Mindestübernachtungen, wieder gespeicherte Daten nach individuellem Datum, das besagt, wenn Sie an diesem Tag ankommen, müssen Sie x bleiben Anzahl der Nächte (z. B. über ein Wochenende)

Betrachten Sie auch eine Person, die einen einwöchigen Aufenthalt bucht. Die Datenbankabfrage zur Rückgabe der Preise und Verfügbarkeit für jeden Tag dieses Aufenthalts ist viel präziser, wenn Sie einen Preisdatensatz für jedes Datum haben. Sie können einfach eine Abfrage durchführen, bei der das Zimmerpreisdatum ZWISCHEN dem Ankunfts- und dem Abreisedatum liegt, um einen Datensatz mit einem Datensatz pro Aufenthaltsdatum zurückzugeben.

Mir ist klar, dass Sie mit diesem Ansatz mehr Datensätze speichern werden, aber mit gut indizierten Tabellen ist die Leistung in Ordnung und die Verwaltung der Daten wird viel einfacher. Ihrem Kommentar nach zu urteilen, sprechen Sie nur in der Größenordnung von 18000 Datensätzen, was eine ziemlich kleine Menge ist (das System, an dem ich gearbeitet habe, hat mehrere Millionen und funktioniert gut).

Um die zusätzliche Datenverwaltung zu veranschaulichen, wenn Sie TUN Speichern Sie einen Datensatz pro Tag, stellen Sie sich vor, ein Hotel hat einen Preis von 100 USD und 20 verfügbare Zimmer für den ganzen Dezember:

Sie beginnen mit einem Datensatz:

1-Dec to 31st Dec Rate 100 Availability 20

Dann verkaufen Sie ein Zimmer am 10. Dezember.

Ihre Geschäftslogik muss nun drei Datensätze aus dem obigen erstellen:

1-Dec to 9th Dec Rate 100 Availability 20 10-Dec to 10th Dec Rate 100 Availability 19 11-Dec to 31st Dec Rate 100 Availability 20

Dann ändert sich der Kurs am 3. und 25. Dezember auf 110

Ihre Geschäftslogik muss die Daten nun erneut aufteilen:

1-Dec to 2-Dec Rate 100 Availability 20 3-Dec to 3-Dec Rate 110 Availability 20 4-Dec to 9-Dec Rate 100 Availability 20 10-Dec to 10-Dec Rate 100 Availability 19 11-Dec to 24-Dec Rate 100 Availability 20 25-Dec to 25-Dec Rate 110 Availability 20 26-Dec to 31-Dec Rate 100 Availability 20

Das ist mehr Geschäftslogik und mehr Overhead als das Speichern eines Datensatzes pro Datum.

Ich kann Ihnen garantieren, dass Ihr System am Ende ohnehin nur eine Zeile pro Datum haben wird, also können Sie es genauso gut von Anfang an so gestalten und die Vorteile einer einfacheren Datenverwaltung und schnelleren Datenbankabfragen nutzen.