前提
設計段階なので、提示できるソースコード(作成しているアプリ)はありません。
ただ具体的なイメージを共有したいので、プログラミング言語はPHP、RDBMSはMySQL、サービスはホットペッパービューティーのようなサロン検索サイトを例にしてご質問させていただければと思います。
質問内容
サービスの開発者として、サロンのメニュー毎に予約締切日と施術時間を表示する機能を実装することになったとします。各項目の表示要件は下記のように仮定します。
- 予約締切日(Reservation Deadline)
N日hh:mmまでという表示ができる
表示例) 当日10:00まで、3日前20:00まで
- 施術時間(Time required)
約N分or約N時間という表示ができる
表示例) 約45分、約2時間
みなさんなら、これらをどのような方針でどのように設計・実装されますでしょうか?
考えてみたこと
方針はいずれかだと考えました。
0. テーブル定義はシンプルにしてプログラムで頑張る。
0. プログラムで頑張らなくても良いようにテーブル定義を工夫する。
上記1の方針では考えてもわからなかったため、上記2の方針で、以下のように考えました。
テーブル定義(イメージ)
SQL
1CREATE TABLE `menu` ( 2 `id` SERIAL, 3 ︙ 4 `reservation_deadline_day` INT COMMENT '予約締切日前(例:0)', 5 `reservation_deadline_time` TIME COMMENT '予約締切時間(例:10:00)', 6 `time_required` INT COMMENT '施術時間(例:2)', 7 `time_required_unit` VARCHAR(2) COMMENT '施術時間単位(例:時間)' 8);
プログラム(イメージ)
PHP
1//予約締切日 2$reservation_deadline_day; //DBの値が入っている 3$reservation_deadline_time; //DBの値が入っている 4$view_reservation_deadline; //画面表示用 5 6if ($reservation_deadline_day === 0) { 7 $view_reservation_deadline = "当日$reservation_deadline_timeまで" 8} else { 9 $view_reservation_deadline = "$reservation_deadline_day日前$reservation_deadline_timeまで" 10} 11 12//施術時間 13$time_required; //DBの値が入っている 14$time_required_unit; //DBの値が入っている 15$view_time_required //画面表示用 16 17$view_time_required = time_required . $time_required_unit;
しかしながら私としては、1つの項目を表示するのに2カラム要する(例:施術時間=time_required+time_required_unit)というところにいまいちしっくりきていません。
さらに、方針1での実装イメージがわかなかったことから、もっとスマートで良い方法があるのではないかと思い質問させていただきました。
具体的なイメージを共有したいがためにPHPとMySQLで質問しましたが、回答はどんな言語・DBでも構いません。
むしろ、特定言語や特定DBに依存しないかたちで、上記要件を満たすためのベターな考え方を知りたいです。
答えは1つでないことは承知の上ですが、プロフェッショナルなみなさまの考えをいただけますと幸いです。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/02/19 06:12 編集