データウェアハウスの設計原理
非正規形のデータ構造では更新時異状が発生する。更新時異状があると実装できない機能が(ふつうは)出てくるので、OLTPシステムでは正規化が必要になる。
一方データウェアハウスには日中のデータ更新がないので、OLTPの設計原理に従う必要がない。では何を指針として設計すればよいか。
古典的なデータウェアハウスの設計原理にディメンジョナル・モデルがある。
ディメンジョナル・モデルに従ったDBは、いわゆるスタースキーマ
- 多数の外部キーと小数の数値データからなるファクトテーブルと
- それを取り巻く次元テーブル
この2段でおしまい、という形になる。
このモデルでは、リレーションシップは全てファクトと次元の間に張るのであって、
売上ファクト = { 年月日, 事業部コード(FK), ブランドコード(FK), 製品コード(FK), 数量 } 事業部次元 = { 事業部コード, 事業部名 } ブランド次元 = { ブランドコード, ブランド名 } 製品次元 = { 製品コード, 製品名 }
↓このように次元テーブル間に張ることはない。
売上ファクト = { 製品コード(FK), 数量 } 製品次元 = { ブランドコード(FK), 製品コード, 製品名 } ブランド次元 = { 事業部コード(FK), ブランドコード, ブランド名 } 事業部次元 = { 事業部コード, 事業部名 }
ラルフ・キンボールの古典

- 作者: ラルフキンボール,Ralph Kimball,藤本康秀,岡田和美,下平学,伊藤磨瑳也,小畑喜一
- 出版社/メーカー: 日経BP社
- 発売日: 1998/05/14
- メディア: 単行本
- 購入: 2人 クリック: 68回
- この商品を含むブログ (8件) を見る
P-112
次元がいかに巨大でもスノーフレーク化してはいけない。
次元をスノーフレーク化させるときには、劣悪なブラウズ速度を覚悟しなければならない。
ところが、この話があてはまるのは古典的な構成のデータウェアハウスシステムに対してであって、
今のDWHではアドホックなクエリのパフォーマンスなんて気にする必要はないのだ。
DWHを構築するほどの会社はBusinessObjectsとかCognosとかのBIツールも買っていて、エンドユーザからのクエリには、これらのツールで対応している。
BIツールは内部に専用のデータファイルを抱えていて、「DWHに接続してSQLを発行する」ということをしない。
この構成では、DWHの役目は「夜間バッチでBIツールのデータファイルを作ること」だけになる。
アドホックなクエリに高速に応答する必要がないから、DWHをディメンジョナル・モデルにする必要はない。
だから、今その辺で動いているDWHには、設計原理やデータモデルなんてものはない。完全フリーダムの世界になっている。