2016-05-10 9 views
1

Ich arbeite derzeit an einem einfachen Buchungssystem und ich muss einige Bereiche auswählen und sie in einer MySQL-Datenbank speichern.MySql: Speichern von Datumsbereichen VS Speichern einzelner Tag

Das Problem Ich habe vor der Entscheidung, ob es besser ist, eine Reichweite zu speichern oder jeden Tag separat zu speichern.

Es wird rund 500 Eigenschaften, und jeder wird von 2 bis 5 Monate gebucht haben.

So wird der Client seine Eigenschaft einfügen und einige Daten auswählen, die nicht verfügbar sein werden. Das gleiche passiert, wenn jemand eine Immobilie bucht.

Ich dachte an eine separate Tabelle für nicht verfügbare Daten nur, wenn also eine Eigenschaft von 10 Mai bis 20 Mai gebucht wird, anstatt einen Datensatz (2016-06-10 => 2016-06-20) Ich habe 10 Datensätze, einen für jeden gebuchten Tag.

Ich denke, dass es einfacher ist, mit der Suche zwischen den Daten zu arbeiten, aber ich bin mir nicht sicher.

Ist die Leistung merklich schlechter?

Sollte ich die Bereiche oder einzelne Tage speichern?

Danke

Antwort

2

Ich würde Ihnen raten, dass alle „Events“ in einer Tabelle gehen und sie alle haben einen Anfang und Ende Datetime. Die Verwendung von Indizes für diese Felder wird natürlich empfohlen.

Die Gründe dafür sind, dass Sie bei der Suche nach Buchungen und verfügbaren Ereignissen nicht aus zwei verschiedenen Tabellen auswählen (oder sich ihnen anschließen). Das Speichern eines vollständigen Bereichs ist für den Code viel besser, da Sie die Überprüfungen innerhalb einer SQL-Abfrage problemlos durchführen können. Der gesamte php-Code für die Behandlung von Ereignissen funktioniert für beide als Standard. Wenn Sie nur einen Ereignistyp anders als den anderen speichern, finden Sie in Ihrem Code eine Menge "if's" und finden es schwieriger, SQL zu schreiben.

Ich betreibe derzeit viele Buchungssysteme und habe in diesem Bereich Fehler gemacht, daher weiß ich, dass dies ein guter Rat ist - und auch eine gute Frage.

+0

Vielen Dank für Ihre Eingabe. Mein Hauptproblem, denke ich, wird suchen. Wenn jemand zwei Daten auswählt, ist die Abfrage ziemlich umfangreich und komplex, um alle Eigenschaften zu prüfen, die innerhalb dieser Daten verfügbar sind, da für jede Eigenschaft mehrere Bereiche bereits belegt sind. –

+0

Ich verstehe und wieder das ist, warum ich beide in der gleichen Tabelle im gleichen Format empfehlen ... ja die Abfrage möglicherweise groß, aber es wird schneller und einfacher zu pflegen als die andere Option erwähnt. – Barry

+0

Ich werde für eine separate Tabelle mit Datumsbereichen gehen, danke nochmal. –

1

Das ist zu viel für einen Kommentar, so werde ich dies als eine Antwort hinterlassen

So der Primärschlüssel der Tabelle wäre die property_id und das Datum eines bestimmten Monats. Ich empfehle es nicht. Denn denken Sie an ein Szenario, wenn Sie diese Logik auf 5 oder 10 Jahre System anwenden, wird die Leistung schlechter sein. Sie erhalten etwa 30 * 12 * 1 = 360 Raws für 1 Jahr Implementieren Sie eine Logik, um die Dauer einer Buchung zu berechnen und diese dem Benutzer gegenüberzustellen.