Wahrscheinlich Overkill für Ihre Anwendung - aber:
Eine relativ einfache Methode zur Verbesserung Ihrer Suche auf Kosten eines komplizierteren Schreibvorgangs wäre die Änderung der Buchungstabelle in eine Verfügbarkeitstabelle.
Fügen Sie eine boolesche Spalte hinzu, um anzugeben, ob der Slot frei oder gebucht ist (oder geben Sie noch besser die ID des Kunden ein, der ihn gebucht hat, und verwenden Sie 0, wenn der Slot frei ist).
Beginnen Sie mit einem einzigen kostenlosen Slot, 1. Januar 2009 -> 31. Dezember 20??
Wenn Sie eine Buchung erhalten, teilen Sie den freien Slot in 3 (zwei Beilagen und ein Update), den gebuchten Slot und die zwei verfügbaren Slots auf.
Machen Sie so weiter und wenn der Zeitrahmen fragmentierter wird, wird der Buchungsprozess aus einem der folgenden bestehen:
- Jemanden einen ganzen 'verfügbaren Slot' zuweisen (eine Aktualisierung)
- Teilen eines 'verfügbaren Slots' in zwei (ein Update und ein Insert)
- Teilen eines Slots in 3 (wie oben), wenn jemand den mittleren Teil eines verfügbaren Slots bucht.
Das ist nicht unglaublich kompliziert zu verwalten und der Suchprozess wird zu einer einfachen Abfrage:Suche nach verfügbaren Zeitfenstern im erforderlichen Zeitrahmen (gebucht =falsch oder Kundennummer =0, wie auch immer Sie es wählen), wobei Enddatum - Startdatum>=die Nummer Tage, die Sie möchten.
Es verdoppelt die Größe der Buchungs-/Verfügbarkeitstabelle und macht Buchungen weniger einfach, aber der Nachteil ist, dass der Suchprozess so einfach wie möglich ist.