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

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

💡 データ倉庫の「雪の結晶」設計図
📌 このページのポイント
スノーフレークスキーマ 売上ファクト 商品ID / 日付ID 顧客ID / 金額 商品ディメンション 商品ID / カテゴリID カテゴリ カテゴリID / 名称 サブカテゴリ サブID / カテゴリID 日付ディメンション 日付ID / 年 / 月 / 四半期 顧客ディメンション 顧客ID / 地域ID 地域ディメンション 地域ID / 都道府県 / 国 ファクトテーブル ディメンション(1階層目) ディメンション(2階層目)
スタースキーマのディメンションをさらに正規化した階層構造
ひよこ ひよこ

スノーフレークスキーマってスタースキーマと何が違うの?

ペンギン先生 ペンギン先生

スタースキーマではディメンションテーブルが1階層だけど、スノーフレークスキーマではそのディメンションをさらに細かく正規化して複数のテーブルに分割するよ。例えば「商品テーブル」をさらに「カテゴリテーブル」「サブカテゴリテーブル」に分けるイメージだね。

ひよこ ひよこ

正規化するとどんなメリットがあるの?

ペンギン先生 ペンギン先生

同じデータを何度も書かなくていいからストレージの無駄が減るよ。例えば「カテゴリ名:電子機器」という文字列を全商品行に重複して持つ代わりに、カテゴリIDだけ持てばいいんだ。データの更新も一か所で済むから整合性が保ちやすいね。

ひよこ ひよこ

じゃあスタースキーマよりスノーフレークスキーマの方がいいの?

ペンギン先生 ペンギン先生

一長一短だよ。スノーフレークストレージ効率が高い代わりに、分析クエリで多くのJOINが必要になってパフォーマンスが落ちることがある。スタースキーマJOINが少なくて高速だけど、データの冗長性が増えるんだ。クエリの速さを優先するならスタースキーマ、データの整合性やストレージ効率を優先するならスノーフレークというケースが多いよ。

ひよこ ひよこ

どんな場面でスノーフレークが選ばれるの?

ペンギン先生 ペンギン先生

地域(国→都道府県→市区町村)や商品分類(大カテゴリ→中カテゴリ→小カテゴリ)のように、深い階層構造を持つデータを扱うときに向いているよ。また、マスターデータが頻繁に更新されてデータの正確さが最重要な場合にも選ばれることが多いんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スノーフレークスキーマ」って出てきたら「スタースキーマをさらに正規化したデータウェアハウス設計」と思えればだいたいOK!
📖 おまけ:英語の意味
「Snowflake Schema」 = 雪の結晶スキーマ
💬 ファクトテーブルを中心にディメンションが枝分かれして広がる形が雪の結晶(snowflake)に似ていることから名付けられたよ
← 用語集にもどる