はじめて本格的なデータベース設計をします。
周りに誰も相談出来る人がいないのでどうかご回答のほどよろしくお願いします。
前提
具体的なイメージを共有したいので、サービスはホットペッパービューティーを例にしてご質問させていただければと思います。
各サロンは独立していて、それぞれが施術メニューを持っており、それぞれが予約を受け付けることができ、それぞれがそれぞれの情報を編集できるというイメージです。
質問内容
サロンがメニュー毎に、施術可能時間(必須)、予約期限(任意)、期間限定公開(任意)を設定できるようにする場合、テーブル設計はどのようにするのがベターでしょうか?
<言葉の定義>
- 施術可能時間(必須入力)
いわゆる営業時間。
このメニューは夜限定とか有りうるので、あえてサロン毎ではなくメニュー毎に持っている。
- 予約期限(任意入力)
施術可能時間のオプションのようなもの。
この施術を受けるにはいついつまでに予約が必要といった設定。
- 期間限定公開(任意入力)
期間限定商品のようなもの。
ある時期限定のメニュー等、ある一定期間のみ予約を受け付けたい場合に設定。
やったこと
とりあえず以下のようなイメージで考えてみましたが、これが正しいのかも判別がつかない状況です。
もっと良いモデルの設計があるのではないかと思うのですが、今のスキル的にこれが自分の中でベストな答えです。
サロンテーブル
サロンID | 名前 |
---|---|
1 | サロンA |
2 | サロンB |
メニューテーブル
メニューID | サロンID | 名前 |
---|---|---|
1 | 1 | パーマ |
2 | 1 | カット |
3 | 2 | クリスマス限定カラー |
時間テーブル
時間ID | メニューID | 施術可能日 | 施術可能時間(自) | 施術可能時間(至) | 予約期限日 | 予約期限時間 |
---|---|---|---|---|---|---|
1 | 1 | 火 | 10:00 | 20:00 | 日 | 20:00 |
2 | 1 | 水 | 10:00 | 20:00 | 火 | 20:00 |
3 | 1 | 木 | 10:00 | 20:00 | 水 | 20:00 |
4 | 1 | 金 | 10:00 | 21:00 | 木 | 20:00 |
5 | 1 | 土 | 10:00 | 21:00 | 金 | 20:00 |
6 | 1 | 日 | 10:00 | 20:00 | 土 | 20:00 |
7 | 2 | 火 | 10:00 | 20:00 | null | null |
8 | 2 | 水 | 10:00 | 20:00 | null | null |
9 | 2 | 木 | 10:00 | 20:00 | null | null |
10 | 2 | 金 | 10:00 | 21:00 | null | null |
11 | 2 | 土 | 10:00 | 21:00 | null | null |
12 | 2 | 日 | 10:00 | 20:00 | null | null |
13 | 3 | 2018-12-24 | 10:00 | 20:00 | 2018-12-23 | 22:00 |
14 | 3 | 2018-12-25 | 10:00 | 20:00 | 2018-12-23 | 22:00 |
※メニュー毎に365日分のレコードが出来ると恐ろしいことになるので、基本は日付単位で持つのではなく、曜日単位で持ち、アプリ側で現在日付をもとに判定するように設計してみました。
※パーマ(メニューID=1)は基本前日(月は休み)の20:00までに予約が必要ということを表しています。
※カット(メニューID=2)はいつでも予約できるということを表しています。
※クリスマス限定カラー(メニューID=3)は特定日のみ施術可能かつ、前日の22:00まで予約が必要ということを表しています。
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー