2011-12-07 8 views
6

MySQLデータウェアハウスで日付ディメンションを処理したいと考えています。 (私はDW世界で初心者です)MySQLで日付ディメンションの主キーとしてDATEフィールドを使用する

私はGoogleでいくつかの検索を行い、主キーが単純なUNSIGNED INTEGERである多くのテーブル構造(大部分の日付)を見ました。

DATEフィールドをプライマリキーとして使用しない理由は、MySQLでは3バイトVS 4バイトINTEGERのためですか?

例:

CREATE TABLE dimDate 
id INTEGER UNSIGNED NOT NULL PRIMARY AUTOI_NCREMENT, 
date DATE NOT NULL, 
dayOfWeek 
... 

VS

CREATE TABLE dimDate 
date DATE NOT NULL PRIMARY, 
dayOfWeek 
... 
+2

同じ日付に複数のレコードがあるとは思いませんか? – Mat

+1

いいえ、私はファクトテーブルのディメンションテーブルではなく、同じ日付のレコードが多数必要です。 – nemenems

+0

Kimballは、あらゆる次元pkは代理でなければならないと言っています。 –

答えて

6

あなたはdate型であり、何の2つの行がこれまでと同じ日付を持っていません場合は、その後、あなたはきっとできる列を持つテーブルを持っている場合この列はPRIMARY KEYとして使用してください。

プライマリキーの完全な候補がないケースが多いため、プライマリキーが単純なUNSIGNED INTEGERの例がたくさんあります。 AUTO_INCREMENTでは、挿入時にこの列をデータベースで自動的に埋め込むことができます。

14

日付ディメンションは、主にプライマリキーの日付(2011-12-07)または日付関連の整数(20111207)を持つ特殊なものです。これにより、ファクト表の(日付による)良好な区分化が可能になります。

他のタイプのディメンションの場合は、サロゲート(整数)キーを使用することをお勧めします。テンプレートとして

は、各次元は、通常ではなく日付の主キーとして整数形式の日付(20111207)を見つけることがより一般的であり、多くの場合、これによりキー0, -1, -2, ...

と一致さunknown, not entered, error, ...のエントリを有しています - 日付型のキーでunknown, not entered, error, ...を表すのはちょっと面倒です。

関連する問題