データモデリングとは、業務要件に基づいてデータの構造・関係性・制約を設計する技法です。DWHにおける代表的なアプローチはスタースキーマ、スノーフレークスキーマ、ワイドテーブルの3つで、いずれにも適する場面があります。クラウドDWH時代にはワイドテーブルが台頭し、dbtの普及で開発プロセスそのものも変わりました。本記事では定義、3つのアプローチ、KimballとInmonの2大流派、クラウド時代のトレンド、ベストプラクティス、よくある失敗までを解説します。

データモデリングとは何か――「どうテーブルを設計するか」の技法

データモデリングは、ビジネスの要件を反映したデータ構造を設計する技法です。「売上分析ができる状態」を作るために、どのテーブルを作り、どんなカラムを持たせ、どのように関係づけるか――この一連の設計作業がデータモデリングです。ソフトウェアエンジニアリングにおけるクラス設計やAPI設計に相当する、知的負荷の高い作業です。

古典的にはデータモデリングは3段階で進めます。概念モデル(ビジネスのエンティティと関係を業務言語で表現)、論理モデル(正規化や非正規化を決定)、物理モデル(実際のDDLとして実装)の順に具体化していきます。この3段階を飛ばしていきなりCREATE TABLEから書き始めると、後からリファクタリングのコストが膨大になります。データモデリングを怠った代償は、半年後に「何がどこにあるか分からない」状態として返ってきます。

DWHにおけるデータモデリングの3つのアプローチ

DWHでの分析用途には、歴史的に3つの代表的なアプローチが確立されています。それぞれ得意領域と欠点が明確です。

アプローチ1:スタースキーマ

スタースキーマは、中心にファクトテーブル(計測値・指標)を置き、その周囲にディメンションテーブル(分析軸・属性)を星型に配置するモデルです。売上分析なら中心がfct_sales、周囲がdim_customers、dim_products、dim_datesなどです。JOINの数が少なく(ファクトと各ディメンションが1段JOIN)、BIツールとの相性が良いのが最大の利点で、Kimball流のディメンショナルモデリングの中核をなします。直感的で運用しやすいため、現代でも最も広く使われているモデルです。

-- スタースキーマの例: ファクト売上テーブル
CREATE TABLE fct_sales (
  sales_id BIGINT PRIMARY KEY,
  customer_key BIGINT,
  product_key BIGINT,
  date_key INT,
  amount DECIMAL(12, 2)
);

-- スタースキーマの例: ディメンション顧客テーブル
CREATE TABLE dim_customers (
  customer_key BIGINT PRIMARY KEY,
  customer_id VARCHAR(50),
  customer_name VARCHAR(200),
  region VARCHAR(50),
  segment VARCHAR(50)
);

アプローチ2:スノーフレークスキーマ

スノーフレークスキーマは、スタースキーマのディメンションテーブルをさらに正規化したモデルです。例えばdim_productsの「カテゴリ」「ブランド」を別テーブルに分離し、階層構造を作ります。ストレージ効率は向上しますが、JOINの階層が深くなり、クエリとBIツールの設定が複雑になります。クラウドDWH時代にはストレージコストが安価なため、スノーフレーク化のメリットが相対的に小さくなり、採用頻度は減っています。

アプローチ3:ワイドテーブル(One Big Table / OBT)

ワイドテーブルは、JOINを事前に解消し、必要な属性をすべて1つの巨大テーブルに詰め込んだ非正規化モデルです。クエリがシンプルになり、カラムナーストレージのクラウドDWHではスキャン性能が最速になります。欠点は冗長性と更新の複雑さで、ディメンション属性の変更時にはテーブル全体の再生成が必要になります。dbtなどのモデル管理ツールが前提になる設計です。

【スタースキーマとスノーフレークスキーマの構造】

スタースキーマ:
                [dim_dates]
                    |
  [dim_customers]---[fct_sales]---[dim_products]
                    |
                [dim_stores]

スノーフレークスキーマ:
                [dim_dates]
                    |
  [dim_customers]---[fct_sales]---[dim_products]
         |                              |
  [dim_regions]                 [dim_categories]
                                         |
                                  [dim_brands]
アプローチJOINの数クエリ性能ストレージ効率保守性BIツール親和性適するユースケース
スタースキーマ中(1段JOIN)最高汎用BI分析全般
スノーフレーク多(階層JOIN)ストレージ制約の厳しい環境
ワイドテーブルゼロ最高中(再生成コスト)特化型ダッシュボード、ML特徴量

Kimball vs Inmon――2大モデリング流派

データモデリングには歴史的に2つの大きな流派があります。両者の思想を知ることで、自組織に合うアプローチが見えてきます。

  • Kimball流:Ralph Kimballが提唱したボトムアップ型のアプローチ。ビジネスプロセスごとにスタースキーマを構築し、必要に応じてコンフォームドディメンションで統合します。素早くビジネス価値を出せるのが利点で、現代のモダンデータスタックの主流です。
  • Inmon流:Bill Inmonが提唱したトップダウン型のアプローチ。まず第三正規形(3NF)のエンタープライズDWHを構築し、そこから部門別のデータマート(スタースキーマ等)を派生させます。一貫性の高い全社統合DWHが作れますが、初期コストが大きく、立ち上がりが遅くなります。
観点KimballInmon
設計方向ボトムアップトップダウン
正規化度非正規化(スタースキーマ中心)3NF
導入速度速い遅い
拡張性コンフォームドディメンションで統合全社統合DWHから派生
適する組織小〜中規模、俊敏性重視大規模エンタープライズ、全社統合重視

