Mímisbrunnr知恵の泉

← データエンジニアリング 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:リレーショナルモデルと正規化スタースキーマと次元モデリング | 関連:列指向ストレージと分析クエリ

要点(BLUF)

概念 ── 同じ事実、逆向きの最適化

正規化と非正規化は「どちらが正しいか」ではなく、何を最適化するかの違いです。

flowchart LR
    N["正規化"] -->|得意| NW["更新の整合性・書き込み効率"]
    N -->|苦手| NR["多段JOINで読み取りが遅い"]
    D["非正規化"] -->|得意| DR["JOIN不要で読み取りが速い"]
    D -->|苦手| DW["冗長・更新時異常のリスク"]

更新が主の業務システム(受発注・在庫)は、整合性が命なので正規化。分析・レポートは読み取りが主で更新が少ないので、JOINを減らす非正規化(スタースキーマ)が有利です。

設計の勘所 ── OLTP と OLAP

観点OLTP(更新系)OLAP(分析系)
主な操作1行のINSERT/UPDATE大量行のSUM/GROUP BY
設計正規化(3NF)非正規化(スタースキーマ)
最適化対象書き込みの整合性・速さ読み取り・集計の速さ
注文登録・在庫引当月次売上ダッシュボード
ストレージ行指向列指向(→ 列指向ストレージと分析クエリ

現代データスタックでは、OLTPの正規化データを取り込み、変換段で分析用に非正規化(次元モデル化)してDWHに置くのが定番の流れです。つまり両方を、パイプラインの上流/下流で持ち分けます。

なぜそうするか ── 計測してから崩す

なぜ「まず正規化」が安全なのか。非正規化は取り返しが付きにくいからです。冗長を入れると、更新ロジック・整合性チェックが各所に散らばり、後から正規化に戻すのは大仕事。逆に、正規化を起点にして「このクエリだけ遅い」と計測で特定し、その箇所だけ集計済みテーブル(マテリアライズドビュー等)で非正規化する方が、リスクを局所化できます。

「推測するな、計測せよ」。早すぎる非正規化は、性能問題が実在する前に整合性リスクを買う行為です。

⚠️ よくある落とし穴

対応ラボ

なし(判断軸の回)。正規化の更新時異常は リレーショナルモデルと正規化、非正規化の集計は スタースキーマと次元モデリング のラボで確認済み。

関連

第2章 データモデリング 目次