異なる曜日の値を格納するための最適な表スキーマは何でしょうか?

私はあなたがドロップダウンボックスでタイムスロットを選ぶことができるウェブサイトを持っています。ドロップダウンボックスの項目は次のようになります。

  • 午前6時〜午前10時
  • 午前10時〜午後1時
  • 1PM - 4PM

私は2列のデータベーステーブルにこれを格納します。 IDと説明。 (私は単に "6AM - 10AM"という文字列をvarcharフィールドに格納しています)

ユーザーが日付とタイムスロットを選択できるように、日付ピッカーを追加する必要があります。私はdatepickerすべての有線を持っているし、私は新しい要件があることに気づいた:

私はその日に応じて異なるタイムスロットセットをサポートする必要があります。たとえば、金曜日の場合は、次のようになります。

  • 午前6時〜午前10時
  • 午前10時〜午後1時
  • 1PM - 4PM

それが土曜日だったなら、それはそうかもしれない:

  • 午前6時〜午後8時
  • 午前8時〜午後12時
  • 1PM - 2PM

私はこの情報を保存するために必要な新しいテーブルを調べようとしています。私の最初の考えはでした。

    新しいテーブルを作成せず、DayOfWeekという余分なフィールドを追加します。現在の曜日とピックアウトタイムスロットに基づいてドロップダウンリストをロードする必要があるときは、

  1. 新しいテーブルを作成して、

私は、人々がこの情報を格納するための理想的なデータベーステーブル設計となるものについてフィードバックを得ているかどうかを見たいと思っていました。

1
私はこれらのテーブルは非常に小さく(非常に大きく成長する可能性は低いので)、正規化は少し残酷すぎると思う
追加された 著者 flipchart,

1 答え

Option 1


あなたはこの構造を持っていると言います

Hours      |  WeekDay | Weekend
-------------------------------   
6AM - 10AM |     1    |   0
10AM - 1PM |     1    |   0 
1PM - 4PM  |     1    |   0
6AM - 8AM  |     0    |   1
8AM - 12PM |     0    |   1
1PM - 2PM  |     0    |   1

2つのタイプがあってもSQLはかなり乱雑に見えます

Select  Hours 
From
      hoursTable  
Where 
     (weekDay = 1 and {WeekDayParam} = 1)
     または
     weekEnd = 1 and {WeekEndParam} = 1

オプション2


このように見える場合

Hours      |  Type  
---------------------   
6AM - 10AM |     1 
10AM - 1PM |     1    
1PM - 4PM  |     1 
6AM - 8AM  |     2   
8AM - 12PM |     2   
1PM - 2PM  |     2   

その後、SQLははるかに簡単です

 Select  Hours 
 From
      hoursTable  
 Where 
     type = {typeParam}

新しい要件への対応方法


別のバリアントを追加する方法:休日

海オジョィカま

Hours        |  WeekDay | Weekend | Holiday 
-----------------------------------------  
6AM - 10AM   |     1    |   0     |  0       
10AM - 1PM   |     1    |   0     |  0
1PM - 4PM    |     1    |   0     |  0
6AM - 8AM    |     0    |   1     |  0
8AM - 12PM   |     0    |   1     |  0
1PM - 2PM    |     0    |   1     |  0
10:30PM  2PM |     0    |   1     |  0

または

Hours        |  Type  
---------------------   
6AM - 10AM   |     1 
10AM - 1PM   |     1    
1PM - 4PM    |     1 
6AM - 8AM    |     2   
8AM - 12PM   |     2   
1PM - 2PM    |     2   
10:30PM  2PM |     3

最初のソリューションでは、新しい時間ポリシーを取得するたびにSQLと呼び出しコードのデータ構造を更新する必要がありますが、2番目の方法ではそうではありません。

2番目の解決策を考えてください。

1
追加された
あなたのポイントを感謝しますが、私はどのように私はTYPEを得るか把握しようとしています。 TypeIdとTypeNameを持つ他のテーブルが必要になります(例の行はMFと1などのようになります)。問題は、DateTimeプロパティをどのように取ることができるかを把握する必要があることです。私は今、私は実際にこの検索のための整数としてDayOfWeekを格納する必要があると思っています..考えますか?
追加された 著者 leora,
私は知っているが、私はまだそれが上記のTypeカラムにどのように変換されるのか理解していない。木曜日に木曜日の時間のリストを取得する必要がある場合>木曜日からタイプ= 2になるにはどうすればよいですか?
追加された 著者 leora,
@leora DayOfWeekとWeekendのマッピングは、おそらくデータ構造の一部ではないはずです。これは、ストアドプロシージャまたはクライアントコードで実行する必要があります。ほとんどすべてのdbと言語がその決定をサポートしています。たとえば、またはSQL Serverでのdaymondayの選択 stackoverflow.com/questions/4791153/…
追加された 著者 Conrad Frix,