2013-10-23 17 views
5

データベースに店舗別の営業時間を保存したい。現時点で私は最も簡単な解決法を使っています:データベースにさまざまな店舗開店時間を保存する方法

CREATE TABLE opening_times(
shop_id int(3) NOT NULL, 
times varchar(1000) NOT NULL 
); 

INSERT INTO opening_times VALUES(3,"Mon-Fri 8:30 to 18:00 
Sat 9:00 to 12:00"); 

INSERT INTO opening_times VALUES(4,"24/7"); 

INSERT INTO opening_times VALUES(5,"Mon-Sun 8am-8pm"); 

CREATE TABLE opening_times(
shop_id int(3) NOT NULL, 
monday varchar(11) NOT NULL, 
tuesday varchar(11) NOT NULL, 
wednesday varchar(11) NOT NULL, 
thursday varchar(11) NOT NULL, 
friday varchar(11) NOT NULL, 
saturday varchar(11) NOT NULL, 
sunday varchar(11) NOT NULL 
); 

INSERT INTO opening_times VALUES(
3, 
"09:30-18:30", 
"09:30-18:30", 
"09:30-18:30", 
"09:30-18:30", 
"09:30-18:30", 
"09:30-12:30", 
"CLOSED" 
); 

しかし、これはまだいくつかの問題につながる:複数回と

  • 日数できません。私のデータセットの多くは、毎日時間を固定または彼らは簡単に検索できません24/7
  • 開いているとして(午後6時まで午前11時&午後1時まで午前8時)
  • は未使用/冗長フィールドがたくさんあります。
  • 祝祭日は表現できません。

オープンタイムを格納する柔軟な方法があるかどうかは疑問です。多分WD[1-5]{8-18},WD[6]{8-14},CD[12/25-12/26]{!0-24}のような構文であるかもしれません。WDは平日を意味し、CDはカレンダー日または例外の範囲を表し、!を意味します。を意味します。

このような情報を保存する一般的な方法はありますか?平日は1と7の間の値を持つことができ、それ

shop_ID, Weekday, Start_hour, end_hour 

として

答えて

14

格納することができる

SELECT DAYOFWEEK('2007-02-03') 

開始時間と終了時間の出力として、データ

ストアを正規化時間内http://dev.mysql.com/doc/refman/5.0/en/time.html

これですべてはあなたが

select start_hour, end_hour from table where weekday=dayofweek(curdate()) and shop_id=1 

を行うだろうお店のための日付の時間を見つけるには

をカバーしていたお店のための日のために2時間間隔が必要ですか?問題は、

`shop ID, weekday, start_hour, end_hour` 
1;   1;  08:00:00 ; 09:00:00 
1;   1;  10:00:00 ; 11:00:00 

は例外の場合、日付とお店でexceptions tableを追加することはできません。あなたはそれを問い合わせることができ、それがヌル(例外ではない)であれば、営業時間を返します。また、店舗ごとに日付を保存することもできますが、それはデータを膨らませます。

+3

ナイトクラブの場合は、金曜日22:00まで開いて土曜日5:00と言うとどうなりますか? – Weltschmerz

+0

一般的なケースでは、単純な開始日時と終了日時は任意の可能性をカバーします。上記の例は非常に特殊なケースです。だから私はテーブルopening_times、列(ID、start_datetime、end_datetime)と言うだろうし、forseeable将来すべてのために作成します。毎週繰り返して曜日を使用したい場合は、start_weekday、start_hour、end_weekday、end_hourなどの別の曜日の列を追加するだけです – AdrianBR