維表與事實表

BI平臺分爲事實表、維表,然後兩種表聚合成一個寬表。(注意這裏取的BI平臺是Davinci:https://edp963.github.io/davinci/)
 
其維表、事實表的關係圖如下:

 

 
 
一個維表會對應多個事實表,而維表和事實表所有關聯起來就形成一個寬表,其關係如同mysql中的外鍵索引,如A表中有B_id,A作爲維表,B作爲事實表,A(維表)可通過B_id來關聯B(事實表),然後關聯彙總生成的SQL就是寬表。
 
BI系統中可根據事實表和維度表的關係,應遵循如下兩種模型的規範:星型模型和雪花型模型。
  • 星型表:反範式,數據冗餘,查詢效率高。
  • 遵循範式:數據不冗餘,但引用層級深,維護複雜,查詢效率較低
下面舉一個星型模型(體驗課上課預約記錄)的例子來說明如下:
 
 
 
上圖以user_table_course_schedule的部分字段(user_id、table_course_schedule_id、teacher_id、gmt_create)來作爲維度,並分別關聯到了userinfo、tablec_course_schedule、teacherinfo這三張事實表,然後形成一張寬表。
 
以上面星型模型的例子,對其進行修改,舉一個雪花模型例子來說明如下:
 
 
上面雪花模型中,學生信息事實表的orderId還繼續關聯了下一個層級體驗課記錄表,體驗課報名記錄表還可能會繼續往下關聯,對於複雜的系統而言,一般會採用雪花模型,關鍵層級會較多,而星型模型的關聯過於單一,層級不夠深,無法支持這種操作。
 
理解了上面兩種模型的設計,接下來需要確定維度和指標的用法:
維度與指標的規範:
  • 維度:維度用於關聯事實表,也可用於做冗餘顯示(如gmt_create),用於數據檢索,所以對於維度設計時,可將其進行分類(看業務擴展需要):
    • 時間維:將時間進行維度細分,如gmt_create劃分爲年維度、月維度、日維度。
    • 地域維:將地域劃分爲省維度、市維度、區維度。反例:把省市區 只作爲一個維度,而沒有拆分,後面進行篩選就不方便。
    •  其他維度按業務進行擴招
  • 指標:用於統計(如總和、平均數、最大值、最小值)、排序等。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章