ファクト or ディメンション判定フロー#

データモデリング時に「このカラム(または概念)はファクトに持たせる?
それともディメンションに切り出す?」を判断するための分岐表。

判定フロー(YES/NO形式)#

STEP 質問 YESの場合 NOの場合
1 これは「数量・金額・回数・日数」など集計対象の値ですか? ファクトのメジャー(measure) にする 次へ
2 このカラムは、ファクトの行を一意に識別するためのキーの一部ですか?(例: 明細ID、回答番号、バージョン番号など) ファクトの属性(粒度構成キー) にする 次へ
3 値の種類が非常に多い or 一意ID(例: 取引ID、UUID)ですか? デジェネレートディメンションとしてファクトに持つ 次へ
4 この概念は「名前・区分・分類など説明属性の塊」を持っていますか? → 次へ(ディメンション候補) 次へ(単発属性系)
5 この概念は複数のファクト(イベント)から参照されますか? ディメンションとして切り出す 次へ
6 この値は分析軸(グルーピングやフィルタ)としてよく使いますか? → 次へ(6-1判定) 次へ
6-1 その軸に説明属性や再利用性がありますか?(例: ステータス名、カテゴリ名など) ディメンション化を検討する(ただしファクト専用で単純なEnumならファクト内でOK) ファクトに残す(例: times など)
7 これは単発フラグや小さなEnum(例: is_latest, is_deleted)ですか? ファクトにそのまま持つ → 上のどこかを見直す

具体例#

カラム 役割 判定 理由
amount 見積金額 ファクト 集計対象の値
times 回答回数 ファクト 分析軸だが説明属性・再利用性がない。粒度構成キーの一部
rfq_id 見積依頼ID ファクト(デジェネレート) 一意ID・高カーディナリティ
status RFQステータス ファクト or 小さなディメンション 分析軸+説明属性あり。ただしRFQ専用ならファクト内でOK
supplier_id サプライヤー ディメンション 複数ファクトで共有される軸
is_latest 最新フラグ ファクト 小さなEnum、属性がない

補足ルール#

  • 「分析軸であっても、説明属性がない or 再利用しないならファクトに残す」
  • 「複数ファクトで共有する“文脈”や“説明セット”を持つならディメンションに切る」
  • 「粒度を構成するキー」はファクトが必ず持つ
  • 必要に応じて、粒度キーを“説明”する小さなディメンションを別途作る(例: dim_response_iteration
  • ステータスのように説明属性が少ないファクト専用Enumは、dim化せずファクト内でOK

用語整理#

用語 意味
粒度(grain) ファクトの1行が何を表すか 「1見積回答」など
粒度を構成するキー 1行を一意に識別する列 rfq_item_id, supplier_id, times
デジェネレートディメンション 一意IDなど高カーディナリティの値をファクトに持つパターン order_id, rfq_id
ディメンション ファクトを説明・分類する文脈情報 サプライヤー、RFQ、ステータスなど

まとめ#

  • ファクト:数える/測る/発生を記録するもの
  • ディメンション:その出来事を説明・分類する文脈
  • times のような軸は粒度構成キーとしてファクトに置き、必要なら補助dimで説明。
  • status のような軸は、ファクト専用で単純ならそのまま持ち、再利用や属性拡張の可能性があればdim化する。