2012-02-09 7 views
1

.NETアセンブリで使用するには、次の情報をデータベースに格納する必要があります。 18:30月〜金税込銀行休業日に
AMBER - 午後4時30分::午前9時 - 午後4時30 & 18時30分 - 20:このような情報を格納する適切な方法

RED:彼らは、特定の色がアクティブであることを時間を表すしています18:30土&日
GREEN - 30月金税込祝日& 16:30:午後12時00分 - 9時& 20:30 - 24:00 月金に含祝日&午後12時00分 - 16:30 * 18:30 - 24:00 土&日

私は、最初はそうのようなデータベーススキーマをオフに設定しました:

カラム名ID Pkのヌル?データ型デフォルトヒストグラム暗号 ALGソルト

RED_WEEKDAY_START 14 Y NUMBERなし
RED_WEEKDAY_END 15 Y NUMBERなし
RED_WEEKEND_START 16 Y NUMBERなし
RED_WEEKEND_END 17 Y NUMBERなし
AMBER_WEEKDAY_START 18 Y番号なし
AMBER_WEEKDAY_END 19 Y NUMBERなし
AMBER_WEEKEND_START 20 Y NUMBERなし
AMBER_WEEKEND_END 21 Y NUMBERなし
GREEN_WEEKDAY_ 22 Y NUMBERなし
GREEN_WEEKDAY_END 23 YのNUMBERなしに
GREEN_WEEKEND_START 24 Y NUMBERなし
GREEN_WEEKEND_END 25 YのNUMBERなし

を開始していないしかし、これで問題のカップル:

  • は取り扱っておりません
  • 各色ごとに1つの期間しか許されません(たとえば、平日に緑色に分割されます)

このようなデータを保存するにはどうすればよいでしょうか?

+0

祝日は年ごとに変更することができます。毎年最新の状態に保つ必要があるDateTime、HolidayNameのペアのテーブルが必要になるでしょう。 – mbeckish

+0

私が現時点で必要としているのは、その色が銀行休暇であるかどうかを指定することです。もしそれがアクティブになった場合には、ロジックが今他の場所で処理されます。 –

+0

必要なのは、 @ iefpwのアドバイスに従います - 色のマスターテーブルと色ごとの設定の詳細テーブルを作成します。 – mbeckish

答えて

2

5列

Colour | Day | StartTime | EndTime | AppliesOnBankHolidays 

(RED:16時30分 - 18時30分月〜金税込銀行休業日に)変換

RED|Mon|16:00|18:30|True 
RED|Tue|16:00|18:30|True 
RED|Wed|16:00|18:30|True 
RED|Thu|16:00|18:30|True 
RED|Fri|16:00|18:30|True 

AMBER

まで:午前9時 - 午後04時30 & 18 :30 - 20時30月に金税込祝日16時30 & - 午前18時30分土&日は

AMBER|Mon|09:00|16:30|True 
AMBER|Tue|09:00|16:30|True 
AMBER|Wed|09:00|16:30|True 
AMBER|Thu|09:00|16:30|True 
AMBER|Fri|09:00|16:30|True 
AMBER|Mon|18:30|20:30|True 
AMBER|Tue|18:30|20:30|True 
AMBER|Wed|18:30|20:30|True 
AMBER|Thu|18:30|20:30|True 
AMBER|Fri|18:30|20:30|True 
AMBER|Sat|16:30|18:30|False 
AMBER|Sun|16:30|18:30|False 
に変換

そして3行目を演習として残しましょう!

実際にスペースを節約したい場合は、気軽に日付と色を標準化してください。銀行休日の質問は、あなたが使用するすべてのクエリ内に参加することができ祝日の別のテーブルが必要です。

擬似SQL

SELECT t.Colour, t.StartTime, t.EndTime 
FROM Times t 
WHERE Day(Today)==t.Day AND NOT (t.AppliesOnBankHolidays==FALSE AND IsBankHoliday(Today)) 
+0

ありがとうMark私はあなたがそこにいると思う –

0

エントリごとにテーブルと2番目のテーブルを作成する必要があります。 1対多の関係があります。 2番目のテーブルで外部キーを使用します。メインエントリを挿入し、主キーを取得し、キーごとにそのキーの複数の行を作成します。 1対多の関係。あなたは完全にそれを壊さなければなりません。ここでのキーは、データベースによって生成された主キーと外部キーです。

0

私はこの少しを正常化するだろう。その後

fldColorID   | int 
fldColorName  | varchar(28) 
fldColorDescription | varchar(128) (might not be necessary) 

適用され、開始/終了時間を含むテーブルでそれをフォローアップ:まず、私は「色」を特定するテーブルを持っていると思います

fldSpanID    | int 
fldStartTime   | datetime 
fldEndTime    | endtime 
fldIsHoliday   | bit 
fldSpanDescription  | varchar(128) (necessary from a human readability point) 
fldColorID    | int (FK) 

これは、あなたの能力を与えるだろう複数の色を追加し、各色に複数のスパンを適用することができます。また、特定のスパンを休日のスパンとしてマークすることもできます。必要に応じて、別のブール値を追加して週末のスパンを追跡することもできます。

関連する問題