In einer Anwendung, die ich entwerfe, muss der Benutzer in der Lage sein, ziemlich komplexe Ereignisplanung (kontinuierlicher Zeitblock vs. tägliche Zeitblöcke, Ausnahmedatum/-zeiten, Wiederholungsmuster usw.) anzugeben.
Weiß jemand eine gute Designseite für so etwas online? Zum Beispiel war ich sehr beeindruckt von dieser Seite Beschreibung, wie man Datenbank-Audit-Trail macht, und würde gerne etwas Ähnliches haben.
Aktuelle Überlegungen
- Meine Datenbank würde die folgenden Tabellen enthalten: Events und ScheduleItems
- Die Beziehung wäre Events {1 -- 0..*} ScheduleItems
- Events würden die folgenden Spalten haben: eventId, schedulePattern
- ScheduleItems würden die folgenden Spalten haben: eventId, startDateTime, endDateTime
- Die Steuerelemente der Benutzeroberfläche würden es dem Benutzer ermöglichen, allgemeine Regeln anzugeben (täglich/kontinuierlich, enthält/exkludiert Wochenenden, Start-/Enddatum/-zeit usw.). Wenn sie mit den vorhandenen Steuerelementen nicht zufrieden sind, könnten sie dann entscheiden, die generierten "Zeitblöcke" anzuzeigen und manuell anzupassen
- Beim Speichern des Ereignisplans...
- Wenn nur die bereitgestellten Steuerelemente verwendet wurden (ohne Anpassung), würde ich ihre Auswahl als Muster in der Events-Tabelle speichern (d.h. "sd:2010-04-28;st:09:20:00;ed:2010-05-12;et:17:20:00;r:2w[M-Th];z:EST" usw.)
- Wenn der Benutzer die generierten Zeitblöcke manuell angepasst hat, würde ich jeden einzelnen Zeitblock innerhalb der ScheduleItems-Tabelle speichern und Events.schedulePattern einen speziellen Code geben ("MANUAL" oder etwas Ähnliches).
Vor- und Nachteile
Ich sollte in der Lage sein, > 90% der Ereignisse direkt durch das Musterfeld zu speichern und alle anderen Randfälle durch die "brute-force" ScheduleItems-Tabelle zu handhaben. Da einige der behandelten Fälle Ereignisse umfassen können, die über Monate hinweg stattfinden (was sonst in einer sehr großen Anzahl von Zeitblöcken resultieren würde), ist es recht attraktiv, es in einer Zeile zu haben.
Nachteile
Dies ist eine ziemlich komplexe Lösung; jedes andere System, das diese Daten benötigt, müsste in der Lage sein, das schedulePattern auch zu parsen und zu wissen, wann ScheduleItems abgerufen werden müssen.