そこでアドバイス頂きたいです。
例えば、不特定多数の講師に対して、不特定多数の会員が予約をするシステムなのですがデータベース設計はどのようにしたらベストなのでしょうか?
講師マスターと会員マスターは既にあるものとします。
・現在日時から2週間分の予約が出来る
・各講師に対し各会員が、毎日9:00から24:00まで、30分刻みを1ブロックとし予約ができる
このような感じで予約のDBのアドバイスお願いいたします。
>現在日時から2週間分の予約が出来る
php側で現在日時から2週間分だけ表示したり
受付したりするようにすれば良いだけですから
データベース側の設計は特に関係ないです。
>毎日9:00から24:00まで、30分刻みを1ブロック
指定の方法として
・開始時間とブロック数で指定する方法
・ブロック単位で指定する方法
のいずれが使いやすいかですが
ダブルブッキングを検索しやすいのはブロック単位の指定です。
ユーザー画面では開始時間とブロック数を入力してもらう形でも構いませんが
受け取ったphp側で、どのブロックとどのブロックかといったように
変換してデータベースに保存しておくと
既に埋まっているかどうかの確認が楽です。
仮に予約管理テーブルとでも命名しますと
整理番号(プライマリキー)
日時(書き込まれた日時)
講師ID(講師マスターと連携するための外部キー)
会員ID(会員マスターと連携するための外部キー)
予約日(予約したい日付)
予約ブロック(例:9時なら1、9時半なら2、10時なら3など)
削除日時(キャンセルが書き込まれた日時)
予約日とブロックで検索してデータがあれば予約済みとなります。
講師のスケジュールをしたいのであれば講師IDを指定して
本日から2週間分だけを検索、会員なら会員IDを指定して以下同文。
キャンセルの締め切りはphp側で現在日時から
受付可能かどうかを計算すれば良いですよね。
古くなった情報は不要ということであれば定期的に
予約日で削除するなり、バックアップしてから削除するなりすればよろしいかと。
以上、簡単ではありますが、お役に立ちますでしょうか・・・。
※コメント欄開けておくと、他の方からツッコミいただけるかも・・・。
1対多の場合でしたら、多少テーブル構造を工夫できるかもしれません。
1予約に対して、1対1です。
(講師IDと会員IDが1対1ではなく、あくまで「1予約」に対してです)
お願いします。
文意を理解していただいてありがとうございます。
>1予約に対して、1対1です。
なるほど。
であれば、kn1967さんの設計以上に正規化する必要もなさそうなので、
現状の仕様の範囲内であれば大丈夫かと思います。
※運用して繁盛し始めるとキャンセル待ちのしくみとか
いれたくなるんですよね(^^;
ポイントを差し上げられなくて残念ですが、参考にさせていただきます。