1
前言
數(shù)據(jù)建模乍一聽的時(shí)候感覺非常的有技術(shù)性,并且外行感覺非常的高大上,高深莫測。
在目前的時(shí)代下,數(shù)據(jù)量可以說是海量,并且還在持續(xù)增長,那么對于企業(yè)來說,如何快速的準(zhǔn)確的從這些數(shù)據(jù)中獲取自己想得到的信息呢?
2
什么是數(shù)據(jù)建模
數(shù)據(jù)建模簡單來說就是基于對業(yè)務(wù)的理解,將各種數(shù)據(jù)進(jìn)行整合和關(guān)聯(lián),并最終使得這些數(shù)據(jù)可用性,可讀性增強(qiáng),讓使用方能快速的獲取到自己關(guān)心的有價(jià)值的信息并且及時(shí)的作出響應(yīng),為公司帶來效益。
3
為什么要建模
數(shù)據(jù)建模是一套方法論,主要是對數(shù)據(jù)的整合和存儲做一些指導(dǎo),強(qiáng)調(diào)從各個(gè)角度合理的存儲數(shù)據(jù)。
有了合適的數(shù)據(jù)模型,是會帶來很多好處的:
所以大數(shù)據(jù)系統(tǒng)需要數(shù)據(jù)模型方法來更好的組織和存儲,以便在性能,成本,效率和質(zhì)量之間取的平衡。
4
建模常用工具
PowerDesigner:
Power Designer 是Sybase公司的CASE工具集,使用它可以方便地對管理信息系統(tǒng)進(jìn)行分析設(shè)計(jì),他幾乎包括了數(shù)據(jù)庫模型設(shè)計(jì)的全過程。利用Power Designer可以制作數(shù)據(jù)流程圖、概念數(shù)據(jù)模型、物理數(shù)據(jù)模型,還可以為數(shù)據(jù)倉庫制作結(jié)構(gòu)模型,也能對團(tuán)隊(duì)設(shè)計(jì)模型進(jìn)行控制。他可以與許多流行的軟件開發(fā)工具,例如PowerBuilder、Delphi、VB等相配合使開發(fā)時(shí)間縮短和使系統(tǒng)設(shè)計(jì)更優(yōu)化。
power designer是能進(jìn)行數(shù)據(jù)庫設(shè)計(jì)的強(qiáng)大的軟件,是一款開發(fā)人員常用的數(shù)據(jù)庫建模工具。使用它可以分別從概念數(shù)據(jù)模型(Conceptual Data Model)和物理數(shù)據(jù)模型(Physical Data Model)兩個(gè)層次對數(shù)據(jù)庫進(jìn)行設(shè)計(jì)。在這里,概念數(shù)據(jù)模型描述的是獨(dú)立于數(shù)據(jù)庫管理系統(tǒng)(DBMS)的實(shí)體定義和實(shí)體關(guān)系定義;物理數(shù)據(jù)模型是在概念數(shù)據(jù)模型的基礎(chǔ)上針對目標(biāo)數(shù)據(jù)庫管理系統(tǒng)的具體化。
5
業(yè)務(wù)系統(tǒng)和數(shù)據(jù)倉庫建模區(qū)別
在業(yè)務(wù)系統(tǒng)中,通常面對業(yè)務(wù)庫的隨機(jī)讀寫,目前主要是采用三范式(3NF)模型存儲數(shù)據(jù)。
而在數(shù)據(jù)倉庫的建模過程中,由于主要是數(shù)據(jù)的批量讀取操作,但是事物并不是我們所關(guān)心的,主要是關(guān)注數(shù)據(jù)的整合以及查詢處理性能,因此會采用其他的建模方法,以Kimball維度建模最為經(jīng)典。
6
Kimball和Inmon架構(gòu)
1
Inmon架構(gòu)
輻射狀企業(yè)信息工廠(CIF) 方法由Bill Inmon及業(yè)界人士倡導(dǎo)的。在這個(gè)環(huán)境下,數(shù)據(jù)從操作性數(shù)據(jù)源中獲取,在ETL系統(tǒng)中處理,將這一過程稱為數(shù)據(jù)獲取,從這一過程中獲得的原子數(shù)據(jù)保存在滿足第三范式的數(shù)據(jù)庫中,這種規(guī)范化的原子數(shù)據(jù)的倉庫被稱為CIF架構(gòu)下的企業(yè)級數(shù)據(jù)倉庫(EDW)
與Kimball方法相似,CIF提倡企業(yè)數(shù)據(jù)協(xié)調(diào)與集成,但CIF認(rèn)為要利用規(guī)范化的EDW承擔(dān)這一角色,而Kimball架構(gòu)強(qiáng)調(diào)具有一致性維度的企業(yè)總線的重要作用
Inmon企業(yè)級數(shù)據(jù)倉庫的分析數(shù)據(jù)庫通常以部門為中心(而不是圍繞業(yè)務(wù)過程來組織),而且包含匯總數(shù)據(jù),并不是原子級別數(shù)據(jù),如果ETL過程中數(shù)據(jù)所應(yīng)用的業(yè)務(wù)規(guī)則超越了基本概要,如部門改名了或者其他的類似計(jì)算,要將分析數(shù)據(jù)庫與EDW原子數(shù)據(jù)聯(lián)系起來將變得很困難
2
Kimball架構(gòu)
Kimball架構(gòu)利用了CIF中處于中心地位的EDW,但是此次的EDW完全與分析與報(bào)表用戶隔離,僅作為數(shù)據(jù)來源,其中數(shù)據(jù)是維度的,原子的,以過程為中心的,與企業(yè)級數(shù)據(jù)倉庫總線結(jié)構(gòu)保持一致。
3
架構(gòu)對比
Inmon架構(gòu)是自頂向下,即從數(shù)據(jù)抽取-->數(shù)據(jù)倉庫-->數(shù)據(jù)集市,以數(shù)據(jù)源為導(dǎo)向,是一種瀑布流開發(fā)方法,模型偏向于3NF,
Kimball:架構(gòu)是自下向上,即從數(shù)據(jù)集市(主題劃分)-->數(shù)據(jù)倉庫--> 數(shù)據(jù)抽取,是以需求為導(dǎo)向的,一般使用星型模型
Inmon架構(gòu)下,不強(qiáng)調(diào)事實(shí)表和維表的概念,因?yàn)閿?shù)據(jù)源變化可能會比較大,更加強(qiáng)調(diào)的是數(shù)據(jù)清洗的工作
kimball架構(gòu)強(qiáng)調(diào)模型由事實(shí)表和維表組成,注重事實(shí)表與維表的設(shè)計(jì)
Inmon架構(gòu)中,數(shù)據(jù)集市有自己的物理存儲,是真實(shí)存在的。
Kimball數(shù)據(jù)倉庫架構(gòu)中,數(shù)據(jù)集市是一個(gè)邏輯概念,只是多維數(shù)據(jù)倉庫中的主題域劃分,并沒有自己的物理存儲,也可以說是虛擬的數(shù)據(jù)集市。是數(shù)據(jù)倉庫的一個(gè)訪問層,是按主題域組織的數(shù)據(jù)集合,用于支持部門級的決策。
Inmon架構(gòu)是以部門為中心,而Kimball架構(gòu)是以業(yè)務(wù)過程為中心
Inmon架構(gòu)中用戶可以直接訪問企業(yè)數(shù)據(jù)倉庫(EDW)
Kimball架構(gòu)中用戶不可以直接訪問企業(yè)數(shù)據(jù)倉庫(EDW),只能訪問展現(xiàn)區(qū)數(shù)據(jù)
4
總結(jié)
企業(yè)開發(fā)中一般選擇Kimball維度建模
7
數(shù)據(jù)建模的幾種方式
1
ER模型
ER模型是屬于三范式的,是企業(yè)級的主題抽象而不是單獨(dú)描述某個(gè)業(yè)務(wù)
1.1 什么是范式
當(dāng)分類不可再分時(shí),這種關(guān)系是規(guī)范化的,一個(gè)低級范式分解轉(zhuǎn)換為更高級的范式時(shí),就叫做規(guī)范化
數(shù)據(jù)表可以分為1-5NF,第一范式是最低要求,第五范式則是最高要求
最常用的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)
1.2 第一范式
表中的每一列都是不可拆分的原子項(xiàng)
由上圖可知,phone字段里面存了2個(gè)值,具有可分割性,不符合1NF,可以改成:
1.3 第二范式
第二范式要同時(shí)滿足下面兩個(gè)條件:
上圖可以看出,如果一個(gè)用戶下了很多訂單,則用戶名,收獲地址和手機(jī)號有重復(fù)出現(xiàn)的情況造成數(shù)據(jù)冗余,很明顯不太符合第二范式,可以改成:
1.4 第三范式
第三范式要同時(shí)滿足下面兩個(gè)條件:
簡單點(diǎn)說,關(guān)系重復(fù),能互相推導(dǎo)出來
如上圖所示,如果知道了zip郵編,其實(shí)是能推出來省市區(qū)的,相反,知道了省市區(qū),也是可以推出郵編的,有傳遞依賴,造成了冗余,不符合第三范式,需要改造:
1.5 小結(jié)
在關(guān)系數(shù)據(jù)模型設(shè)計(jì)中,一般需要滿足第三范式的要求。如果一個(gè)表有良好的主外鍵設(shè)計(jì),就應(yīng)該是滿足3NF的表。
規(guī)范化帶來的好處是通過減少數(shù)據(jù)冗余提高更新數(shù)據(jù)的效率,同時(shí)保證數(shù)據(jù)完整性。然而,我們在實(shí)際應(yīng)用中也要防止過度規(guī)范化的問題。規(guī)范化程度越高,劃分的表就越多,在查詢數(shù)據(jù)時(shí)越有可能使用表連接操作。
而如果連接的表過多,會影響查詢的性能。關(guān)鍵的問題是要依據(jù)業(yè)務(wù)需求,仔細(xì)權(quán)衡數(shù)據(jù)查詢和數(shù)據(jù)更新的關(guān)系,制定最適合的規(guī)范化程度。還有一點(diǎn)需要注意的是,不要為了遵循嚴(yán)格的規(guī)范化規(guī)則而修改業(yè)務(wù)需求。
2
維度建模
維度建模是一種將大量數(shù)據(jù)結(jié)構(gòu)化的邏輯設(shè)計(jì)手段,包含維度和指標(biāo),它不像ER模型目的是消除冗余數(shù)據(jù),維度建模是面向分析,最終目的是提高查詢性能,所以會增加數(shù)據(jù)冗余,并且違反三范式。
維度建模也是重點(diǎn)關(guān)注讓用戶快速完成需求分析且對于復(fù)雜查詢及時(shí)響應(yīng),維度建模一般可以分為三種:
其中最常用的其實(shí)是星型模型
2.1 背景
在多維分析的商業(yè)智能解決方案中,根據(jù)事實(shí)表和維度表的關(guān)系,又可將常見的模型分為星型模型,雪花型模型及星座模型。在設(shè)計(jì)邏輯型數(shù)據(jù)的模型的時(shí)候,就應(yīng)考慮數(shù)據(jù)是按照星型模型,雪花型模型還是星座模型進(jìn)行組織。
2.2 星型模型
星形模型中有一張事實(shí)表,以及零個(gè)或多個(gè)維度表,事實(shí)表與維度表通過主鍵外鍵相關(guān)聯(lián),維度表之間沒有關(guān)聯(lián),當(dāng)所有維表都直接連接到“ 事實(shí)表”上時(shí),整個(gè)圖解就像星星一樣,故將該模型稱為星型模型。星形模型是最簡單,也是最常用的模型。由于星形模型只有一張大表,因此它相比于其他模型更適合于大數(shù)據(jù)處理。其他模型可以通過一定的轉(zhuǎn)換,變?yōu)樾切文P汀?/p>
星型架構(gòu)是一種非正規(guī)化的結(jié)構(gòu),多維數(shù)據(jù)集的每一個(gè)維度都直接與事實(shí)表相連接,不存在漸變維度,所以數(shù)據(jù)有一定的冗余,如在地域維度表中,存在國家 A 省 B 的城市 C 以及國家 A 省 B 的城市 D 兩條記錄,那么國家 A 和省 B 的信息分別存儲了兩次,即存在冗余。
2.3 雪花模型
當(dāng)有一個(gè)或多個(gè)維表沒有直接連接到事實(shí)表上,而是通過其他維表連接到事實(shí)表上時(shí),其圖解就像多個(gè)雪花連接在一起,故稱雪花模型。雪花模型是對星型模型的擴(kuò)展。它對星型模型的維表進(jìn)一步層次化,原有的各維表可能被擴(kuò)展為小的維度表,形成一些局部的 ' 層次 ' 區(qū)域,這些被分解的表都連接到主維度表而不是事實(shí)表。如圖,將地域維表又分解為國家,省份,城市等維表。它的優(yōu)點(diǎn)是 : 通過最大限度地減少數(shù)據(jù)存儲量以及聯(lián)合較小的維表來改善查詢性能。雪花型結(jié)構(gòu)去除了數(shù)據(jù)冗余。
2.4 星座模型
星座模型是由星型模型延伸而來,星型模型是基于一張事實(shí)表而星座模式是基于多張事實(shí)表,并且共享維度表信息,這種模型往往應(yīng)用于數(shù)據(jù)關(guān)系比星型模型和雪花模型更復(fù)雜的場合。星座模型需要多個(gè)事實(shí)表共享維度表,因而可以視為星形模型的集合,故亦被稱為星系模型
2.5 對比
2.6 小結(jié)
通過對比,我們可以發(fā)現(xiàn)數(shù)據(jù)倉庫大多數(shù)時(shí)候是比較適合使用星型模型構(gòu)建底層數(shù)據(jù)Hive表,通過大量的冗余來減少表查詢的次數(shù)從而提升查詢效率,星型模型對OLAP的分析引擎支持比較友好,這一點(diǎn)在Kylin中比較能體現(xiàn)。而雪花模型在關(guān)系型數(shù)據(jù)庫中如MySQL,Oracle中非常常見,尤其像電商的數(shù)據(jù)庫表。在數(shù)據(jù)倉庫中雪花模型和星座模型的應(yīng)用場景比較少,但也不是沒有,所以在具體設(shè)計(jì)的時(shí)候,可以考慮是不是能結(jié)合兩者的優(yōu)點(diǎn)參與設(shè)計(jì),以此達(dá)到設(shè)計(jì)的最優(yōu)化目的。
2.7 建模原則:
將業(yè)務(wù)相近或者相關(guān)、粒度相同的數(shù)據(jù)設(shè)計(jì)為一個(gè)邏輯或者物理模型:將高概率同 時(shí)訪問的數(shù)據(jù)放一起 ,將低概率同時(shí)訪問的數(shù)據(jù)分開存儲。
建立核心模型與擴(kuò)展模型體系,核心模型包括的宇段支持常用的核心業(yè)務(wù),擴(kuò)展模型包括的字段支持個(gè)性化或少量應(yīng)用的需要 ,不能讓擴(kuò)展模型的宇段過度侵人核心模型,以免破壞核心模型的架構(gòu)簡潔性與可維護(hù)性。
越是底層公用的處理邏輯越應(yīng)該在數(shù)據(jù)調(diào)度依賴的底層進(jìn)行封裝與實(shí)現(xiàn),不要讓公用的處理邏輯暴露給應(yīng)用層實(shí)現(xiàn),不要讓公共邏輯多處同時(shí)存在。
適當(dāng)?shù)臄?shù)據(jù)冗余可換取查詢和刷新性能,不宜過度冗余與數(shù)據(jù)復(fù)制。
處理邏輯不變,在不同時(shí)間多次運(yùn)行數(shù)據(jù)結(jié)果確定不變。
具有相同含義的字段在不同表中的命名必須相同,必須使用規(guī)范定義中的名稱。
表命名需清晰、一致,表名需易于消費(fèi)者理解和使用。
星型模型設(shè)計(jì)步驟:
3
Data Vault模型
Data Vault Dan Linstedt 發(fā)起創(chuàng)建的一種模型,它是模型的衍生,其設(shè)計(jì)的出發(fā)點(diǎn)也是為了實(shí)現(xiàn)數(shù)據(jù)的整合,但不能直接用于數(shù)據(jù)分析決策。它強(qiáng)調(diào)建立一個(gè)可審計(jì)的基礎(chǔ)數(shù)據(jù)層,也就是強(qiáng)調(diào)數(shù)據(jù)的歷史性、可追溯性和原子性,而不要求對數(shù)據(jù)進(jìn)行過度的一致性處理和整合;
同時(shí)它基于主題概念將企業(yè)數(shù)據(jù)進(jìn)行結(jié)構(gòu)化組織,并引入了更進(jìn)一步的范式處理來優(yōu)化模型,以應(yīng)對源系統(tǒng)變更的擴(kuò)展性。Data Vault 型由以下幾部分組成。
· Hub :是企業(yè)的核心業(yè)務(wù)實(shí)體,由 實(shí)體 key 、數(shù)據(jù)倉庫序列代理鍵、裝載時(shí)間、數(shù)據(jù)來源組成。
· Link :代表 Hub 之間的關(guān)系。這里與 模型最大的區(qū)別是將關(guān)系作為一個(gè)獨(dú)立的單元抽象,可以提升模型的擴(kuò)展性。它可以直
接描述 1:1 1:n n:n 的關(guān)系,而不需要做任何變更。它由 Hub 的代理鍵、裝載時(shí)間、數(shù)據(jù)來源組成。
· Satellite :是 Hub 的詳細(xì)描述內(nèi)容, 一個(gè) Hub 可以有多個(gè) Satellite它由 Hub 的代理鍵、裝載時(shí)間、來源類型、詳細(xì)的 Hub 描述信息組成。
Data Vault 模型比 ER 模型更容易設(shè)計(jì)和產(chǎn)出,它的 ETL 加工可實(shí)現(xiàn)配置化。
8
模型分層
1
前言
數(shù)據(jù)倉庫一般分為三層,自上而下分別為數(shù)據(jù)貼源層(ODS,Operation Data Store)、數(shù)據(jù)公共層(CDM,Common Data Model)和數(shù)據(jù)應(yīng)用層(ADS,Application Data Service)。
2
ods層
貼源層,與業(yè)務(wù)庫保持一致,不做任何處理
3
cdm層
數(shù)據(jù)公共層CDM(Common Data Model,又稱通用數(shù)據(jù)模型層),包括DIM維度表、DWD,DW和DWS,由ODS層數(shù)據(jù)加工而成。主要完成數(shù)據(jù)加工與整合,建立一致性的維度,構(gòu)建可復(fù)用的面向分析和統(tǒng)計(jì)的明細(xì)事實(shí)表,以及匯總公共粒度的指標(biāo)
公共匯總粒度事實(shí)層的表通常也被稱為匯總邏輯表,用于存放派生指標(biāo)數(shù)據(jù)。
4
ads層
數(shù)據(jù)應(yīng)用層ADS(Application Data Service):面向業(yè)務(wù)需求定制開發(fā),存放數(shù)據(jù)產(chǎn)品個(gè)性化的統(tǒng)計(jì)指標(biāo)數(shù)據(jù)。
5
邏輯分層架構(gòu)
6
分層的好處
# 參考 《大數(shù)據(jù)之路:阿里巴巴大數(shù)據(jù)實(shí)踐》
# 參考 《數(shù)據(jù)倉庫工具箱-維度建模指南》
# PowerDesigner介紹來自百度百科