学習方法

メンター情報

料金

対応時間帯

返信スピード

学習方法

メンター情報

料金

対応時間帯

返信スピード

TechTac

SIer勤務後フリーランスとして独立しました。主に設計・実装のアドバイスをいただくために利用しています。
プロフィールをもっとみる

--

募集をシェアしてメンターを探そう
シェア

※ この募集は締め切られました。

プログラミング PHP データベース DB設計 MySQL

席予約システムにおけるDB設計の相談

2022年3月5日
単発
予算
1,000円 〜 10,000円
提案数
4人が提案中
応募期限
終了

【概要】
席予約システムにおけるDB設計についてアドバイスをいただきたいです。

【目的】
保守性・再利用性、検索時のパフォーマンスが高いDBを設計すること

【募集背景】
現在とある案件で席予約システムを実装しております。
その際のDB設計で迷っております。

【使用技術】
・PHP 8系
・Laravel 8系
・MySQL 8系

【要件】
まだ予約されていない空席情報のみをレスポンスする。
(最短予約時間は30分)

------

(例)
添付いたしました写真を例にしますと、
A席 : 2022/3/20 12:00〜17:00まで予約可能のとき、

・予約1 A席 : 2022/3/20 12:00〜14:00
・予約2 A席 : 2022/3/20 15:00〜17:00

の予約が入っていた場合、

・席名 : A席
・開始日時 : 2022-03-20 14:00
・終了日時 : 2022-03-20 15:00

をレスポンスします。

------

はじめは予約された日時のみをテーブルに格納していたのですが、
そのままでは間に入っている空席を返すのが難しいと考えました。

そこで、すべての30分ごとの時間枠を格納した
時間テーブル(times)を用意することを考えました。

【reservations】
・id : PK
・user_id : FK

【seats】
・id : PK
・name

【times】
・id : PK
・reservation_id : FK, nullable
・seat_id : FK
・start_on 予約開始日時
・end_on 予約終了日時

------

(例)
A席 : 2022/3/20 9:00〜17:00まで予約可能な場合

・id = 1
・star_on = 2022-03-20 09:00:00
・end_on = 2022-03-20 09:30:00

・id = 2
・star_on = 2022-03-20 09:30:00
・end_on = 2022-03-20 10:00:00

・id = 3
・star_on = 2022-03-20 10:00:00
・end_on = 2022-03-20 10:30:00
...

------

9:00〜10:00を予約した場合は2レコード分reservationsと紐づくイメージです。
reservation_id=nullか否かで空席がどうかを判断できると思います。

ただ、この設計ではレコード数が膨大になってしまうという欠点があります。

再利用性・保守性・パフォーマンスが上がるアイデアがございましたら
お力をいただきたいです!

【コミュニケーション方法】
チャットのみ

【ご提案時のお願い】
単発プランを設定されていない方は、提示いたしました予算内で
プランの作成をお願いいたします!

契約期間はご対応可能時間帯にもよりますが、一週間以内を想定しております。

【契約後】
コミュニケーションの際はER図の一例をご提示いただくと助かります!
また実際のクエリビルダ・Eloquantの一例までいただけますとたいへん励みになります。

TechTac

プロフィール

SIer勤務後フリーランスとして独立しました。主に設計・実装のアドバイスをいただくために利用しています。

--

募集をシェアしてメンターを探そう
シェア