維度建模之事實表
阿新 • • 發佈:2020-10-14
1.事實表概述
事實表儲存了從業務活動或事件提煉出來的效能度量,它主要包含維度表的外來鍵和連續變化的可加性數值、半可加事實和不可加事實。事實表產生於業務過程中而不是業務過程的描述性資訊。它一般是行多列少,佔了資料倉庫的90%的空間。在維度模型中也有表示多對多關係的事實,其他都是維度表。
2.事實表粒度
事實表的粒度是產生事實行的度量事件的業務定義。粒度確定了事實表的業務主鍵, 事實表的所有度量值必須具有相同的粒度。
3.事實表設計原則
原則一:儘可能包含所有業務與業務過程相關的事實
事實表設計的目的是為了度量業務過程,所以分析哪些事實與業務過程有關式設計中非常重要的關注點。
在事實表中應該儘量包含所有與業務過程相關的事實,即使存在冗餘,但是因為事實通常為數字型,帶來的儲存開銷也不會很大。
原則二:只選擇與業務過程相關的事實
在選擇事實是,應該注意只選擇與業務過程有關的事實。
比如在訂單下單這個業務過程的事實表設計中,不應該存在支付金額這個表示支付業務過程的事實。
原則三:分解不可加性事實為可加的元件
對於不具備可加性條件的事實,需要分解為可加的元件。
比如訂單的優惠率,應該分級為訂單原價金額與訂單優惠金額兩個事實儲存在事實表中。
原則四:在選擇維度和事實之前必須宣告粒度
粒度的宣告是事實表設計中不可忽視的重要一步,粒度用於確定事實表中一行所表示業務的細節層次,決定了維度模型的擴充套件性,在選擇維度和事實之前必須宣告粒度,且每個維度和事實必須與所定義的粒度保持一致。
在設計事實表的過程中,粒度定義得越細越好,建議從最低級別的原則粒度開始,因為原子粒度提供了最大限度的靈活性,可以支付無法預期的各種細節層析的使用者需求。
在事實表中,通常通過業務描述來表述粒度,但對於聚集性事實表的粒度描述,可以採用維度或維度屬性組合的方式。
原則五:在同一個事實表中不能有多種不同粒度的事實
事實表中的所有事實需要與表定義的粒度保持一致,在同一個事實表中不能有多種不同粒度的事實。
原則六:事實的單位要保持一致
對於同一個事實表中實施的單位,應該保持一致。
比如原訂單金額、訂單優惠金額、訂單運費金額這三個事實,應該採用一致的計量單位,統一為元或分,以方便使用。
原則七:對事實的null值要處理
對於事實表中實施度量null值的處理,因為在資料庫中null值對常用數字型欄位的SQL過濾條件都不生效,比如大於、小於、等於、大於或等於、小於或等於,建議用0值填充。
原則八:使用退化維度提高事實表的易用性
在Kimball的維度建模中,通常按照星型模型的方法來設計,對於維度的獲取採用的是通過事實表的外來鍵關聯專門的維表方式,謹慎使用退化。
而在大多數領域的事實表設計中,則大量採用退化維度的方式,在事實表中儲存各種型別的常用維度資訊。這樣設計的目的主要是為了減少下游使用者使用時關聯多個表的操作,直接通過退化維度實現對事實表的過濾查詢、控制聚合層次、排序資料以及定義主從關係等。
通過增加冗餘儲存的方式減少計算開銷,提高使用效率;
4.事實表設計方法
在Kimball所著的《The Data Warehouse Toolkit-The Definitive Guide to Dimensional Modeling》一書中,對於維度模型設計採用四部設計方法:
- 選擇業務過程
- 宣告粒度
- 確定維度
- 確定事實
- 維度建模數倉領域中的事實表大致分以下三種:事務事實表,週期快照事實表,累計事實表。
- 事務事實表與週期快照事實表、累積快照事實表雖然使用相同的一致性維度,但是它們在內容構成以及業務描述上還是有很大的區別。
- 事務事實表:它是面向事務的,其粒度是每一行對應一個事務,它是最細粒度的事實表。
- 週期快照事實表:它是按照良好的時間週期間隔(每天,每月)來捕捉業務活動的執行情況,一旦裝入事實表就不會再去更新,它是事務事實表的補充,而非替代品。
- 累積快照事實表:它用於描述業務過程中某個不確定時間跨度裡的活動,它隨著業務活動的發生會不斷的更新。