1、范式理論
范式:表示一個關系內部各屬性之間的聯系的合理化程度,范式級別越高,表的設計就越標准。
①零范式
它只滿足一個最基本的條件——數據中不存在重復數據。
②一范式
在零范式的基礎上加上字段具有原子性即屬性不可分這個條件后便形成了符合一范式的表。基於
上面的保險訂單統計表一范式和零范式的區別主要在於將表中的“購買信息”這個字段進行了拆分,
形成了“保險價格”和“購買數量”兩個字段,這樣的數據表我們稱其滿足一范式。
③二范式
相對於一范式,二范式的條件更為嚴苛。如果要滿足二范式,則數據表需要確保每一列都和主鍵完全相關,而不能只與主鍵的某一部分相關
④三范式
三范式需要確保數據表中的每一個字段都直接依賴該表的主鍵,而不能間接依賴。經過二范式的拆解后,已經將最初的一張表變成了三張表。
在這三張表中,我們發現用戶信息表中的用戶ID和注冊地址信息是存在傳遞依賴的,即:用戶ID決定地址ID,地址ID決定省份、城市、區縣,
這屬於傳遞依賴。因此,需要將用戶信息表地址信息表中的地址單獨拎出來才滿足三范式。
在第二范式、第三范式中,都是對維度進行了提取,獨立成表
總結一點就是:為了降低冗余,拆分表,使屬性之間的聯系越緊密!!
2、關系建模和維度建模
①關系建模:
面向應用,遵循第三范式,以消除數據冗余為目標的設計技術:
設計出來的樣子應該是:
優點:降低了數據的冗余
缺點:查詢大部分數據都需要join
②維度建模:
①面向分析,為了提高查詢性能可以增加數據冗余,反規范化的設計技術
②主要是按照事實表、維度表來構建數據倉庫、數據集市,也就是說通過維度表對事實表進行注解!!
設計出來的樣子應該是:
注:從關系建模的缺點來看,數據倉庫是不適合關系建模方式的,因為大量的join會使得計算延遲,查詢效率低。
3、維度建模
根據事實表和維度表的關系,又可將常見的維度模型分為星型模型、雪花型模型、星座模型。
①星型模型:
星型架構是一種非正規化的結構,多維數據集的每一個維度都直接與事實表相連接,不存在漸變維度,所以數據有一定的冗余
設計出來的樣子應該是:
②雪花模型:
星型模型因為數據的冗余所以很多統計查詢不需要做外部的連接,因此一般情況下效率比雪花型模型要高。
星型結構不用考慮很多正規化的因素,設計與實現都比較簡單。
雪花型模型由於去除了冗余,有些統計就需要通過表的聯接才能產生,所以效率不一定有星型模型高
設計出來的樣子應該是:
注:正規化也是一種比較復雜的過程,相應的數據庫結構設計、數據的 ETL、以及后期的維護都要復雜一些。
因此在冗余可以接受的前提下,實際運用中星型模型使用更多,也更有效率。
③星座模型
數據倉庫由多個主題構成,包含多個事實表,而維表是公共的,可以共享,這種模式可以看做星型模型的匯集
設計出來的樣子應該是: