Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Eventos Recurrentes ¿Forma más óptima de almacenar?

Estas en el tema de Eventos Recurrentes ¿Forma más óptima de almacenar? en el foro de Mysql en Foros del Web. Hola a todos, Estoy diseñando un sistema tipo calendario, pero necesitamos integrar eventos recurrentes, estoy viendo la forma más óptima para crear esto, una de ...
  #1 (permalink)  
Antiguo 09/07/2013, 19:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Eventos Recurrentes ¿Forma más óptima de almacenar?

Hola a todos,

Estoy diseñando un sistema tipo calendario, pero necesitamos integrar eventos recurrentes, estoy viendo la forma más óptima para crear esto, una de las maneras es:

- Generar los X eventos por 5 o 10 años dependiendo de la recurrencia (ej cada miércoles una vez al mes) y tenerlos con un id "linkeados" al evento original, así si se cambia se podría actualizar todos, pero generar tantos eventos por uno solo se me hace mal.

- La otra opción es tener dos tablas, una con el evento, y otra con cierto "metadata" donde se guarde el tipo de recurrencia, y mediante SQL cuando estas viendo ese día se pueda calcular si va a caer el evento en ese día, de esa manera no se repiten filas ni datos, pero no encuentro la forma más óptima de diseñarlo así.

¿Opiniones?
  #2 (permalink)  
Antiguo 10/07/2013, 01:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Eventos Recurrentes ¿Forma más óptima de almacenar?

Yo me inclinaria por la segunda opción, el problema puede ser definir ese metadato, si no tinen una forma similar en todos los casos. Pero creo que la logica de una agenda te puede servir, ya que permite guardar tanto ocurrencias puntuales de un evento, con una fecha y hora, o eventos recurrentes con una hora y una definición del ciclo....

Fecha

Hora

Duración

Ciclico (si/no)

Si ciclico

Fecha inicio
Fecha fin (si null indefinido)

Frecuencia: Diaria,Semanal,Mensual,Anual

Si Frecuencia->Diaria
Cada X dias
Cada X dias laborables
Todos los laborables
Idem festivos???

Si Frecuencia->Semanal
Repetir cada X semanas el dia de la semana Y (lunes,...)

Si Frecuencia->Mensual
El dia X de cada Y meses
El X Y de cada Z meses (El segundo miercoles de cada 2 meses)

Si Frecuencia->Anual
Cada X de Y (Cada 10 de julio)
El X Y de Z (El segundo miercoles de julio)

(No he hecho nada mas que copiar la logica que usa outlook, pero creo que puede ayudar)

Deberías prever la necesidad de guardar información historica individual de cada ocurrencia de un evento, no se de que estamos hablando, pero un ejemplo seria guardar el numero de entradas vendidas si es algo con publico... La solución seria una tabla HistoricoEventos, con una entrada para cada evento pasado que requiera de información adicional.

Incluso se podria pensar la manera de entrar repeticiones no cíclicas (fechas puntuales).

Obviamente requiere programación pero casi la misma que necesitaras para generar los eventos futuros de la primera opción (excepto que los crees a mano)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 10/07/2013 a las 02:18
  #3 (permalink)  
Antiguo 10/07/2013, 10:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Eventos Recurrentes ¿Forma más óptima de almacenar?

Sí, yo también creo que la opción dos es la más adecuada, sin embargo estoy pensando como diseñar esa "metadata" que se necesita y como manejar los querys para verificar si viendo X día se debería de incluir el evento o no.

Pero gracias por tu respuesta creo voy por buen camino

Etiquetas: eventos, forma, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:24.