什么是數(shù)據(jù)模型
數(shù)據(jù)模型是抽象描述現(xiàn)實世界的一種工具和方法,是通過抽象的實體及實體之間聯(lián)系的形式,來表示現(xiàn)實世界中事務的相互關系的一種映射。在這里,數(shù)據(jù)模型表現(xiàn)的抽象的是實體和實體之間的關系,通過對實體和實體之間關系的定義和描述,來表達實際的業(yè)務中具體的業(yè)務關系。
數(shù)據(jù)倉庫模型是數(shù)據(jù)模型中針對特定的數(shù)據(jù)倉庫應用系統(tǒng)的一種特定的數(shù)據(jù)模型,一般的來說,我們數(shù)據(jù)倉庫模型分為幾下幾個層次,如圖 2 所示。
圖 2. 數(shù)據(jù)倉庫模型
通過上面的圖形,我們能夠很容易的看出在整個數(shù)據(jù)倉庫得建模過程中,我們需要經(jīng)歷一般四個過程:
· 業(yè)務建模,生成業(yè)務模型,主要解決業(yè)務層面的分解和程序化。
· 領域建模,生成領域模型,主要是對業(yè)務模型進行抽象處理,生成領域概念模型。
· 邏輯建模,生成邏輯模型,主要是將領域模型的概念實體以及實體之間的關系進行數(shù)據(jù)庫層次的邏輯化。
· 物理建模,生成物理模型,主要解決,邏輯模型針對不同關系型數(shù)據(jù)庫的物理化以及性能等一些具體的技術問題。
因此,在整個數(shù)據(jù)倉庫的模型的設計和架構中,既涉及到業(yè)務知識,也涉及到了具體的技術,我們既需要了解豐富的行業(yè)經(jīng)驗,同時,也需要一定的信息技術來幫助我們實現(xiàn)我們的數(shù)據(jù)模型,最重要的是,我們還需要一個非常適用的方法論,來指導我們自己針對我們的業(yè)務進行抽象,處理,生成各個階段的模型。
1 為什么需要數(shù)據(jù)倉庫模型
在數(shù)據(jù)倉庫的建設中,我們一再強調(diào)需要數(shù)據(jù)模型,那么數(shù)據(jù)模型究竟為什么這么重要呢?首先我們需要了解整個數(shù)據(jù)倉庫的建設的發(fā)展史。
數(shù)據(jù)倉庫的發(fā)展大致經(jīng)歷了這樣的三個過程:
· 簡單報表階段:這個階段,系統(tǒng)的主要目標是解決一些日常的工作中業(yè)務人員需要的報表,以及生成一些簡單的能夠幫助領導進行決策所需要的匯總數(shù)據(jù)。這個階段的大部分表現(xiàn)形式為數(shù)據(jù)庫和前端報表工具。
· 數(shù)據(jù)集市階段:這個階段,主要是根據(jù)某個業(yè)務部門的需要,進行一定的數(shù)據(jù)的采集,整理,按照業(yè)務人員的需要,進行多維報表的展現(xiàn),能夠提供對特定業(yè)務指導的數(shù)據(jù),并且能夠提供特定的領導決策數(shù)據(jù)。
· 數(shù)據(jù)倉庫階段:這個階段,主要是按照一定的數(shù)據(jù)模型,對整個企業(yè)的數(shù)據(jù)進行采集,整理,并且能夠按照各個業(yè)務部門的需要,提供跨部門的,完全一致的業(yè)務報表數(shù)據(jù),能夠通過數(shù)據(jù)倉庫生成對對業(yè)務具有指導性的數(shù)據(jù),同時,為領導決策提供全面的數(shù)據(jù)支持。
通過數(shù)據(jù)倉庫建設的發(fā)展階段,我們能夠看出,數(shù)據(jù)倉庫的建設和數(shù)據(jù)集市的建設的重要區(qū)別就在于數(shù)據(jù)模型的支持。因此,數(shù)據(jù)模型的建設,對于我們數(shù)據(jù)倉庫的建設,有著決定性的意義。
一般來說,數(shù)據(jù)模型的建設主要能夠幫助我們解決以下的一些問題:
· 進行全面的業(yè)務梳理,改進業(yè)務流程。在業(yè)務模型建設的階段,能夠幫助我們的企業(yè)或者是管理機關對本單位的業(yè)務進行全面的梳理。通過業(yè)務模型的建設,我們應該能夠全面了解該單位的業(yè)務架構圖和整個業(yè)務的運行情況,能夠?qū)I(yè)務按照特定的規(guī)律進行分門別類和程序化,同時,幫助我們進一步的改進業(yè)務的流程,提高業(yè)務效率,指導我們的業(yè)務部門的生產(chǎn)。
· 建立全方位的數(shù)據(jù)視角,消滅信息孤島和數(shù)據(jù)差異。通過數(shù)據(jù)倉庫的模型建設,能夠為企業(yè)提供一個整體的數(shù)據(jù)視角,不再是各個部門只是關注自己的數(shù)據(jù),而且通過模型的建設,勾勒出了部門之間內(nèi)在的聯(lián)系,幫助消滅各個部門之間的信息孤島的問題,更為重要的是,通過數(shù)據(jù)模型的建設,能夠保證整個企業(yè)的數(shù)據(jù)的一致性,各個部門之間數(shù)據(jù)的差異將會得到有效解決。
· 解決業(yè)務的變動和數(shù)據(jù)倉庫的靈活性。通過數(shù)據(jù)模型的建設,能夠很好的分離出底層技術的實現(xiàn)和上層業(yè)務的展現(xiàn)。當上層業(yè)務發(fā)生變化時,通過數(shù)據(jù)模型,底層的技術實現(xiàn)可以非常輕松的完成業(yè)務的變動,從而達到整個數(shù)據(jù)倉庫系統(tǒng)的靈活性。
· 幫助數(shù)據(jù)倉庫系統(tǒng)本身的建設。通過數(shù)據(jù)倉庫的模型建設,開發(fā)人員和業(yè)務人員能夠很容易的達成系統(tǒng)建設范圍的界定,以及長期目標的規(guī)劃,從而能夠使整個項目組明確當前的任務,加快整個系統(tǒng)建設的速度。
2 如何建設數(shù)據(jù)倉庫模型
建設數(shù)據(jù)模型既然是整個數(shù)據(jù)倉庫建設中一個非常重要的關鍵部分,那么,怎么建設我們的數(shù)據(jù)倉庫模型就是我們需要解決的一個問題。這里我們將要詳細介紹如何創(chuàng)建適合自己的數(shù)據(jù)模型。
3.1 數(shù)據(jù)倉庫數(shù)據(jù)模型架構
數(shù)據(jù)倉庫的數(shù)據(jù)模型的架構和數(shù)據(jù)倉庫的整體架構是緊密關聯(lián)在一起的,我們首先來了解一下整個數(shù)據(jù)倉庫的數(shù)據(jù)模型應該包含的幾個部分。從下圖我們可以很清楚地看到,整個數(shù)據(jù)模型的架構分成 5 大部分,每個部分其實都有其獨特的功能。
圖 3. 數(shù)據(jù)倉庫數(shù)據(jù)模型架構
從上圖我們可以看出,整個數(shù)據(jù)倉庫的數(shù)據(jù)模型可以分為大概 5 大部分:
· 系統(tǒng)記錄域(System of Record):這部分是主要的數(shù)據(jù)倉庫業(yè)務數(shù)據(jù)存儲區(qū),數(shù)據(jù)模型在這里保證了數(shù)據(jù)的一致性。
· 內(nèi)部管理域(Housekeeping):這部分主要存儲數(shù)據(jù)倉庫用于內(nèi)部管理的元數(shù)據(jù),數(shù)據(jù)模型在這里能夠幫助進行統(tǒng)一的元數(shù)據(jù)的管理。
· 匯總域(Summary of Area):這部分數(shù)據(jù)來自于系統(tǒng)記錄域的匯總,數(shù)據(jù)模型在這里保證了分析域的主題分析的性能,滿足了部分的報表查詢。
· 分析域(Analysis Area):這部分數(shù)據(jù)模型主要用于各個業(yè)務部分的具體的主題業(yè)務分析。這部分數(shù)據(jù)模型可以單獨存儲在相應的數(shù)據(jù)集市中。
· 反饋域(Feedback Area):可選項,這部分數(shù)據(jù)模型主要用于相應前端的反饋數(shù)據(jù),數(shù)據(jù)倉庫可以視業(yè)務的需要設置這一區(qū)域。
通過對整個數(shù)據(jù)倉庫模型的數(shù)據(jù)區(qū)域的劃分,我們可以了解到,一個好的數(shù)據(jù)模型,不僅僅是對業(yè)務進行抽象劃分,而且對實現(xiàn)技術也進行具體的指導,它應該涵蓋了從業(yè)務到實現(xiàn)技術的各個部分。
3.2 數(shù)據(jù)倉庫建模階段劃分
我們前面介紹了數(shù)據(jù)倉庫模型的幾個層次,下面我們講一下,針對這幾個層次的不同階段的數(shù)據(jù)建模的工作的主要內(nèi)容:
圖 4. 數(shù)據(jù)倉庫建模階段劃分
從上圖我們可以清楚地看出,數(shù)據(jù)倉庫的數(shù)據(jù)建模大致分為四個階段:
1. 業(yè)務建模,這部分建模工作,主要包含以下幾個部分:
· 劃分整個單位的業(yè)務,一般按照業(yè)務部門的劃分,進行各個部分之間業(yè)務工作的界定,理清各業(yè)務部門之間的關系。
· 深入了解各個業(yè)務部門的內(nèi)具體業(yè)務流程并將其程序化。
· 提出修改和改進業(yè)務部門工作流程的方法并程序化。
· 數(shù)據(jù)建模的范圍界定,整個數(shù)據(jù)倉庫項目的目標和階段劃分。
2. 領域概念建模,這部分得建模工作,主要包含以下幾個部分:
· 抽取關鍵業(yè)務概念,并將之抽象化。
· 將業(yè)務概念分組,按照業(yè)務主線聚合類似的分組概念。
· 細化分組概念,理清分組概念內(nèi)的業(yè)務流程并抽象化。
· 理清分組概念之間的關聯(lián),形成完整的領域概念模型。
3. 邏輯建模,這部分的建模工作,主要包含以下幾個部分:
· 業(yè)務概念實體化,并考慮其具體的屬性
· 事件實體化,并考慮其屬性內(nèi)容
· 說明實體化,并考慮其屬性內(nèi)容
4. 物理建模,這部分得建模工作,主要包含以下幾個部分:
· 針對特定物理化平臺,做出相應的技術調(diào)整
· 針對模型的性能考慮,對特定平臺作出相應的調(diào)整· 針對管理的需要,結合特定的平臺,做出相應的調(diào)整· 生成最后的執(zhí)行腳本,并完善之。
從我們上面對數(shù)據(jù)倉庫的數(shù)據(jù)建模階段的各個階段的劃分,我們能夠了解到整個數(shù)據(jù)倉庫建模的主要工作和工作量,希望能夠?qū)ξ覀冊趯嶋H的項目建設能夠有所幫助。
3.4 數(shù)據(jù)倉庫建模方法
大千世界,表面看五彩繽紛,實質(zhì)上,萬物都遵循其自有的法則。數(shù)據(jù)倉庫的建模方法同樣也有很多種,每一種建模方法其實代表了哲學上的一個觀點,代表了一種歸納,概括世界的一種方法。目前業(yè)界較為流行的數(shù)據(jù)倉庫的建模方法非常多,這里主要介紹范式建模法,維度建模法,實體建模法等幾種方法,每種方法其實從本質(zhì)上講就是從不同的角度看我們業(yè)務中的問題,不管從技術層面還是業(yè)務層面,其實代表的是哲學上的一種世界觀。我們下面給大家詳細介紹一下這些建模方法。
1. 范式建模法(Third Normal Form,3NF)
范式建模法其實是我們在構建數(shù)據(jù)模型常用的一個方法,該方法的主要由 Inmon 所提倡,主要解決關系型數(shù)據(jù)庫得數(shù)據(jù)存儲,利用的一種技術層面上的方法。目前,我們在關系型數(shù)據(jù)庫中的建模方法,大部分采用的是三范式建模法。
范式是數(shù)據(jù)庫邏輯模型設計的基本理論,一個關系模型可以從第一范式到第五范式進行無損分解,這個過程也可稱為規(guī)范化。在數(shù)據(jù)倉庫的模型設計中目前一般采用第三范式,它有著嚴格的數(shù)學定義。從其表達的含義來看,一個符合第三范式的關系必須具有以下三個條件 :
· 每個屬性值唯一,不具有多義性 ;
· 每個非主屬性必須完全依賴于整個主鍵,而非主鍵的一部分 ;· 每個非主屬性不能依賴于其他關系中的屬性,因為這樣的話,這種屬性應該歸到其他關系中去。
由于范式是基于整個關系型數(shù)據(jù)庫的理論基礎之上發(fā)展而來的,因此,本人在這里不多做介紹,有興趣的讀者可以通過閱讀相應的材料來獲得這方面的知識。
根據(jù) Inmon 的觀點,數(shù)據(jù)倉庫模型得建設方法和業(yè)務系統(tǒng)的企業(yè)數(shù)據(jù)模型類似。在業(yè)務系統(tǒng)中,企業(yè)數(shù)據(jù)模型決定了數(shù)據(jù)的來源,而企業(yè)數(shù)據(jù)模型也分為兩個層次,即主題域模型和邏輯模型。同樣,主題域模型可以看成是業(yè)務模型的概念模型,而邏輯模型則是域模型在關系型數(shù)據(jù)庫上的實例。
圖 5. 范式建模法
從業(yè)務數(shù)據(jù)模型轉向數(shù)據(jù)倉庫模型時,同樣也需要有數(shù)據(jù)倉庫的域模型,即概念模型,同時也存在域模型的邏輯模型。這里,業(yè)務模型中的數(shù)據(jù)模型和數(shù)據(jù)倉庫的模型稍微有一些不同。主要區(qū)別在于:
· 數(shù)據(jù)倉庫的域模型應該包含企業(yè)數(shù)據(jù)模型的域模型之間的關系,以及各主題域定義。數(shù)據(jù)倉庫的域模型的概念應該比業(yè)務系統(tǒng)的主題域模型范圍更加廣。
· 在數(shù)據(jù)倉庫的邏輯模型需要從業(yè)務系統(tǒng)的數(shù)據(jù)模型中的邏輯模型中抽象實體,實體的屬性,實體的子類,以及實體的關系等。
以筆者的觀點來看,Inmon 的范式建模法的最大優(yōu)點就是從關系型數(shù)據(jù)庫的角度出發(fā),結合了業(yè)務系統(tǒng)的數(shù)據(jù)模型,能夠比較方便的實現(xiàn)數(shù)據(jù)倉庫的建模。但其缺點也是明顯的,由于建模方法限定在關系型數(shù)據(jù)庫之上,在某些時候反而限制了整個數(shù)據(jù)倉庫模型的靈活性,性能等,特別是考慮到數(shù)據(jù)倉庫的底層數(shù)據(jù)向數(shù)據(jù)集市的數(shù)據(jù)進行匯總時,需要進行一定的變通才能滿足相應的需求。因此,筆者建議讀者們在實際的使用中,參考使用這一建模方式。
2. 維度建模法
維度建模法,Kimball 最先提出這一概念。其最簡單的描述就是,按照事實表,維表來構建數(shù)據(jù)倉庫,數(shù)據(jù)集市。這種方法的最被人廣泛知曉的名字就是星型模式(Star-schema)。
圖 6. 維度建模法
上圖的這個架構中是典型的星型架構。星型模式之所以廣泛被使用,在于針對各個維作了大量的預處理,如按照維進行預先的統(tǒng)計、分類、排序等。通過這些預處理,能夠極大的提升數(shù)據(jù)倉庫的處理能力。特別是針對 3NF 的建模方法,星型模式在性能上占據(jù)明顯的優(yōu)勢。
同時,維度建模法的另外一個優(yōu)點是,維度建模非常直觀,緊緊圍繞著業(yè)務模型,可以直觀的反映出業(yè)務模型中的業(yè)務問題。不需要經(jīng)過特別的抽象處理,即可以完成維度建模。這一點也是維度建模的優(yōu)勢。
但是,維度建模法的缺點也是非常明顯的,由于在構建星型模式之前需要進行大量的數(shù)據(jù)預處理,因此會導致大量的數(shù)據(jù)處理工作。而且,當業(yè)務發(fā)生變化,需要重新進行維度的定義時,往往需要重新進行維度數(shù)據(jù)的預處理。而在這些與處理過程中,往往會導致大量的數(shù)據(jù)冗余。
另外一個維度建模法的缺點就是,如果只是依靠單純的維度建模,不能保證數(shù)據(jù)來源的一致性和準確性,而且在數(shù)據(jù)倉庫的底層,不是特別適用于維度建模的方法。
因此以筆者的觀點看,維度建模的領域主要適用與數(shù)據(jù)集市層,它的最大的作用其實是為了解決數(shù)據(jù)倉庫建模中的性能問題。維度建模很難能夠提供一個完整地描述真實業(yè)務實體之間的復雜關系的抽象方法。
3. 實體建模法
實體建模法并不是數(shù)據(jù)倉庫建模中常見的一個方法,它來源于哲學的一個流派。從哲學的意義上說,客觀世界應該是可以細分的,客觀世界應該可以分成由一個個實體,以及實體與實體之間的關系組成。那么我們在數(shù)據(jù)倉庫的建模過程中完全可以引入這個抽象的方法,將整個業(yè)務也可以劃分成一個個的實體,而每個實體之間的關系,以及針對這些關系的說明就是我們數(shù)據(jù)建模需要做的工作。
雖然實體法粗看起來好像有一些抽象,其實理解起來很容易。即我們可以將任何一個業(yè)務過程劃分成 3 個部分,實體,事件和說明,如下圖所示:
圖 7. 實體建模法
上圖表述的是一個抽象的含義,如果我們描述一個簡單的事實:“小明開車去學校上學”。以這個業(yè)務事實為例,我們可以把“小明”,“學校”看成是一個實體,“上學”描述的是一個業(yè)務過程,我們在這里可以抽象為一個具體“事件”,而“開車去”則可以看成是事件“上學”的一個說明。
從上面的舉例我們可以了解,我們使用的抽象歸納方法其實很簡單,任何業(yè)務可以看成 3 個部分:
· 實體,主要指領域模型中特定的概念主體,指發(fā)生業(yè)務關系的對象。
· 事件,主要指概念主體之間完成一次業(yè)務流程的過程,特指特定的業(yè)務過程。
· 說明,主要是針對實體和事件的特殊說明。
由于實體建模法,能夠很輕松的實現(xiàn)業(yè)務模型的劃分,因此,在業(yè)務建模階段和領域概念建模階段,實體建模法有著廣泛的應用。從筆者的經(jīng)驗來看,再沒有現(xiàn)成的行業(yè)模型的情況下,我們可以采用實體建模的方法,和客戶一起理清整個業(yè)務的模型,進行領域概念模型的劃分,抽象出具體的業(yè)務概念,結合客戶的使用特點,完全可以創(chuàng)建出一個符合自己需要的數(shù)據(jù)倉庫模型來。
但是,實體建模法也有著自己先天的缺陷,由于實體說明法只是一種抽象客觀世界的方法,因此,注定了該建模方法只能局限在業(yè)務建模和領域概念建模階段。因此,到了邏輯建模階段和物理建模階段,則是范式建模和維度建模發(fā)揮長處的階段。
因此,筆者建議讀者在創(chuàng)建自己的數(shù)據(jù)倉庫模型的時候,可以參考使用上述的三種數(shù)據(jù)倉庫得建模方法,在各個不同階段采用不同的方法,從而能夠保證整個數(shù)據(jù)倉庫建模的質(zhì)量。