9

最近、架空のWebベースの予約システムに関するインタビューの質問と、重複を最小限に抑え、柔軟性を最大化するためにデータベーススキーマを設計する方法について質問されました。

ユースケースは、管理者がプロパティの可用性をシステムに入力することです。複数の期間が設定されている可能性があります。たとえば、2009年4月1日から2009年4月14日まで、および2009年7月3日から2009年7月21日までです。

その場合、ユーザーは、同等またはそれより短い期間で利用可能になった期間にのみ予約を行うことができます。

この情報をデータベースにどのように保存しますか?

次のような単純な(本当に単純化された)ものを使用しますか?

AVAILABILITY(property_id, start_date, end_date);
BOOKING(property_id, start_date, end_date);

次に、予約された期間が空白になっている可用性のカレンダーを表示するWebページを簡単に作成できますか。このデータベーススキーマからレポートを作成するのは簡単でしょうか?見た目と同じくらい簡単ですか?

4

1 に答える 1

14

空室状況と予約の両方について、1 日の粒度で単一のテーブルを使用する方が簡単な場合があります。

property_date (property_id, date, status);

列のステータスには、(少なくとも) 次の 2 つの値があります。

  • 利用可能
  • 予約済み

たとえば、4 月 1 日から 14 日までの利用可能期間を入力すると、(アプリケーションは) property_date にそれぞれ「利用可能」ステータスの 14 行を挿入する必要があります。(ユーザーにとっては、単一のアクションのように見えるはずです)。

4 月 3 日から 4 月 11 日の期間に物件を予約するには、毎日「利用可能」行が存在することを確認し、ステータスを「予約済み」に変更する必要があります。

このモデルは少し「冗長」に見えるかもしれませんが、いくつかの利点があります。

  1. 任意の日付の空き状況を簡単に確認できます
  2. 予約を追加すると、空室状況が自動的に更新されます。同期を維持する別の空室状況テーブルはありません。
  3. Web ページで空室状況を表示するのは非常に簡単です。
  4. 新しいステータスを追加して、さまざまなタイプの利用不可を記録するのは簡単です。たとえば、メンテナンスのため閉鎖されています。

注意: 「利用可能」がプロパティの最も一般的な状態である場合は、論理を逆にして「利用不可」ステータスにすることをお勧めします。日付の行がない場合は、利用可能であることを意味します。

于 2008-12-11T14:38:06.747 に答える