Cómo manejar mejor la excepción a la repetición de eventos de calendario

Estoy trabajando en un proyecto que me requerirá implementar un calendario. Estoy tratando de encontrar un sistema que sea muy flexible: pueda manejar eventos repetitivos, excepciones a repeticiones, etc. He revisado el esquema de aplicaciones como iCal, Lotus Notes y Mozilla para tener una idea de cómo ir sobre la implementación de dicho sistema. Actualmente estoy teniendo problemas para decidir cuál es la mejor manera de manejar excepciones a eventos repetitivos. He usado bases de datos bastante, pero no tengo mucha experiencia con realmente optimizar todo, así que no estoy seguro de qué método de los dos que estoy considerando sería óptimo en términos de rendimiento general y capacidad de consulta / búsqueda :

  1. Rompiendo el evento repetitivo. Por lo tanto, tome el cambio de la fecha de finalización en la fila actual para el evento repetido, inserte una nueva fila con la excepción y agregue otra fila continuando la secuencia anterior.
  2. Simplemente agregando una excepción. Entonces, agregue una nueva fila con algún campo que lo indique como una anulación.

Así que aquí está el por qué no puedo decidir. El Método uno dará lugar a filas mucho más, ya que cada edición requiere 2 filas adicionales como apposed a una sola fila por el segundo método. Por otro lado, creo que la consulta para encontrar un evento sería mucho más sencilla y, por lo tanto, posiblemente más rápida (?) Con el primer método. El segundo método parece que requerirá más cálculos en el servidor de aplicaciones, ya que una vez que obtenga los datos, tendrá que eliminar la intersección de las dos filas. Sé que las bases de datos son a menudo el cuello de botella para los sitios web y aunque estoy seguro de que muchos de ustedes piensan que está bien porque su proyecto probablemente nunca será lo suficientemente grande como para que la diferencia en la eficiencia realmente importe, me gustaría implementar el mejor solución. Entonces, ¿qué método escogerían ustedes, o harían algo completamente diferente?

Además, como nota al margen, usaré MySQL y PHP. Si hay otra tecnología que crees que sería más adecuada para esto, especialmente en el área de la base de datos, por favor menciónala.

Gracias por el consejo.

Los eventos no son permanentes, están sujetos a cambio o terminación.

Debe insertar una fila para cada fecha en el evento y, al editar un evento repetido, dar la opción de editar todas las instancias del evento o solo una.

Al hacer esto, solo deberías necesitar un campo adicional para indicar si el evento está activo o no.

Cuando se indexa correctamente, esto no hará una diferencia considerable en sus consultas.

Un ejemplo sería:

SELECT * FROM events WHERE event_id = 123 AND active = 1; 

En ese caso, se le solicitará que indexe event_id y las columnas activas.

Decidí simplemente ingresar una fila con las excepciones y usar el código para eliminarlos del conjunto de repetición. Pasará un tiempo antes de que termine con esto, pero trataré de recordar publicar aquí con algunos resultados de rendimiento cuando todo haya terminado.