2008-10-11 2 views
4

Quelle est la meilleure façon de stocker des fenêtres de temps récurrentes?
Par exemple. Si j'ai un système de calendrier où je dois être capable de gérer des événements récurrents quotidiens, hebdomadaires ou mensuels, quel type de système de gestion du temps est le meilleur?

Comment cela est-il mieux représenté dans une base de données?Comment stocker une fenêtre de temps récurrente

Plus de détails
L'objectif spécifique de c'est de fournir des ensembles de fenêtres temporelles ouvertes. Une fois que nous avons ces fenêtres de temps, le code doit tester si un message qui arrive au système tombe dans l'une des fenêtres de temps.

Répondre

1

Ceci a été longtemps retardé, mais après beaucoup de tests et beaucoup de chagrins d'amour, nous avons décidé d'un certain schéma pour que cela fonctionne. Pour les besoins de notre système, nous sommes tenus de revenir sur une base hebdomadaire, voire pas du tout. Le produit final sera conçu en tant que tel.

Voici le schéma DB

id : int(10) 
window_name : varchar(100) 
start_date : datetime 
end_date : datetime 
start_time : time 
duration : int(10) 
timezone: varchar(100) 
monday : tinyint(1) 
tuesday : tinyint(1) 
... 
sunday : tinyint(1) 
  1. Chaque « fenêtre » de temps aura une date de début de série, date de fin, heure de début et une durée.
  2. La fenêtre ouvrira à la date de début et heure de début et durée de la « durée » secondes
  3. La fenêtre ne sont ouvertes que certains jours de la semaine

C'est le seul système qui permettrait fenêtres pour ouvrir et fermer sur une base hebdomadaire récurrente et ont également des fenêtres qui s'étendraient dans le lendemain matin. Je suis sûr qu'il y a des systèmes plus complexes qui font des fenêtres récurrentes, mais nous cherchions quelque chose de flexible et rapide, et nous n'avions pas besoin d'événements récurrents mensuels ou d'événements annuels.

1

Je créerais une table RecurrenceType qui contiendrait des enregistrements pour chaque type de récurrence pris en charge par votre système de calendrier. Chaque événement de la table CalendarEvents contient une référence à l'ID dans la table RecurrenceType.

Je disposerais alors d'un objet RecurrenceRules dans le code qui contiendrait la logique métier de calcul lorsque la prochaine date recevrait une date courante ou de départ ou récupérerait les N prochaines dates sous la forme d'un tableau.

La plus grande partie de la logique de récurrence devrait probablement être codée par des valeurs énumérées qui sont basées sur l'ID de la table RecurrenceType. Je serais surpris si vous pouviez rendre toutes les données à moins que ce ne soit un système de calendrier très simple.

Espérons que ça aide. Cela ressemble à un projet intéressant.

Questions connexes