Datenbank-design für eine Buchung Anwendung z.B. im hotel
Habe ich eine gebaut, aber ich bin überzeugt, es ist falsch.
Hatte ich eine Tabelle für Kundendaten, und eine andere Tabelle mit der jedes date zu bleiben (D. H. eine Woche Urlaub hätte sieben Datensätze).
Gibt es eine bessere Möglichkeit?
Ich code in PHP mit MySQL -
- Obwohl meine erste Reaktion war auch, dass dies Hausaufgaben, ich denke, es ist ein bisschen unfair. Es ist ein ziemlich allgemeiner Frage über einen bestimmten Typ von Datenbank-design.
- Fairer Punkt. Wenn ich falsch bin, dann werde ich es korrigieren gerne, ich bin in keiner Weise versucht, kritisch zu sein. Mein Instinkt ist, dass dies ist nicht ein Hobby app die so denken, es sieht aus wie ein Uni-übung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier gehen Sie
Fand ich es auf dieser Seite:
Eine Liste von kostenlosen Datenbank-Modelle.
WARNUNG: Derzeit (November '11), Google meldet, dass die Website enthält malware: http://safebrowsing.clients.google.com/safebrowsing/diagnostic?client=Firefox&hl=en-US&site=http://www.databaseanswers.org/data_models/hotels/hotel_reservations_popkin.htm
Arbeite ich in der Reisebranche gearbeitet haben und auf eine Reihe von verschiedenen PMS. Der Letzte, den ich entworfen hatte, die Zeilen-pro Nacht pro Person, Ansatz und es ist der beste Ansatz, den ich begegnet bin, noch.
Ziemlich Häufig in der Industrie gibt es insbesondere Informationen zur Verfügung, die jede Nacht des Aufenthalts. Zum Beispiel müssen Sie wissen, die rate für jede Nacht des Aufenthalts zum Zeitpunkt der Buchung vorgenommen wurde. Der Gast kann auch bewegen Raum über die Dauer Ihres Aufenthalts.
Leistung klug, es ist schneller zu tun, ein ist-gleich-lookup als eine Reihe in MySQL, so dass die startdate/enddate Ansatz wäre langsamer. Zu tun, eine Suche nach einem Datumsbereich tun ", wo das Datum in (Termine)".
Etwa die schema die ich benutzt habe ist:
Einige Fragen, die Sie sich stellen müssen:
Einige Dinge, die kann brechen und Ihr Modell. Dies kann nicht ein problem, sondern prüfen Sie mit Ihrem Kunden, um zu sehen, wenn Sie auftreten.
Wow, danke für all die Antworten.
Hatte ich dachte lange und hart über das schema, und ging mit einem Rekord=Nacht-Ansatz nach dem Versuch in die andere Richtung und haben Schwierigkeiten beim konvertieren zu html.
Ich verwendet, CodeIgniter, mit dem eingebauten Kalender-Klasse zum anzeigen der Buchungs-info. Die Prüfung, ob ein Termin verfügbar war leichter, auf diese Weise (zumindest nach dem Versuch), also ging ich mit ihm. Aber ich bin davon überzeugt, dass es nicht der beste Weg ist, weshalb ich die Frage gestellt habe.
Und vielen Dank für die DB-Antworten link auch.
Besten,
Mei
Was ist falsch mit, dass? Protokollierung jedes Datum, dass der Kunde den Aufenthalt ermöglicht, was ich mir vorstellen sind ziemlich standard-Berichte, wie zum Beispiel die Anzeige der Anzahl der gebuchten Zimmer an einem bestimmten Tag.
Die Antwort hängt stark von Ihren Anforderungen... Aber ich würde erwarten, dass nur die Speicherung eines Datensatzes mit start und stop Datum für Ihren Aufenthalt benötigt wird. Wenn Sie erklären, die Frage, können wir Ihnen mehr details.
Ein Tupel pro Tag ist ein bisschen übertrieben, denke ich. Ein paar Spalten auf ein "bleiben" - Tabelle ausreichen sollte.
Ist die Erstellung eines Datensatzes für jeden Tag eine person bleibt notwendig? Es sollte nur erforderlich sein, wenn jeder Tag bedeutend ist, sonst haben Sie einen Kunden/Gast Tabelle enthält die Kundendaten, Buchung-Tabelle zu enthalten, die Buchungen für die Gäste. Buchung Tabelle enthält Zimmer -, start-Datum, end-Datum, den Gast (oder Gäste), etc.
Wenn Sie brauchen, um aufzuzeichnen andere Dinge wie die Tätigkeiten bezahlt werden, oder von Mahlzeiten, fügen Sie Sie in anderen Tabellen wie nötig.
Eine Möglichkeit, reduzieren Sie die Anzahl der Einträge für jeden Aufenthalt ist, speichern Sie die Zeit-Rahmen-z.B. start-Datum und end-Datum. Ich muss wissen, die Operationen, die Sie für die Daten ausgeführt werden, um einen spezifischen Rat.
Generell, wenn Sie brauchen, um zu überprüfen, wie viele Kunden bleiben auf ein bestimmtes Datum sind, können Sie dies mit einer gespeicherten Prozedur.
Für einige bestimmten Operationen könnte Ihr design gut sein. Selbst wenn das der Fall ist würde ich halt noch ein "besucht" Tabelle verknüpfen eines Kunden zu einem einzigartigen Aufenthalt und ein "Tage-der-Besuch" zu Tisch, wo ich zur Lösung jedes einzelnen Kunden zu bleiben, um seine Tage.
Asaf.
Bist du Handel-off von der Größe der Datenbank mit Abfrage der Einfachheit (und wohl auch Leistung)
Dem aktuellen Modell gibt einfache Abfragen, wie seine ziemlich einfach, um eine Abfrage nach Anzahl der Gäste, die Plätze im Zimmer X Nacht auf n und so weiter, aber die Größe der Datenbank erhöhen ziemlich schnell.
Verschieben, um eine start/stop oder start/num Nächte-Modell wird für einige ... interessante Fragen bei Zeiten 🙂
So viel die Wahl ist zu tun, mit Ihrer SQL-skill-level 🙂
Ich interessiere mich nicht für das schema in der Abbildung. Es ist ziemlich hässlich.
Schema Abstrakte
Tabelle: Besuchen Sie
Besuch-Tabelle enthält eine Zeile für jede Nacht übernachteten in einem hotel.
Hinweis: Besuchen Sie enthält
Tabelle: Kunde
Tabelle: Bleiben
Des Aufenthalts Tabelle enthält eine Zeile, die beschreibt den gesamten Besuch. Es wird aktualisiert, jedes mal wenn Besuch ist udpated.
Hinweise
Einer web-app sind zwei Dinge: WÄHLEN Sie Aktionen und CRUD-Aktionen. Die meisten web-apps sind zu 99% WÄHLEN, und 1% CRUD. Normalisierung neigt zu helfen, CRUD-viel mehr als WÄHLEN. Vielleicht schauen Sie in meinem schema und Panik, aber es ist schnell. Sie wird zu tun haben eine kleine Menge zusätzliche Arbeit für alle CRUD-Aktivität, aber Ihr WÄHLT, wird es so viel schneller, weil alle von Ihr AUSWÄHLT, kann Treffer der Tabelle Bleiben.
Ich mag, wie Jeff Atwood sagt: "Normalisieren, bis es weh tut, denormalize, bis es funktioniert"
Für eine website verwendet, die von einem geschäftigen hotel-manager, wie gut es funktioniert, ist genauso wichtig wie, wie schnell es funktioniert.