干貨 | 數(shù)據(jù)倉庫建模超詳細(xì)攻略!
數(shù)據(jù)倉庫建模,就是數(shù)據(jù)的組織和存儲方法,它強(qiáng)調(diào)從業(yè)務(wù)出發(fā),將數(shù)據(jù)有序組織和存儲起來。本文作者對數(shù)據(jù)倉庫建模常用模型進(jìn)行了分析,一起來看一下吧。
一、數(shù)據(jù)倉庫建模是什么?
數(shù)據(jù)倉庫建模就是數(shù)據(jù)的組織和存儲方法,舉個(gè)例子,數(shù)據(jù)倉庫的建模就類似于家庭物品收納問題,我們會按照物品的特性以及自身的喜好將物品進(jìn)行一個(gè)井然有序的整理收納,使我們清晰地知道物品歸放的位置,便于日后查找使用,也能無形地讓大腦標(biāo)記物品位置,形成歸類統(tǒng)一意識,漸漸成為一種好習(xí)慣。
數(shù)據(jù)建模也是如此,它強(qiáng)調(diào)從業(yè)務(wù)出發(fā),將數(shù)據(jù)有序組織和存儲起來,只有做到這樣,數(shù)據(jù)才可以高效率、高質(zhì)量、高性能、低成本地使用,才可以更好地支持企業(yè)決策,賦能企業(yè)業(yè)務(wù),提升企業(yè)綜合實(shí)力。
二、數(shù)據(jù)倉庫建模常用模型淺析
1. ER模型(實(shí)體關(guān)系模型)
數(shù)據(jù)倉庫之父Bill Inmon提出的建模方法是從全企業(yè)的高度,用實(shí)體關(guān)系(Entity Relationship,ER)模型來描述企業(yè)業(yè)務(wù),并用規(guī)范化的方式表示出來,在范式理論上符合3NF。
1)什么是實(shí)體關(guān)系模型
實(shí)體關(guān)系模型由美籍華裔計(jì)算機(jī)科學(xué)家陳品山發(fā)明,用概念數(shù)據(jù)模型的描述所使用的數(shù)據(jù)或模式圖,實(shí)體關(guān)系模型將復(fù)雜的數(shù)據(jù)抽象為兩個(gè)概念——實(shí)體和關(guān)系。實(shí)體表示一個(gè)對象,例如商店、員工這兩個(gè)對象,關(guān)系是指兩個(gè)實(shí)體之間的關(guān)系,例如員工和商店的從屬關(guān)系。對象與對象的關(guān)系可以分為1-1,1-n,n-n這三種類型,舉例說明:
- 1-1:一個(gè)商店只能有一個(gè)店長,一個(gè)店長只能在一個(gè)商店中任職,則商店和店長就是1對1的關(guān)系。
- 1-n:一個(gè)商店有很多雇員,雇員只屬于這個(gè)商店。則商店和雇員就是1對多的關(guān)系。
- n-n:商店里有很多商品,商品也可以在多個(gè)商店售賣,則商店和商品就是多對多的關(guān)系。
2)范式理論是什么?
范式是表結(jié)構(gòu)設(shè)計(jì)標(biāo)準(zhǔn)的級別,是關(guān)系的約束條件的規(guī)范,關(guān)系型數(shù)據(jù)庫的范式一共有六種,分別是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF)。遵循的范式級別越高,數(shù)據(jù)冗余性就越低。
因?yàn)閿?shù)據(jù)倉庫ER建模遵循3范式標(biāo)準(zhǔn),本文就只針對于前3個(gè)范式進(jìn)行講解,其他的范式不再贅述, 感興趣的讀者可以自己查詢下相關(guān)資料。
數(shù)據(jù)庫規(guī)范化就是使用一系列范式設(shè)計(jì)數(shù)據(jù)庫(通常是關(guān)系型數(shù)據(jù)庫)的過程,其目的是減少數(shù)據(jù)冗余,增強(qiáng)數(shù)據(jù)的一致性,必須要注意的一點(diǎn)是范式存在前置依賴,如要使用第三范式,設(shè)計(jì)數(shù)據(jù)庫時(shí)必須依賴于使用前兩個(gè)范式的之后,才可以按照第三范式的繼續(xù)設(shè)計(jì)數(shù)據(jù)庫表。具體設(shè)計(jì)時(shí)要根據(jù)業(yè)務(wù)實(shí)際流程,一般遵循第三范式即可。
第一范式:強(qiáng)調(diào)列的原子性,要求每列屬性不可分割。
"="">
第二范式:在1范式的基礎(chǔ)上,要求屬性必須依賴于主鍵,不能存在部分函數(shù)依賴。
函數(shù)依賴:某個(gè)屬性集x決定另一個(gè)屬性集y時(shí),稱另一屬性集y依賴于該屬性集x。如學(xué)號和姓名,通過學(xué)號可以找到姓名,那么就說姓名依賴于學(xué)號。
完全函數(shù)依賴:通過xy能得到z,但是單獨(dú)通過x或者通過y得不到z,那么就稱z完全依賴于xy。如:學(xué)號,課程和成績??梢酝ㄟ^學(xué)號和課程得到成績,但是單獨(dú)通過課程和學(xué)號得不到課程,就說成績完全依賴于課程和學(xué)號。
部分函數(shù)依賴:通過xy能得到z,通過x得到z或者通過y也可以得到z,那么就說z部分依賴于xy,如學(xué)號、姓名和性別,通過學(xué)號和姓名可以找到性別,也可以通過學(xué)號單獨(dú)找到性別,就說性別部分依賴于學(xué)號和姓名。
傳遞函數(shù)依賴:通過x能得到y(tǒng),通過y得到z,那么就說z傳遞依賴于x,如通過學(xué)號得到班級名稱,在通過班級名稱找到班主任,就可以說班主任傳遞依賴于學(xué)號。
"="" alt="干貨 | 數(shù)據(jù)倉庫建模超詳細(xì)攻略!?。? />
如上圖所示:表中的主鍵如果是(學(xué)號、課程)的話,通過(學(xué)號、課程)可以找到成績,分?jǐn)?shù)是完全依賴于(學(xué)號、課程)但是姓名可以單獨(dú)通過學(xué)號找到,姓名不完全依賴于找到(學(xué)號、課程),故不符合第二范式。調(diào)整后如下所示:
="" src="https://image.woshipm.com/wp-files/2022/12/hZLOdIkWWRrWQvKERNrK.png">
如圖所示:上邊這張表中,如果想要找到輔導(dǎo),通過學(xué)號找到班級,通過班級找到輔導(dǎo)員,存在很明顯的函數(shù)依賴,故不符合第三范式要求,調(diào)整后如圖所示:
"="">
那么我們以訂單業(yè)務(wù)為例,采用ER模型遵循3范式建模,按照這種方式將數(shù)據(jù)進(jìn)行規(guī)范化處理,則可以構(gòu)建出下圖所示的數(shù)倉模型,值得注意的是下圖只是將一部分交易流程進(jìn)行了繪制,訂單風(fēng)控、訂單退貨退款、訂單評價(jià)等還沒有繪制到模型中。
從圖中我們可以看出按照這樣的方式進(jìn)行數(shù)據(jù)建模,雖然減少了數(shù)據(jù)冗余性,保證了數(shù)據(jù)的一致性,但是如果要查詢一個(gè)相關(guān)的指標(biāo)或者事實(shí)可能需要關(guān)聯(lián)十幾張表,在數(shù)據(jù)量小,有索引的情況下可能還好些,如果數(shù)據(jù)量十分驚人,數(shù)以億計(jì),那查詢的速度可能十分緩慢,甚至可能會造成宕機(jī),顯而易見這種模型不太適合直接應(yīng)用于業(yè)務(wù)分析和計(jì)算場景。
2. 維度模型
維度模型是Ralph Kimball 在90年代提出的數(shù)倉建模理論,并在于1996年發(fā)布的《The Data Warehouse Toolkit》一書中詳細(xì)介紹了維度建模理論知識。
維度建模之所以能受到廣泛的關(guān)注和認(rèn)可,一方面是因?yàn)樗鼜钠髽I(yè)決策分析作為出發(fā)點(diǎn),為數(shù)據(jù)分析服務(wù),它的初衷是旨在,使用戶更快的完成數(shù)據(jù)分析,以及更好地實(shí)現(xiàn)大規(guī)模復(fù)雜的查詢操作。另外一方面,得益于技術(shù)的發(fā)展,基礎(chǔ)存儲硬件的成本逐年降低,同時(shí)硬件的計(jì)算性能也大幅度提升,才使得維度建模能夠走上歷史舞臺,得到海內(nèi)外企業(yè)和用戶的認(rèn)同。
維度模型將企業(yè)的業(yè)務(wù)通過兩個(gè)方面進(jìn)行數(shù)據(jù)建模,即事實(shí)表和維度表。事實(shí)通常指企業(yè)具體的業(yè)務(wù)過程,如登錄、注冊、加購、下單等等,需要注意的是建模時(shí)通常會選擇最細(xì)粒度的業(yè)務(wù)過程數(shù)據(jù)作為事實(shí)表,如訂單事實(shí)表會選訂單明細(xì)表作為基礎(chǔ)事實(shí)表,而上邊簡述的ER模型則選訂單主表作為基礎(chǔ),維度通常指業(yè)務(wù)過程發(fā)生時(shí)所處的環(huán)境,如何人、何地、何時(shí)、何種東西,何種方法做了哪些事情。
具體細(xì)節(jié)應(yīng)該聯(lián)系業(yè)務(wù)過程,通過5W2H的方法進(jìn)行分析,繪制出具體的總線矩陣。按照維度建模理論,我們將上述訂單過程進(jìn)行了一個(gè)初步建模,中間的為事實(shí)表,周邊的為維度表,需要注意的是,本次建模的內(nèi)容和上邊ER模型講解保持了一致,所以也沒有涵蓋所有的維度,如圖所示:
"="" alt="干貨 | 數(shù)據(jù)倉庫建模超詳細(xì)攻略?。?!">
從上圖中可以看出,維度建模數(shù)據(jù)結(jié)構(gòu)相對ER模型來說,更為清晰簡潔,查詢時(shí)連表操作相對較少,可以及時(shí)響應(yīng)大量且復(fù)雜的查詢操作,提升業(yè)務(wù)分析速度,快速支持業(yè)務(wù)決策。但是數(shù)據(jù)存在大量冗余,需要消耗大量存儲空間。
本文由 @菜鳥數(shù)據(jù)之旅 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
感謝分享?
哦吼,這和軟件工程需求工程都有點(diǎn)類似啊,設(shè)計(jì)方面還是有很多相似之處的。
學(xué)到了!有這么多數(shù)據(jù)模型!要好好研究運(yùn)用到實(shí)際當(dāng)中去