2016-11-05 8 views
1

における日台の時間I持って、次のデータ(これは、データベース内の実際のテーブルではありません、それは私が私のデータベース内の各ポストを保存するために必要な情報の単なるグループです):ストア平日とデータベース

X = yes/true 
O = no/false 

Weekday | Morning | Day | Evening | Night | 
--------------------------------------------- 
Monday | X | O | O | X | 
Tuesday | X | O | O | X | 
Wednesday | O | O | X | X | 
Thursday | O | X | O | O | 
Friday | X | X | X | X | 
Saturday | O | O | X | O | 
Sunday | X | X | X | O | 

このようなデータをデータベースに保存する方法を教えてください。私はあまりデータベース設計に熟練していません。このために正規化は必須条件ではありません。

このデータでクエリする必要はありません。親オブジェクト/エンティティに効率的に格納するだけで済みます。

+0

、私は交換することを考えています'Weekday'カラムに' datetime'を付けてください。日付から曜日を把握することは常に可能です。 –

+0

あなたの質問ははっきりしていません...「_私にはたくさんのことがあります」とはどういう意味ですか? – FDavidov

+0

@TimBiegeleisenは、私の前のコメントで示唆したように、必要が平日のみであるかどうかは不明です。はいの場合、実際の日付を保存するポイントは何ですか? – FDavidov

答えて

0

あなたが言ったことから、4つの列(午前、昼、夕方、夜)とプライマリキーを持つテーブルを作成して、個々のデータセットを参照できます。次に、各行エントリにbitfieldを使用します。

提供されたデータセット(ここではPK 001)は、1つのファイルに保存することができます(例:月曜日= 1、火曜日= 2、水曜日= 4、木曜日= 8、金曜日=行として:月曜日(1)+火は(2)+金曜日(16)+日曜日(64)= 83

あなただけ使用する必要があると思いますので、

 
PK  | Morning | Day | Evening | Night | 
001   83  88 116  23 

朝値は、83です128ビットの最大値を格納できるデータ型。これは使用するデータベースによって異なりますが、多くのデータベースは動作するバイナリ(64)タイプを持っています。

その後、日が特定の値で表現されるかどうかをテストするためにビット単位&演算子を使用します

83(朝値)& 16(金)=(従って金曜日真)16
88(デイ値)& 4日(水)= 0(したがって、偽)
116(イブニング値)& 32日(土)= 32日(土

代わりに)、その真のは、あなたはそれぞれの日のためのビットフィールドの列を作成することができます週、値はMorning = 1日目= 2、イブニング= 4、およびナイト= 8あなたの与えられたデータセットは、データベース内の単一の行として表されます

:一見

 
PK | Mon | Tue | Wed | Thu | Fri | Sat | Sun | 
001  9  9  12 2  15 4  7 
0

テーブルの作成には、4列の各グループが1日あたりの4個のに対応する28個の列を作成すると考えられます。何かのように:

CREATE TABLE <name> (SUNDAY_MORNING VARCHAR(1) , 
         SUNDAY_DAY  VARCHAR(1) , 
         SUNDAY_EVENING VARCHAR(1) , 
         SUNDAY_NIGHT VARCHAR(1) , 
         MONDAY_MORNING VARCHAR(1) , 
         MONDAY_DAY  VARCHAR(1) , 
         MONDAY_EVENING VARCHAR(1) , 
         MONDAY_NIGHT VARCHAR(1) , 
         ... 
        ) ; 

もちろん、KEYsを定義する必要がありますが、提供された情報に基づいて何か提案することはできません。

あなたのSPACEの懸念事項によれば、この構造はあなたが想像することができないほど多くのスペースを必要とします。