Gardez une liste des réservations de chambres qui ont une date de début et une date de fin. N'essayez pas de modéliser les créneaux de disponibilité ou de considérer votre base de données de réservation comme une feuille de calcul. Cela ne fera que vous conduire à une complexité inutile. Les plages de dates sont faciles à utiliser.
La chose la plus importante à savoir est de savoir comment détecter les plages de dates qui se chevauchent dans vos requêtes. C'est la base pour tester si une chambre est déjà réservée ou si elle est libre. Supposons que vous ayez une table RESERVATION et que vous souhaitiez rechercher des réservations qui chevauchent une plage de dates donnée :@FromDate et @ToDate. Votre clause WHERE pour rechercher des réservations qui se chevauchent ressemble à ceci :
WHERE RESERVATION.start_date < @ToDate
AND RESERVATION.end_date > @FromDate
Les salles disponibles n'auront pas de conflits (c'est-à-dire WHERE NOT IN...) et les salles indisponibles auront un conflit.