Mysql
 sql >> Base de données >  >> RDS >> Mysql

Trouver des créneaux libres dans un système de réservation

Probablement exagéré pour votre application - mais :

Un moyen relativement simple d'améliorer vos recherches au détriment de la complexité du processus "d'écriture" consisterait à modifier la table de réservation pour en faire une table de "disponibilité".

Ajoutez une colonne booléenne pour indiquer si le créneau est libre ou réservé (ou mieux encore mettez l'identifiant du client qui l'a réservé, et utilisez 0 si le créneau est libre).

Commencez avec un seul emplacement libre, 1er janvier 2009 -> 31 décembre 20 ??

Lorsque vous obtenez une réservation, divisez le créneau libre en 3 (deux insertions et une mise à jour), le créneau réservé et les deux créneaux disponibles.

Continuez ainsi et au fur et à mesure que le délai se fragmentera, le processus de réservation consistera en l'une des opérations suivantes :

  • Attribuer un "emplacement disponible" entier à quelqu'un (une mise à jour)
  • Diviser un "emplacement disponible" en deux (une mise à jour et une insertion)
  • Diviser un créneau en 3 (comme ci-dessus) si quelqu'un réserve la section du milieu sur un créneau disponible.

Ce n'est pas incroyablement compliqué à gérer et le processus de recherche devient une simple requête :trouver tous les créneaux disponibles dans la période requise (booked=false ou customerid=0, quelle que soit la manière dont vous y allez) où enddate - startdate>=le nombre de jours que vous voulez.

Cela double la taille du tableau de réservation/disponibilité et rend les réservations moins simples, mais le compromis est que le processus de recherche est à peu près aussi simple que possible.