PHPとMySQLを使って予約システムを作ろうとしています。

そこでアドバイス頂きたいです。
例えば、不特定多数の講師に対して、不特定多数の会員が予約をするシステムなのですがデータベース設計はどのようにしたらベストなのでしょうか?
講師マスターと会員マスターは既にあるものとします。
・現在日時から2週間分の予約が出来る
・各講師に対し各会員が、毎日9:00から24:00まで、30分刻みを1ブロックとし予約ができる
このような感じで予約のDBのアドバイスお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2009/02/09 16:09:19
  • 終了:2009/02/12 13:31:27

ベストアンサー

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012009/02/09 17:05:37

ポイント60pt

>現在日時から2週間分の予約が出来る

php側で現在日時から2週間分だけ表示したり

受付したりするようにすれば良いだけですから

データベース側の設計は特に関係ないです。


>毎日9:00から24:00まで、30分刻みを1ブロック

指定の方法として

・開始時間とブロック数で指定する方法

・ブロック単位で指定する方法

のいずれが使いやすいかですが

ダブルブッキングを検索しやすいのはブロック単位の指定です。


ユーザー画面では開始時間とブロック数を入力してもらう形でも構いませんが

受け取ったphp側で、どのブロックとどのブロックかといったように

変換してデータベースに保存しておくと

既に埋まっているかどうかの確認が楽です。


仮に予約管理テーブルとでも命名しますと

  整理番号(プライマリキー)

  日時(書き込まれた日時)

  講師ID(講師マスターと連携するための外部キー)

  会員ID(会員マスターと連携するための外部キー)

  予約日(予約したい日付)

  予約ブロック(例:9時なら1、9時半なら2、10時なら3など)

  削除日時(キャンセルが書き込まれた日時)

予約日とブロックで検索してデータがあれば予約済みとなります。


講師のスケジュールをしたいのであれば講師IDを指定して

本日から2週間分だけを検索、会員なら会員IDを指定して以下同文。

キャンセルの締め切りはphp側で現在日時から

受付可能かどうかを計算すれば良いですよね。


古くなった情報は不要ということであれば定期的に

予約日で削除するなり、バックアップしてから削除するなりすればよろしいかと。


以上、簡単ではありますが、お役に立ちますでしょうか・・・。

※コメント欄開けておくと、他の方からツッコミいただけるかも・・・。

id:norif_h

ありがとうございます。

まさに欲しかった情報です。

なるほど、予約ブロックに番号をつけて管理ですね。

勉強になります。

※コメント欄開けておきました。。

2009/02/09 17:16:05
  • id:munyaX
    ふと思ったのですが、1講師1生徒の関係なのでしょうか?
    1対多の場合でしたら、多少テーブル構造を工夫できるかもしれません。
  • id:norif_h
    ありがとうございます。
    1予約に対して、1対1です。
    (講師IDと会員IDが1対1ではなく、あくまで「1予約」に対してです)
    お願いします。
  • id:munyaX
    すみません、言葉足らずで。
    文意を理解していただいてありがとうございます。

    >1予約に対して、1対1です。
    なるほど。
    であれば、kn1967さんの設計以上に正規化する必要もなさそうなので、
    現状の仕様の範囲内であれば大丈夫かと思います。
     ※運用して繁盛し始めるとキャンセル待ちのしくみとか
      いれたくなるんですよね(^^;
  • id:norif_h
    munyaX様、ありがとうございます。
    ポイントを差し上げられなくて残念ですが、参考にさせていただきます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません