Eh bien, pour stocker la règle de récurrence lui-même, vous pouvez utiliser une version réduite de la RFC 5545 (et vraiment, je vous suggère de couper vers le bas fortement). À côté de quelque chose d'autre, qui le rendra facile pour l'exportation vers d'autres applications si vous le souhaitez.
Après que vous avez pris cette décision, pour le côté de la base de données, vous devez savoir si vous voulez stocker chaque occurrence de l'événement, ou tout simplement un record pour la répétition de l'événement, de l'élargir comme et quand vous en avez besoin. Bien évidemment, il est beaucoup plus facile à interroger la base de données lorsque vous en avez déjà tout élargi, mais il le rend plus difficile à maintenir.
Sauf si vous avez envie d'écrire quelques-unes assez complexe SQL qui peuvent être difficiles à tester (et vous aurez besoin d'un lot de tests unitaires pour toutes sortes de cas de coin) je vous conseille de vous rendre la base de données elle-même relativement "stupide" et écrire la plupart de la logique métier dans un langage comme Java ou C# - soit de ce qui peut être intégré dans des procédures stockées en fonction de votre base de données, bien sûr.
Une autre chose que vous devez vous poser est de savoir si vous devez composer avec les exceptions à des événements, un événement dans une série changeant heure, l'endroit, etc.
J'ai une certaine expérience avec la gestion d'agenda (j'ai passé la plupart de la dernière année de travail sur le calendrier bits de Google Sync via ActiveSync) et je dois vous avertir que les choses se compliquent vraiment rapidement. Tout ce que vous pouvez juger "hors de portée" est une bénédiction. En particulier, avez-vous besoin de travailler dans plusieurs fuseaux horaires?
Oh, et enfin - être très, très prudent lorsque vous faites de réelles arithmétique avec le calendrier des opérations. Si vous allez utiliser Java, veuillez utiliser Joda Temps plutôt que dans le haut- Calendar
/Date
les classes. Ils vous aideront beaucoup.