這個問題,從本質上來講。想討論是數據模型設計里面的規范化和反規范化的問題。
從規范化的角度來講,數據倉庫的設計者是希望越規范越好,因為這樣會減少數據的冗余,而且也便于模型的擴展。從反規范化的角度來講,數據倉庫的使用者是希望使用越方便越好,他們并不太關系規范不規范冗余不冗余,只要用著方便就好。
這種情況在工作中是十分常見的,那么該怎樣來解決它?下面有兩個思路:
1. 兩種方式都存。雖然,這樣看起來會占用更多的存儲空間,但不失為一種合適的解決方案,因為寬表是通過別的表拼接而成的,因此寬表的存儲周期是可以短一些。
2. 只存多個維度表,通過視圖來創建寬表。
這種方式適合于寬表的查詢次數較少的情況。
比如在Hive中,寬表其實只是為了計算出來之后導入Es等系統中供其它系統查詢,那么久沒必要存儲一份寬表,直接通過視圖來封裝就可以。 另外,數據倉庫的設計,往往不能是以計算出幾張表就結束了,我們更應該提供的是數據服務,讓使用方都通過服務的方式來訪問我們的數據,而不是簡單地將表暴露出去。
當我們以數據服務的方式提供數據的時候,不管是易用性還是安全性都更容易得到滿足。