一、概述
在多維分析的商業智慧解決方案中,根據事實表和維度資料表的關係,又可將常見的模型分為星型模型和雪花型模型。在設計邏輯型資料的模型的時候,就應考慮資料是按照星型模型還是雪花型模型進行組織。
當所有維表都直接連接到“ 事實表”上時,整個圖解就像星星一樣,故將該模型稱為星型模型,如圖 1 。
星型結構描述是一種非正規化的結構,Cube的每一個維度都直接與事實表相串連,不存在漸層維度,所以資料有一定的冗餘,如在地區維度資料表中,存在國家 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就相對簡單,而且可以實現高度的並行化。
總結
雪花模型使得維度分析更加容易,比如“針對特定的廣告主,有哪些客戶或者公司是線上的?”星形模型用來做指標分析更適合,比如“給定的一個客戶他們的收入是多少?”
轉載自:http://blog.csdn.net/nisjlvhudy/article/details/7889422