Archivia tutto nel database.
Vuoi avere una tabella "Modello attività" e una tabella "Attività" in cui esiste una relazione uno->molti.
Quando l'utente indica che desidera che un'attività si ripeta, crea un record "Modello di attività" e quindi crea tutte le "attività" indicate dall'utente (non consentire a un utente di creare attività troppo lontane nel futuro). Ogni attività è collegata al modello di attività tramite una chiave esterna. L'idea è che SQL sarà più efficiente nella gestione di questi record rispetto al tentativo di eseguire tutto questo nel codice basato su un modello. In questo modo, avrai più opzioni durante l'ordinamento e il filtraggio dei tuoi dati. Dopotutto, scrivere una query SQL è più facile che scrivere, testare e mantenere una funzione PHP che manipola i dati.
Alcuni altri consigli che ti darei sono:
- Cerca di ottenere molte informazioni nel record "Modello di attività". Mantieni il numero di attività coperte dal modello, la data di fine dell'ultima attività, il tempo trascorso tra la prima attività e l'ultima, ecc. Questi "Metadati" possono aiutarti a risparmiare tempo di query quando stai cercando di ordinare e filtrare compiti.
- Metti un indice nel campo Data e FK, questo aiuterà anche il tempo di interrogazione.
- Ho appena creato due app di calendario al lavoro che sono state ben accolte dai capi. Ho usato il plug-in JQuery "FullCalendar" (http://arshaw.com/fullcalendar/). Ho usato JQuery AJAX per gestire la maggior parte dei miei eventi e aveva il supporto integrato per la visualizzazione Mese, Giorno e Settimana.