2010-06-13 6 views
10

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.

Respuesta

1

La forma en que hice algo similar a esto fue tener dos tablas. Si un evento no tiene un patrón recurrente, simplemente almacene la fecha, la hora de inicio y la hora de finalización. Su consulta verifica si la hora de su búsqueda es mayor que la hora de inicio de cualquier entrada y menor o igual que la hora de finalización de ese mismo evento.

Para eventos recurrentes, no estoy muy familiarizado con la forma en tiendas de recurrencias iCalendar, pero si almacena cada evento de día de la semana (puede que tenga que tener múltiples filas para un solo evento si se repite en más de una día a la semana), luego búscalo casi de la misma manera que la tabla anterior. Para recurrencias extrañas como el tercer martes de la semana, podría tener una columna adicional que describa la condición específica. Es posible que pueda darle una mejor respuesta si me puede decir más acerca de cómo ics representa ese tipo de recurrencia.

Espero que ayude. No tengo mucho tiempo en este momento. Puedes contactarme más tarde si quieres discutir esto. Actualmente estoy en Missouri, por lo que mi disponibilidad para la próxima semana será errática.

-1

Esto podría ser una solución trivial, pero ¿cuáles serían los inconvenientes de agregar una columna que define la recurrencia del evento (es decir, cada x semanas, anualmente, semanalmente, etc.) y usar eso como criterio de resultado?

Cuestiones relacionadas