Mysql
 sql >> Base de données >  >> RDS >> Mysql

Conception optimale pour une base de données avec événement récurrent

Je créerais simplement une entrée pour chaque récurrence de l'événement, jusqu'à un certain horizon. Cependant, cela signifie que vous aurez besoin d'un autre tableau que vous pourrez utiliser pour projeter les dates si elles dépassent votre date d'horizon. C'est-à-dire que vous aurez besoin d'une table d'événements contenant un enregistrement pour chaque occurrence d'un événement répété (1er janvier, 8 janvier, 15 janvier, ... jusqu'à décembre) et une table avec chaque enregistrement disponible pour amorcer les années futures (début date :1er janvier ; répétition : 7 ; jusqu'à : 2011) afin qu'au début de 2012 (ou dès que l'utilisateur demande une vue d'un mois de 2012+), vous puissiez générer les événements futurs.

Cela a deux gros inconvénients :

  1. Votre base de données contient des données pour une année complète. Cependant, si l'ajout d'une année complète de données ruine vos performances, votre système est probablement sous-alimenté. (Il semble nécessaire qu'une application de calendrier soit capable de gérer plusieurs années de dates)
  2. À la fin de l'horizon des événements, vous devez générer les dates futures des événements récurrents.

Les avantages (IMO) qui l'emportent sur les inconvénients :

  1. Mathématiques simplifiées lors de l'affichage du calendrier. En utilisant la méthode de Tim, ci-dessus, si l'utilisateur charge le 18 décembre 2011, comment allez-vous calculer les événements récurrents à placer ce jour-là ? Vous serez obligé de parcourir CHAQUE événement récurrent chaque fois que vous affichez une date. Le compromis est l'inconvénient n° 1, qui, à mon avis, est la meilleure solution que d'avoir à refaire ces calculs.
  2. Vous pouvez modifier des instances spécifiques d'un événement. En utilisant la méthode de Tim, si une réunion a eu lieu un jour férié et que l'utilisateur l'a changée pour la veille, comment feriez-vous même ? En utilisant la méthode d'une entrée par événement décrite ici, vous pouvez simplement modifier cet enregistrement pour l'événement, en déplaçant facilement les occurrences uniques dans le calendrier.