1

一部の部屋の可用性/占有率を管理するためにRails3アプリケーション(RDMSとしてMySQLを使用)を開発しています(ホテルのようなアプリです)私の場合、問題はシステム2の異なる要件に対応しなければならないことです。 1つの部屋を借りることができます:

  1. 数ヶ月(例えば6モン)
  2. いくつかの日/週/週末

明らかに、アプリは、特定の日付の各部屋について、それが利用可能かどうか、およびどのユーザーがレンタルしているかを表示する必要があります。反対側では、1人のユーザーが1つの部屋で特定の日付範囲を検索できます。日付範囲は、固定の日付または月の範囲(たとえば、9月から3月)にすることができます。これはデータベースの設計とは関係ありませんが、覚えておく必要があります。

このシステムを効率的に機能させるために、部屋への参照と、各要素が0または1の場合、0が使用可能で1の場合、365要素の配列(1年を表す)を使用して、テーブルYEARコンポジットを作成することを考えました。賃貸を意味します。

このソリューションを採用すると、いくつかの問題に直面する必要があります。

  1. ユーザーが数か月の間に部屋を検索しているときに、非常に迅速な結果を返します。
  2. 「クロスイヤー」範囲の管理(たとえば、2012年12月20日から2013年1月13日まで)
  3. うるう年

そして最後に、SQLプロシージャや深夜のプロセスを避けたいと思っています(可能な場合)

SQLでこの問題を設計するためのより良い方法があると確信しています...あなたの何人かは私を助けてくれますか?または私にいくつかのヒントを与えますか?

4

1 に答える 1

0

開始日と終了日がある部屋の予約のリストを保持します。空き枠をモデル化しようとしたり、予約データベースをスプレッドシートのように考えたりしないでください。これは、無意味な複雑さにつながるだけです。日付範囲は簡単に操作できます。

知っておくべき最も重要なことは、クエリで重複する日付範囲を検出する方法です。これは、部屋がすでに予約されているかどうか、または部屋が空いているかどうかをテストするための基礎です。RESERVATIONテーブルがあり、特定の日付範囲(@FromDateと@ToDate)と重複する予約を検索するとします。重複する予約を検索するためのWHERE句は、次のようになります。

WHERE RESERVATION.start_date < @ToDate 
  AND RESERVATION.end_date > @FromDate

利用可能な部屋には競合がなく(つまり、WHERE NOT IN ...)、利用できない部屋には競合が発生します。

于 2012-04-23T12:32:01.983 に答える