維度建模的基本概念
維度建模(dimensional modeling)是專門用於分析型數據庫、數據倉庫、數據集市建模的方法。
它本身屬於一種關系建模方法,包含了基本的兩個概念:
1. 維度表(dimension)
表示對分析主題所屬類型的描述。比如"昨天早上張三在京東花費200元購買了一個皮包"。那么以購買為主題進行分析,可從這段信息中提取三個維度:時間維度(昨天早上),地點維度(京東), 商品維度(皮包)。通常來說維度表信息比較固定,且數據量小。
2. 事實表(fact table)
表示對分析主題的度量。比如上面那個例子中,200元就是事實信息。事實表包含了與各維度表相關聯的外碼,並通過JOIN方式與維度表關聯。事實表的度量通常是數值類型,且記錄數會不斷增加,表規模迅速增長。
注:在數據倉庫中不需要嚴格遵守規范化設計原則(具體原因請看上篇)。本文示例中的主碼,外碼均只表示一種對應關系,此處特別說明。
維度建模的三種模式
1. 星形模式
星形模式(Star Schema)是最常用的維度建模方式,下圖展示了使用星形模式進行維度建模的關系結構:
可以看出,星形模式的維度建模由一個事實表和一組維表成,且具有以下特點:
a. 維表只和事實表關聯,維表之間沒有關聯;
b. 每個維表的主碼為單列,且該主碼放置在事實表中,作為兩邊連接的外碼;
c. 以事實表為核心,維表圍繞核心呈星形分布;
2. 雪花模式
雪花模式(Snowflake Schema)是對星形模式的擴展,每個維表可繼續向外連接多個子維表。下圖為使用雪花模式進行維度建模的關系結構:
星形模式中的維表相對雪花模式來說要大,而且不滿足規范化設計。雪花模型相當於將星形模式的大維表拆分成小維表,滿足了規范化設計。然而這種模式在實際應用中很少見,因為這樣做會導致開發難度增大,而數據冗余問題在數據倉庫里並不嚴重。
3. 星座模式
星座模式(Fact Constellations Schema)也是星型模式的擴展。基於這種思想就有了星座模式:
4. 三種模式對比
歸納一下,星形模式/雪花模式/星座模式的關系如下圖所示
雪花模式是將星型模式的維表進一步划分,使各維表均滿足規范化設計。而星座模式則是允許星形模式中出現多個事實表。本文后面部分將具體講到這幾種模式的使用,請讀者結合實例體會。