In meiner Anwendung habe ich einen Anbieter, der einen Zeitplan hat, und Kunden, die Termine aus dem Zeitplan buchen. Ich brauche die folgenden Funktionen.
Anbieter: - Sie können die wiederkehrende Verfügbarkeit angeben. Zum Beispiel Mo 9-5, Di 10-3, etc. - Möglichkeit, Daten zu schwärzen. Zum Beispiel - nicht verfügbar an diesem Montag. - Möglichkeit, einzelne, nicht wiederkehrende Daten/Zeitfenster hinzuzufügen. Zum Beispiel - Diesen Samstag 9-5.
Kunde: - Einzelne Termine buchen können. - Wiederkehrende Termine buchen können. (Jeden Mo 9-4).
Bislang habe ich 3 Optionen gefunden:
- Teilen Sie den Zeitplan in 30-Minuten-Intervalle ein und erstellen Sie für jedes Intervall/Anbieterpaar einen Datenbankeintrag. Jedes Intervall kann entweder frei oder gebucht sein. Wenn ein Kunde einen Termin bucht, markieren wir die Intervalle als gebucht. Das Problem bei diesem Ansatz ist, dass viel Platz verschwendet wird, und ich bin mir nicht sicher, wie gut die Suchleistung bei einer wiederkehrenden Buchung wäre.
- Speichern Sie jeden Verfügbarkeitszeitraum als "Ereignis". Wenn es sich um ein wiederkehrendes Ereignis handelt, duplizieren Sie das Ereignis. Durchsuchen Sie bei der Suche nach freien Plätzen die Buchungstabelle, um sicherzustellen, dass es keine überschneidenden Buchungen gibt. In diesem Fall scheint die Suche nach wiederkehrenden Terminen etwas umständlich zu sein. Um alle Anbieter zu finden, die im nächsten Jahr am Montag von 9 bis 17 Uhr verfügbar sind, müssen wir nach allen übereinstimmenden "Veranstaltungen" suchen und alle Anbieter finden, die 52 übereinstimmende Veranstaltungen haben.
- Speichern Sie jeden Verfügbarkeitszeitraum als "Ereignis". Fügen Sie ein Kennzeichen hinzu, wenn es sich um einen wiederkehrenden Termin handelt, und durchsuchen Sie bei der Suche nach freien Terminen die Buchungstabelle, um sicherzustellen, dass es keine überlappenden Buchungen gibt. Dadurch wird die Suche nach wiederkehrenden Terminen erleichtert. Um wiederkehrende Termine zu "schwärzen", können wir einfach eine falsche Buchung einfügen.