1. 程式人生 > >資料倉庫系列-為什麼要維度建模

資料倉庫系列-為什麼要維度建模

凡是建設資料倉庫,一定會提到維度建模方法。這一方法是Kimball最先提出的,其最簡單的描述就是,按照事實表、維度表來構建資料倉庫、資料集市。在維度建模方法體系中,維度是描述事實的角度,如日期、商品、地址等,事實是要度量的指標,如使用者數、銷售額等。按照一般書籍的介紹,維度建模還會分為星型模型、雪花模型等,各有優缺點,但很少直接回答一個問題,也就是資料倉庫為什麼要採用維度建模

這個問題的基本判斷在於,資料是否要開放給業務人員使用?採用維度建模構建出來的資料庫結構表更加符合普通人的直覺、易於被普通人所理解,從而有利於資料的推廣使用。下面以超市收銀小票為例說明常規的三正規化模型和維度模型。

三正規化的資料模型示意如下:


維度模型示意如下:


以上兩個模型的最小資料粒度都是小票專案,可以容易看出來,維度模型是將關係模型的層次結構展開平鋪而成。從上面的這個範例可以引出採用維度建模方法的基本理由,就是:

資料結構簡單。在決定是否要採用維度建模之前,必須回答一個問題,“資料模型是否要開放給業務人員直接使用”,如果答案肯定,則應該採用維度建模的方法。維度模型這個概念有點學術化,但究其本質而言,是將層次化的資料結構展開為單一層次,有點類似於將一個業務過程的資料彙總到一個excel的sheet頁中。

不過維度建模的代價也很明顯,就是其靈活性較差,資料冗餘較多,所以,在很多書中提出了一個折中的辦法,即“雪花模型”,同時還煞有介事的對比了雪花模型與星型模型(即上面的示例)的優缺點,讓很多初學者心中飄來了一個揮之不去的疑問,“既然雪花模型既有關係模型的優點,還有維度模型的優點,為什麼還要存在星型模型呢”?。竊以為,這完全是多此一舉的做法,維度建模追求的是使用簡單,多增加一級關聯,增加的使用複雜度就會增加不止一點,會給多數不懂技術的業務人員帶來極大的障礙,是一種捨本逐末的做法

基於這種考慮,在建設資料倉庫的過程中,明細層和集市層分別採用不同的建模方法,也就是:

明細層採用傳統的三正規化關係模型。這一層次的資料模型要將業務過程描述清楚,將源資料(即業務系統)中隱含的、有歧義的概念進行清晰化,如活躍使用者、VIP使用者等。該層次的資料模型追求的目標是靈活地表達業務過程,要保證資料一致性、唯一性、正確性,以儘量少的代價與源資料保持資料同步,同時該層次的資料模型不建議開給不懂技術的業務人員直接使用,因此,採用關係型的三正規化模型是最佳的選擇。

集市層採用維度模型。集市層是按照業務主題、分主題構建出來的、面向特定部門或人員的資料集合,該層次的資料模型會開放給業務人員使用,進行資料探勘及業務分析。由於業務員多數不懂資料庫技術,缺少將業務需求轉換為關係型資料結構的邏輯思維,更寫不出複雜的SQL語句,因此,越簡單的資料模型,越能被他們所接受,因此,這個層次所構建出來的資料模型,要按照業務過程進行組織,每個事實表代表一個獨立的業務過程,事實表之間不存在直接的依賴關係,這樣業務人員可以很容易地將分析需求對應到事實表上,利用工具或手工寫出簡單的SQL,將統計資料提取出來進行分析。

以上,就是資料倉庫採用維度建模和關係建模的基本判斷。