【スノーフレークスキーマ】

スノーフレークスキーマ とは?

最終更新:
💡 ディメンションを分けてつなぐ、データ倉庫の「雪の結晶」

データウェアハウスで使うスキーマ設計。スタースキーマのディメンションを正規化して関連する複数のテーブルに分け、ファクトの周囲に枝分かれする構造を作る。

📌 このページのポイント
ディメンションを分けて参照する商品商品ID / 商品名サブカテゴリID日付日付ID年 / 月 / 日売上ファクト商品ID / 日付ID顧客ID金額サブカテゴリサブカテゴリID名称 / カテゴリID顧客顧客ID / 名前地域IDカテゴリカテゴリIDカテゴリ名地域地域ID地域名矢印:キーによる参照(実行順ではない)
商品→サブカテゴリ→カテゴリ、顧客→地域を分けた例。橙は分析する金額などを持つファクト、青は属性を持つディメンション。すべてのディメンションを分割する必要はありません。
ひよこ ひよこ
スタースキーマと何が違うの?
ペンギン先生 ペンギン先生
商品などのディメンションを、関連する複数テーブルに分けるところだよ。たとえば商品はサブカテゴリID、サブカテゴリはカテゴリIDを持ち、順に参照する。スタースキーマでも分類の階層を1つの商品テーブルの列に持てるので、階層があるかどうかだけでは区別しないんだ。
ひよこ ひよこ
分けるとどんな良さがあるの?
ペンギン先生 ペンギン先生
複数の商品で同じカテゴリ名を繰り返し持たず、カテゴリ表で管理できるよ。属性の重複や同じ内容を何か所も直す負担を減らせる。ただし、キーの対応や更新方法も正しく管理しないと、分割だけで整合性が保証されるわけではないんだ。
ひよこ ひよこ
分析のクエリは変わる?
ペンギン先生 ペンギン先生
カテゴリ別の売上を調べるなら、売上から商品、サブカテゴリ、カテゴリへとJOINする例があるよ。1つのディメンションに属性をまとめる場合より、関係をたどる数やクエリの複雑さが増える。図の矢印はテーブルのキーによる参照で、処理が実行される順序ではないよ。
ひよこ ひよこ
容量が減るなら、いつも有利なの?
ペンギン先生 ペンギン先生
そうとは限らないよ。重複を減らす利点があっても、テーブルやキーの増加、圧縮の仕組みなどで実際の容量は変わる。Power BIのモデルでは、分割をそのまま持つと容量やフィルター処理に不利になる場合もある。データ量や使う基盤で確かめよう。
ひよこ ひよこ
どんなときに選べばいい?
ペンギン先生 ペンギン先生
分類などの属性を別表で管理したいか、分析する人が扱いやすいか、必要なクエリがどれだけ複雑になるかを比べるといいよ。データ倉庫側は分割しても、分析ツール側では1つの表にまとめることもできる。スタースキーマより必ず速い、または必ず遅いとは決めつけないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スノーフレークスキーマ」って出てきたら「ディメンションを正規化して分けたデータウェアハウス設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Snowflake Schema」 = 雪の結晶のスキーマ
💬 ファクトの周囲で、ディメンション同士の関係が枝分かれする形を雪の結晶にたとえた名前だよ。

参考資料

← 用語集にもどる