質問: 予約システムでの時間の設計について mysqlで部屋を利用するための予約システムを作ろうと考えております。 設計として下記を考えてみたのですがおかしいでしょうか。 要件は下記のとおりです。 ・a、b、c3つの部屋の利用予約を時間単位でおこなう ・重複する時間は予約できない ・日を跨ぐ予約はできない テーブル設計 トランid(int)|開始時刻(datetime)|終了時刻(datetime)|部屋id(int) 時間についてはdatetime式で2013-03-22 12:00:00 と保存させる予定です。 入力を簡素にするため、時刻は時、分個別のプルダウンで30分刻みにしようと考えています。 そこで分からなくなってきたのがデータ保持の方法なのですが、 例えば10:00-12:00と予約入力された場合、datetime式ですと秒まで保存されますので 2012-03-22 10:00:00 - 2012-03-22 12:00:00 となりますよね。 そうなりますと、別の予約で12:00-15:00を確保したい場合、開始時刻は重複してしまうことに なりますので、テーブルには2013-03-22 10:00:01 - 2013-03-22 11:59:59と登録したほうが いいのでしょうか。 ただ、これだと時間を変更したい場合の修正の際に困ったことになりそうです。 またこの設計の場合、 開始時刻と終了時刻が他の予約と重複していないかのsqlを 考える場合、非常にやっかいなような気がしてきました。 何か別のよい設計のヒントがあればご教授願えないでしょうか。 宜しくお願いいたします。
回答: >1.2.の問い合わせで件数が0でしたら重複なしと判断できるのですが、 >いちいち2回の検索をおこなうのもどうなのでしょうか。 orでつないで1回で検索すれば? ~指定時刻(開始)が開始時刻と終了時刻の間 or 指定時刻(終了)が開始時刻と終了時刻の間