クラウドDWH時代のモデリング――ワイドテーブルの台頭

BigQueryやSnowflakeに代表されるクラウドDWHは、カラムナーストレージと分散並列処理を前提とした設計になっています。これによりJOINのコストが相対的に小さくなった一方で、「JOINがゼロ」のワイドテーブルのほうがクエリ性能は常に最速になります。ストレージコストも劇的に安価になり、冗長性のデメリットが薄まりました。

さらにdbtの普及により、複雑なモデル再生成の管理が自動化され、バージョン管理・テスト・ドキュメント化が一体で行えるようになりました。結果として「JOINを多用するスタースキーマ」と「事前JOIN済みのワイドテーブル」の2軸を使い分ける構成が実務で増えています。正解は1つではなく、ユースケース単位で最適なアプローチを選ぶのが現代のモデリングです。詳細はA-13 ディメンショナルモデリングで解説しています。

データモデリングのベストプラクティス

現代のデータモデリングで標準となっている5つのベストプラクティスを紹介します。

  1. ビジネス要件から逆算して設計する:DDLから書き始めずに、「どの意思決定を支える分析か」から始めます。要件→論理モデル→物理モデルの順序を守ることで、過剰設計と過小設計の両方を避けられます。
  2. ネーミング規約を統一する:stg_(staging)、int_(intermediate)、fct_(fact)、dim_(dimension)のプレフィックスを全社で統一します。テーブル名を見ただけで責務と位置づけが分かる状態は、運用と引き継ぎを劇的に楽にします。
  3. サロゲートキーの導入を検討する:業務キー(メールアドレス、商品コード等)をそのままキーにすると変更時に破綻します。一意のサロゲートキー(BIGINT等)を別途発行することで、業務キー変更への耐性が得られます。
  4. 増分更新パターンを設計段階で決める:データが変わったとき、履歴をどう管理するか(SCD Type 1/2/3)を設計時点で決めます。後から変更するとデータ遡及のコストが膨大になります。
  5. dbtでモデルの依存関係を管理する:ref()関数を使えばモデル間の依存関係がコードで明示され、リネージと実行順序の両方が自動管理されます。
-- models/marts/sales/fct_orders.sql
{{ config(materialized='incremental', unique_key='order_id') }}

SELECT
  o.order_id,
  c.customer_key,
  p.product_key,
  d.date_key,
  o.amount
FROM {{ ref('int_orders_enriched') }} o
LEFT JOIN {{ ref('dim_customers') }} c USING (customer_id)
LEFT JOIN {{ ref('dim_products')  }} p USING (product_id)
LEFT JOIN {{ ref('dim_dates')     }} d USING (order_date)

よくあるモデリングの失敗

  1. 正規化しすぎてクエリが遅い:「正規化は正しい」という教科書知識を鵜呑みにして、5段階JOINが必要なスノーフレーク化をした結果、BIツールでタイムアウトが頻発――よくある失敗です。クラウドDWHでは適切な非正規化が正義です。
  2. ワイドテーブルに全部詰め込んで保守不能:逆にワイドテーブル一辺倒にして、100カラム超の巨大テーブルになり、どのカラムがどこから来たのか誰も把握できない状態になるケースもあります。目的別に分割する規律が必要です。
  3. ビジネスロジックが散在して指標定義が不一致:同じ「売上」でも、ダッシュボードAとダッシュボードBで集計式が微妙に違う――これは指標定義の一元管理を怠った結果です。セマンティックレイヤーやdbt Semantic Layerで防げます。

まとめ――データモデリングは「設計」であり「コミュニケーション」

  • データモデリングはDWH上のテーブル構造を設計する技法で、3つの代表的アプローチ(スタースキーマ、スノーフレーク、ワイドテーブル)があります。
  • Kimball流はボトムアップで俊敏、Inmon流はトップダウンで一貫性重視。現代はKimball流が主流です。
  • クラウドDWH時代はワイドテーブルの採用が増え、正規化の重要性が相対的に下がっています。
  • ベストプラクティスは要件逆算設計、命名規約、サロゲートキー、SCD設計、dbt管理の5つです。
  • 正しいモデリングは技術設計であると同時に、ビジネスとのコミュニケーション設計でもあります。

次のステップとして、A-13 ディメンショナルモデリングB-01 dbt入門、C-02 3層アーキテクチャをご参照ください。DE-STKでは、データモデリングの設計レビューから運用移行まで伴走支援しています。

よくある質問(FAQ)

Q. スタースキーマとスノーフレークスキーマの違いは?

スタースキーマはファクトテーブルを中心にディメンションが直接接続する構成、スノーフレークスキーマはディメンションをさらに正規化して階層化した構成です。スタースキーマの方がシンプルでクエリ性能に優れ、BIツールとの相性も良いため、現代では基本的にスタースキーマが推奨されます。

Q. ワイドテーブルはいつ使うべきですか?

特定の分析ユースケースが明確でクエリ性能を最優先したい場合、ML特徴量として利用したい場合、カラムナーDWHの並列処理を最大限活かしたい場合に有効です。ただし、更新ロジックが複雑になるため、dbt等でモデルの管理を自動化することが前提です。

Q. Kimball方式とInmon方式のどちらを選ぶべきですか?

小〜中規模のプロジェクトや迅速な価値提供が必要な場合はKimball(ボトムアップ)、大規模エンタープライズで全社横断のデータ統合が目的ならInmon(トップダウン)が適しています。現代ではKimball方式が主流で、クラウドDWHとdbtの組み合わせでアジリティが飛躍的に向上しています。