2012-04-23 1 views
1

一部の部屋の可用性/占有率を管理するためのRails 3アプリケーションをRDMSとして開発しています(ホテルのようなアプリ) 日数または月数に基づいて部屋の空き状況を管理する方法

    1. (例えば6つのモン)数ヶ月いくつかの日/週/週末
    2. :問題は、一つの部屋がために借りることができますので、私はシステム内の2つの異なる要件を維持するためにきています

    利用可能かどうか、またどのユーザーがレンタルしているかは、特定の日付に各部屋ごとに表示する必要があります。もう一方の側では、1人のユーザーが特定の期間に1つの部屋を検索できます。 日付範囲は固定日付または数ヶ月(たとえば9月から3月)の範囲にすることができますが、これはデータベースベースと関連していないことがわかっていますが、私は留意しています。

    このシステムを効率的に機能させるために、私はRoomへの参照と、各要素が0または1のときに365要素の配列(1年を表す)でテーブルYEARコンポジットを作成すると考えました。利用可能であり、1はレンタルされていることを意味する。

    私はいくつかの問題に直面する必要があります。このソリューション採用:ユーザーは、いくつかの数ヶ月間、部屋を探しているとき

    1. リターンは非常に迅速な結果を。
    2. (2012年12月20日から2013年1月の第十三に例えば、「)クロスyears'rangesの管理
    3. 閏年

    と最後の事、私はSQLを避けるために抱き合わせていますプロシージャまたは深夜のプロセス(可能であれば)

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

  • 答えて

    0

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

    最も重要なことは、クエリの重複する日付範囲を検出する方法です。これは、部屋がすでに予約されているかどうか、または部屋が空いているかどうかをテストするための基礎です。 RESERVATIONテーブルがあり、指定した日付範囲と重複する予約を検索するとします:@FromDateと@ToDate。 (...すなわち、WHERE NOT IN)

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

    利用可能な部屋が競合を持っていないと利用できない客室には、競合を持つことになります。重複予約を見つけるためのあなたのWHERE句は次のようになります。

    +0

    私は最初は同じと思っていましたが、問題を借りた月のために私は確信が持てませんでした。私が省略したもの(質問を簡略化するため)は、1年中に学生と夏に観光客に部屋を借りることです。生徒の_計算可能な単位は月ですので、生徒は15日間は部屋を借りることができません。 しかし、あなたの答えを読んで、私は最終的にデータレイヤの_開始日_と_end日_のすべての問題であることに気付きました。 私は、1ヶ月未満の間、部屋を借りることを禁止する論理を学生に持たせるだけです。 ジョエルが正しい方向に向いてくれてありがとう;) –

    +0

    @DrDuke - よろしくお願いします!その答えが役に立つのであれば、自由にアップアップしてください! –

    +0

    確かにそれは助力でした!私はupvoteしようとしていますが、私はそれを行うより多くの評判が必要: –

    関連する問題