維度建模中一個非常重要的步驟是定義事實表的粒度。定義了事實表的粒度,則事實表能表達數據的詳細程度就確定了。定義粒度的例子如下:
1.客戶的零售單據上的每個條目。
2.保險單上的每個交易。
定義好事實表的粒度有很大的用處。
第一個用處就是用來確定維度是否與該事實表相關。例如,對於粒度細到醫療單據上條目項的事實表來說,醫療結果是不會作為維度和它進行關聯的,因為它們不在同一個粒度上。但是,對於一般的E/R數據模型來說,醫療單據是和醫療結果是進行關聯的。通常的規范化建模里沒有粒度的概念,它們表示的是實體之間的關系,這也是規范化建模和維度建模中一個較大的不同之處。
定義成原子的事實表粒度后,可以選擇較多的維度來對該事實表進行描述。也就是說,事實表的粒度越細,能記載的信息就會越多。原子粒度的事實表對維度建模來說是至關重要的。
前面列舉的幾個例子中的粒度定義都是最低粒度的,這些事實表的數據是原子的,不能再進行細分了。但是我們可以在這個基礎上定義高粒度的聚集事實表。舉例如下:
1.一天一個倉庫一個產品的銷售總量。
2.每月的保險交易總數。
3.每月診斷治療的交費金額。
這些高粒度的聚集事實表總是具有較少的維度。通常在建立這些聚集事實表的時候,我們會去掉一些維度或者縮減某些維度的范圍。也正因為如此,聚集事實表應該和其對應的原子事實表一起使用。當需要更詳細信息時,可以訪問其對應的原子事實表。
第二個用處是定義好事實表的粒度后,能更清楚的確定哪個事實與該事實表相關。簡單的說,事實必須對於該粒度是正確的,不同粒度的事實是不能定義在該事實表中的。
總結來說,我們定義事實表的粒度及維度建模時可以采用如下的步驟:
1.熟悉源數據的情況。
2.定義事實表的粒度,最好定義到原子粒度。
3.將與這個粒度的相關信息都添加為維度。
4.添加與該粒度相關的度量信息為事實。