質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

18458閲覧

店舗の営業時間のDB設計で困っています。

yuto_ktok

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

3クリップ

投稿2016/12/04 06:02

###前提・実現したいこと
多数店舗の営業時間情報を格納するDBを設計しようと考えています。

ただ、
営業時間が、曜日別で異なることろがある
昼休みがある
など、店舗の営業時間形式はまちまちです。

のちに、〇〇日の〇〇時に開いているお店を検索ということがしたいので、ちゃんと検索しやすいようDBに保存したいのですが、
なかなか汎用的で、うまいDB設計が思いつきません。

よくあるケースだと思うのですが、、、
もしよいアイデアをお持ちの方がいましたら
ご教授いただけますと幸いです。

よろしくお願いします。

###発生している問題
汎用的かつ検索できるDB設計

###補足情報(言語/FW/ツール等のバージョンなど)
rdbsはmysqlの予定です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

自分は、以下のようなテーブルを作って管理することが多いですね。曜日ごとの営業時間の開始と終了を入れます。
昼休みなどで連続していない時間があるなら、レコード分ければ対応できます。

sql

1CREATE TABLE `shops` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT, 3 `name` varchar(255) NOT NULL, 4 PRIMARY KEY (`id`) 5); 6 7CREATE TABLE `shop_times` ( 8 `id` int(11) NOT NULL AUTO_INCREMENT, 9 `shop_id` int(11) NOT NULL, -- 外部キー (shops.id) 10 `weeks` varchar(255) NOT NULL, -- 週数 11 `mon_start` time DEFAULT NULL, 12 `mon_end` time DEFAULT NULL, 13 `tue_start` time DEFAULT NULL, 14 `tue_end` time DEFAULT NULL, 15 `wed_start` time DEFAULT NULL, 16 `wed_end` time DEFAULT NULL, 17 `thu_start` time DEFAULT NULL, 18 `thu_end` time DEFAULT NULL, 19 `fri_start` time DEFAULT NULL, 20 `fri_end` time DEFAULT NULL, 21 `sat_start` time DEFAULT NULL, 22 `sat_end` time DEFAULT NULL, 23 `sun_start` time DEFAULT NULL, 24 `sun_end` time DEFAULT NULL, 25 `hol_start` time DEFAULT NULL, 26 `hol_end` time DEFAULT NULL, 27 PRIMARY KEY (`id`) 28);

投稿2016/12/04 06:23

編集2016/12/04 08:34
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuto_ktok

2016/12/04 06:47

ご解答ありがとうございます。 なるほど曜日別につくるのですね。 参考になります。 ただ今調べていると、 毎週第二、第四土曜休み というケースもでてきました。 (後出しですみません。) 別テーブルに分けて shopテーブル shop-timeテーブル timeテーブル - id - start - end - day-week (曜日) - weeks (第二、第四とかだと2,4と記載) とかなのかなと考えております。
popobot

2016/12/04 07:40 編集

そうですね。週数ごとに管理したいならweeksとかが必要になると思います。 曜日を正規化するのでもいいと思います! 自分は表示や編集が楽なので、回答のようなやり方をよくやりますが、どっちでもいいと思いますよ。 timeマスターテーブルを用意して、shop-timeの中間テーブルで紐付けるのは、どうなんでしょう ほとんどの店舗で営業時間が同じならいいと思いますが、違う場合が多いなら、店舗ごとに値を持った方が楽な気がします。
yuto_ktok

2016/12/04 08:42

ご返信ありがとうございます。 なるほど、確かにおっしゃるとおり、shop-timeテーブルは、全く同じ営業時間が被るケースはそこまで無さそうなので、これは冗長ですね。 ご指摘を踏まえて、 shopテーブル - shop_id - 以下略 open-timeテーブル - shop_id - open_time - end_time - day_week - weeks こちらの設計で行かせて頂こうと思います。 ご丁寧な回答本当にありがとうございます。
guest

0

2つのテーブルにて実現が可能です。
a)店舗スケジュールマスタ
b)店舗カレンダーマスタ

・店舗スケジュールマスタには、店舗毎に定期的に発生する項目を設定します。
営業時間、定休日、曜日毎の情報等

・店舗カレンダーマスタには、店舗毎に日付を持ったテーブルで、日別の情報を
保存します。このカレンダーテーブルは、店舗スケジュールより3~6ヶ月先(例)まで
作成します。もし定期的でない事象は、作成後にテーブルを変更します。
曜日情報もこのテーブルには、日の情報として作成されます。
もし件数が問題であれば、店舗スケジュールと異なる日付のみを作成する方法も有ります。

投稿2016/12/04 08:32

編集2016/12/04 08:38
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuto_ktok

2016/12/04 09:03

ご解答ありがとうございます。 なるほど、曜日マスターだけでなく、カレンダーマスターも用意することで、非周期的な休みもカバー出来そうです。 カレンダーマスターの用意も検討してみたいと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問