こんにちは。FLINTERS BASE 開発部 小杉です。
4月に入社したのち、7月に配属され早3ヶ月目。今回はデータウェアハウス(以下DWH)におけるデータモデリングで使用する非正規化とスタースキーマについて書きたいと思います。
研修で学んだのに既に忘却の彼方へ飛んでいる箇所もあったので、基本的な話も振り返りながら書きたいと思います。
正規化と非正規化
DWHの設計の話に入る前に、前提として正規化と非正規化について触れておきます。
簡単に言うと、
- 正規化 :分解
- 非正規化:結合
みたいなイメージ。
正規化に関してもう少し詳細に触れます。(今回は第4正規化以降はふれません)
第1正規形: 一つのセルには一つの値しか入っていないこと
第2正規形: 部分関数従属を含まないこと
例えば、上記の例では単位及び単価が主キーの商品コードのみによって決まるので、他の表に分離できます。つまり、部分関数従属を含むので、第2正規形ではありません。
第3正規形: 推移的関数従属を含まないこと
こちらの場合、仮に住所によって学区域が決まる時、非キー同士で関数従属しており、別のテーブルに分離することができるので第3正規形であると言えません。
以上の説明のように、通常正規化は第3正規形に向かってデータを分割していきます。その理由は特にデータベース(以下DB)のモデリングに関して、正規化をすることによって以下のような恩恵を得られるからです。
- データが正規化を行うことで、データの冗長性が排除され、一貫性と効率性を保持することができます。
- 冗長性 = 一つの情報が複数のテーブルに存在して、無駄なデータ領域と面倒な更新処理が発生する
- 一貫性 = 更新処理のタイムラグがなくデータの不整合が発生しない
これに対して非正規化は正規化の逆。なので、分解されたテーブルを結合していくプロセスとなります。
DBと DWHの違いについて改めて覚え直す
今回データモデリングについて調べているうちに、web上でDB設計に関する記事とDWHに関する記事が両方見つかり、混乱したので簡単にまとめます。
DBとDWHの相違点
相違点としては下記のようなアクセスパターンが挙げられます。
- オンライントランザクション処理(OLTP):一般的なDB
- インデックスキーから少数のレコードを取得・更新
- インタラクティブであり、素早く応答が必要
- オンライン分析処理(OLAP):DWH
- 大量のレコード中の少数の列だけの呼び出しが多い
- 要約統計(レコード数、合計、平均など)を計算した結果をユーザーに返したり、テーブルに保存する
つまり、DWHは大量のレコードを呼び出し、分析することに特化しています。さらに、データが時系列に沿って消去・更新されることなく常に蓄積されていくという点も、通常のDBとは異なるポイントです。
DWHの設計時のデータモデル
上述の通りDWHは分析処理をメインとしています。分析処理を行い、データ利用者がデータを理解しやすく性能が出るような設計が必要なため、後述のディメンショナルデータモデルが適しているとされています。
ディメンショナルデータモデルとは
ディメンショナルデータモデル:データ分析に適したモデルで以下のテーブルから構成される
- ファクトテーブル :トランザクションのように事実が記載されたもの
- ディメンションテーブル:ファクトテーブルを参照して分析するための属性値などを持つもの
例:売上記録などはファクトテーブルに記載され、商品IDや顧客IDなどで紐付き、売上に関連する情報が格納されているのがディメンションテーブル。
この例のように、分析したい対象つまり売上(もしかしたらページビューや感染者数などかもしれません)に対して、商品別や顧客別などディメンションというまとまり単位で分析を行うことができます。
このディメンショナルモデルによく利用されるスキーマが下のスタースキーマです。
スタースキーマとは
スタースキーマとは、最も単純なデータウェアハウススキーマであり、ファクトテーブルの周りをディメンションテーブルが取り囲むような形になったスキーマ構造のことを指します。
ポイントとしては、ディメンションテーブルを非正規化していくことで、結合にかかる時間を減らし、クエリ効率を上げる点です。
また、ディメンションテーブルをさらに正規化していくとスノーフレークスキーマとなります。
スタースキーマがDWHのテーブル構造として優れている理由
スタースキーマがDWHのテーブル構造として優れている理由としては下記が挙げられます。
1. 構造がシンプルで理解しやすい
2. データ分析がしやすい
1つ目に関しては、構造として売上が何によって影響するのか分かり易い点が挙げられます。また、分析の際もデータを使う側はシンプルなクエリのみを用いて、対象のテーブルを作成することができます。
また、2つ目に関して上述のように、ディメンションテーブルを非正規化することで結合回数を減らし、クエリ効率を上げることができるのもメリットです。
今回は触れませんが、 BIツールを用いる際にも非正規化のテーブルは使用されます。研修中、ディメンションとメジャーについてきちんと理解できていなかったので、また学び直してみたいと思います。
参考文献
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
[増補改訂]ビッグデータを支える技術 ——ラップトップ1台で学ぶデータ基盤のしくみ WEB+DB PRESS plus | 西田 圭介 | コンピュータ・IT | Kindleストア | Amazon