開始日と終了日がある部屋の予約のリストを保管してください。空き枠をモデル化しようとしたり、予約データベースをスプレッドシートのように考えたりしないでください。これは、無意味な複雑さにつながるだけです。日付範囲は簡単に操作できます。
知っておくべき最も重要なことは、クエリで重複する日付範囲を検出する方法です。これは、部屋がすでに予約されているかどうか、または部屋が空いているかどうかをテストするための基礎です。 RESERVATIONテーブルがあり、特定の日付範囲(@FromDateと@ToDate)と重複する予約を検索するとします。重複する予約を検索するためのWHERE句は次のようになります:
WHERE RESERVATION.start_date < @ToDate
AND RESERVATION.end_date > @FromDate
利用可能な部屋には競合がなく(つまり、WHERE NOT IN ...)、利用できない部屋には競合が発生します。