Tengo un problema interesante al tratar de representar datos complejos de programación en una base de datos. Como guía, debo ser capaz de representar la totalidad de lo que el formato iCalendar - ics
- puede representar, pero en una base de datos. En realidad, no estoy implementando nada relacionado con ics
, pero ofrece un buen alcance del tipo de reglas que necesito para poder modelar para mi proyecto en particular.Representación de recurrencia programada compleja en una base de datos
Necesito permitir la representación de un solo evento o un evento periódico basado en varias veces al día, días de la semana, semana del mes, mes, año o alguna combinación de estos. Por ejemplo, el tercer jueves de noviembre anualmente, o el 25 de diciembre anualmente, o cada dos semanas a partir del 2 de noviembre y hasta el 8 de septiembre del año siguiente.
No me importa la eficiencia de la inserción, pero la eficiencia de la consulta es fundamental. La operación que haré más a menudo es proporcionar una sola fecha/hora o un rango de fecha/hora, y tratar de determinar si el cronograma definido coincide con cualquier parte del rango de fecha/hora. Otras operaciones pueden ser más lentas. Por ejemplo, dado el 15 de enero de 2010 a las 10:00 AM hasta el 15 de enero de 2010 a las 11:00 a.m., encuentre todos los horarios que coincidan, al menos, con parte de ese tiempo. (es decir, un programa que cubre 10:30 - 11:00 todavía coincide).
¿Alguna sugerencia? Miré How would one represent scheduled events in an RDBMS? pero no cubre el alcance del tipo de reglas de recurrencia que me gustaría modelar.