Pregunta

Estamos considerando la actualización (reescritura) de nuestro sistema que almacena información sobre cuándo las personas pueden reservar habitaciones, etc. durante el día. En este momento almacenamos el inicio y la hora y la fecha en que la sala está disponible en una tabla, y en otra almacenamos los horarios de las citas individuales.

En la superficie parecía una idea lógica almacenar la información de esta manera, pero a medida que el tiempo avanzaba y el sistema se encontraba bajo una gran carga, empezamos a darnos cuenta de que esta estructura de datos parece ser ineficiente. (Se convierte en una operación intensiva para buscar en todas las habitaciones los tiempos disponibles y calcular cuándo están disponibles. Si la habitación está disponible por un tiempo determinado, es el tiempo que está disponible el tiempo suficiente para acomodar el tiempo solicitado).

Hemos dado vueltas en círculos sobre cómo hacer que el sistema sea más eficiente y creemos que tiene que haber una mejor manera de abordar esto. ¿Alguien tiene sugerencias sobre cómo hacer esto, o tiene algún lugar donde buscar sobre cómo construir algo como esto?

¿Fue útil?

Solución

Encontré que este libro es inspirador y una lectura obligada para cualquier tipo de base de datos que involucre administración / restricciones de tiempo:

Desarrollo de aplicaciones de base de datos orientadas en el tiempo en SQL

( Agregado por el editor : el libro está disponible en línea, a través de la página de inicio de Richard Snodgrass . Es una buen libro.)

Otros consejos

@ Radu094 te ha indicado una buena fuente de información, pero será difícil procesarla.

A un nivel horriblemente pragmático, ¿ha considerado registrar las citas y la información disponible en una sola tabla, en lugar de en dos tablas? Para cada día, divida el tiempo en "nunca disponible" (antes de que se abra la oficina, después de que se cierre la oficina, si esto sucede), se puede asignar "disponible" y "no disponible". Estas (dos o) tres clases de reservas se registrarían en intervalos contiguos (con hora de inicio y finalización para cada intervalo en un solo registro).

Para cada habitación y cada fecha, es necesario crear un conjunto de reservas 'no en uso' (dependiendo de si va con 'nunca disponible', el conjunto puede ser un registro 'disponible' o puede incluir el los registros de 'nunca disponible' de turno temprano y de turno tardío también).

Luego tienes que resolver qué preguntas estás haciendo. Por ejemplo:

  • ¿Puedo reservar la Sala X en el Día Y entre T1 y T2?
  • ¿Hay alguna habitación disponible en el Día Y entre T1 y T2?
  • ¿A qué hora del día Y sigue estando disponible la Sala X?
  • ¿En qué horas del Día Y hay una sala con capacidad audiovisual y capacidad para 12 personas disponibles?
  • ¿Quién tiene reservada la habitación X durante la mañana del día Y?

Esto es solo un pequeño subconjunto de las posibilidades. Pero con un poco de cuidado y atención a los detalles, las consultas se vuelven manejables. Validar las restricciones en el DBMS será más difícil. Es decir, asegurarse de que si el tiempo [T1..T2) está reservado, nadie más lo haga [T1 + 00: 01..T2-00: 01) o cualquier otro período superpuesto. Consulte Álgebra de intervalos de Allen en Wikipedia y otros lugares (incluido este en uci.edu ).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top