Rolf B: mysql: Designfrage

Beitrag lesen

Hallo Pit,

es ist eine gute Frage, wie man sowas macht. In meinem Handy-Kalender kann ich auch sagen: "Jeden Mittwoch", und habe dann Termine am Mittwoch bis zum St. Nimmerleinstag. Und dann kann ich an irgendeinem Mittwoch sagen: "Diesen Termin löschen, aber nicht die Serie". Würde der Kalender im Handy nur einen Basistermin führen und den Rest davon ableiten, bräuchte man sowas wie einen "Anti-Termin", um ein "immer aber nicht DANN" zu realisieren. Klingt kompliziert.

Besser wäre wohl, Termin und Zeitraum getrennt zu modellieren. Ein Termin existiert einmal, kann aber beliebig viele Zeiträume haben. Um einen Zeitraum [x,y] im Kalender darzustellen, sucht das Kalenderprogramm alle Zeiträume, deren Beginn vor y UND deren Ende hinter x liegt. Ein BETWEEN ist das nicht. Die so gefundenen Termine muss man nun genauer betrachten: Wer ist ein Serientermin, wie ist die Serienregel, um im darzustellenden Zeitraum die richtigen Instanzen anzuzeigen.

Soll nun eine Serie unterbrochen werden (also ein Termin jeweils am 1. des Monats, beginnend ab 01.01.2017, Ende offen - und die Instanz am 01.11.2017 wird abgesagt), dann beendest Du den Zeitraum, in dem der 01.11. lag, am 31.10 (oder am 01.10.) und beginnst am 01.12. einen neuen Zeitraum. Macht man das mehrmals, kann das zu Zeiträumen führen die gar keinen Termin mehr enthalten - die kannst Du dann löschen.

Die getrennte Modellierung von Termin und Zeitraum erlaubt es dann auch, den Termin selbst zu ändern (Grund, Ort, Teilnehmer) und die Änderungen sofort in allen Instanzen des Termins darstellbar zu machen. Würde man Termin und Zeitraum in einer Tabelle führen, müsste man für solche ausfallenden Serieninstanzen den kompletten Termin klonen und hätte dann das Problem, Änderungen synchron zu halten.

Rolf

--
sumpsi - posui - clusi