1. 程式人生 > >星型模式、雪花模式和事實星座模式

星型模式、雪花模式和事實星座模式

data- 沒有 數據 企業 倉庫 img content tell ==

多維數據模型是最流行的數據倉庫的數據模型,多維數據模型最典型的數據模式包括星型模式、雪花模式和事實星座模式,本文以實例方式展示三者的模式和區別。

1.星型模式的核心是一個大的中心表(事實表),一組小的附屬表(維表)。星型模式示例如下所示:

技術分享

2.雪花模式是星型模式的擴展,其中某些維表被規範化,進一步分解到附加表(維表)中。雪花模式示例如下圖所示:

技術分享

從圖中我們可以看到地址表被進一步細分出了城市(city)維。supplier_type表被進一步細分出來supplier維。

3.事實星座模式(Fact Constellation)或星系模式(galaxy schema)

數據倉庫由多個主題構成,包含多個事實表,而維表是公共的,可以共享,這種模式可以看做星型模式的匯集,因而稱作星系模式或者事實星座模式。本模式示例如下圖所示。

技術分享

事實星座模式是數據倉庫最長使用的數據模式,尤其是企業級數據倉庫(EDW)。這也是數據倉庫區別於數據集市的一個典型的特征,從根本上而言,數據倉庫數據模型的模式更多是為了避免冗余和數據復用,套用現成的模式,是設計數據倉庫最合理的選擇。當然大數據技術體系下,數據倉庫數據模型的設計,還是一個盲點,探索中

==================================================================================================================================

在多維分析的商業智能解決方案中,根據事實表和維度表的關系,又可將常見的模型分為星型模型和雪花型模型。在設計邏輯型數據的模型的時候,就應考慮數據是按照星型模型還是雪花型模型進行組織。

當所有維表都直接連接到“ 事實表”上時,整個圖解就像星星一樣,故將該模型稱為星型模型,如圖 1 。

星型架構是一種非正規化的結構,多維數據集的每一個維度都直接與事實表相連接,不存在漸變維度,所以數據有一定的冗余,如在地域維度表中,存在國家 A 省 B 的城市 C 以及國家 A 省 B 的城市 D 兩條記錄,那麽國家 A 和省 B 的信息分別存儲了兩次,即存在冗余。

1. 銷售數據倉庫中的星型模型

當有一個或多個維表沒有直接連接到事實表上,而是通過其他維表連接到事實表上時,其圖解就像多個雪花連接在一起,故稱雪花模型。雪花模型是對星型模型的擴展。它對星型模型的維表進一步層次化,原有的各維表可能被擴展為小的事實表,形成一些局部的 " 層次 " 區域,這些被分解的表都連接到主維度表而不是事實表。如圖 2,將地域維表又分解為國家,省份,城市等維表。它的優點是 : 通過最大限度地減少數據存儲量以及聯合較小的維表來改善查詢性能。

雪花型結構去除了數據冗余。

2. 銷售數據倉庫中的雪花型模型

星型模型因為數據的冗余所以很多統計查詢不需要做外部的連接,因此一般情況下效率比雪花型模型要高。星型結構不用考慮很多正規化的因素,設計與實現都比較簡單。雪花型模型由於去除了冗余,有些統計就需要通過表的聯接才能產生,所以效率不一定有星型模型高。正規化也是一種比較復雜的過程,相應的數據庫結構設計、數據的 ETL、以及後期的維護都要復雜一些。因此在冗余可以接受的前提下,實際運用中星型模型使用更多,也更有效率。

二、使用選擇

星形模型(Star Schema)和雪花模型(Snowflake Schema)是數據倉庫中常用到的兩種方式,而它們之間的對比要從四個角度來進行討論。

  1.數據優化

雪花模型使用的是規範化數據,也就是說數據在數據庫內部是組織好的,以便消除冗余,因此它能夠有效地減少數據量。通過引用完整性,其業務層級和維度都將存儲在數據模型之中。


▲圖1 雪花模型

相比較而言,星形模型實用的是反規範化數據。在星形模型中,維度直接指的是事實表,業務層級不會通過維度之間的參照完整性來部署。

▲圖2 星形模型

  2.業務模型

主鍵是一個單獨的唯一鍵(數據屬性),為特殊數據所選擇。在上面的例子中,Advertiser_ID就將是一個主鍵。外鍵(參考屬性)僅僅是一個表中的字段,用來匹配其他維度表中的主鍵。在我們所引用的例子中,Advertiser_ID將是Account_dimension的一個外鍵。

在雪花模型中,數據模型的業務層級是由一個不同維度表主鍵-外鍵的關系來代表的。而在星形模型中,所有必要的維度表在事實表中都只擁有外鍵。

  3.性能

第三個區別在於性能的不同。雪花模型在維度表、事實表之間的連接很多,因此性能方面會比較低。舉個例子,如果你想要知道Advertiser 的詳細信息,雪花模型就會請求許多信息,比如Advertiser Name、ID以及那些廣告主和客戶表的地址需要連接起來,然後再與事實表連接。

而星形模型的連接就少的多,在這個模型中,如果你需要上述信息,你只要將Advertiser的維度表和事實表連接即可。

  4.ETL

雪花模型加載數據集市,因此ETL操作在設計上更加復雜,而且由於附屬模型的限制,不能並行化。

星形模型加載維度表,不需要再維度之間添加附屬模型,因此ETL就相對簡單,而且可以實現高度的並行化。

  總結

雪花模型使得維度分析更加容易,比如“針對特定的廣告主,有哪些客戶或者公司是在線的?”星形模型用來做指標分析更適合,比如“給定的一個客戶他們的收入是多少?”

星型模式、雪花模式和事實星座模式