干貨 | 數(shù)據(jù)倉庫建模超詳細(xì)攻略!
數(shù)據(jù)倉庫建模,就是數(shù)據(jù)的組織和存儲方法,它強調(diào)從業(yè)務(wù)出發(fā),將數(shù)據(jù)有序組織和存儲起來。本文作者對數(shù)據(jù)倉庫建模常用模型進(jìn)行了分析,一起來看一下吧。
一、數(shù)據(jù)倉庫建模是什么?
數(shù)據(jù)倉庫建模就是數(shù)據(jù)的組織和存儲方法,舉個例子,數(shù)據(jù)倉庫的建模就類似于家庭物品收納問題,我們會按照物品的特性以及自身的喜好將物品進(jìn)行一個井然有序的整理收納,使我們清晰地知道物品歸放的位置,便于日后查找使用,也能無形地讓大腦標(biāo)記物品位置,形成歸類統(tǒng)一意識,漸漸成為一種好習(xí)慣。
數(shù)據(jù)建模也是如此,它強調(diào)從業(yè)務(wù)出發(fā),將數(shù)據(jù)有序組織和存儲起來,只有做到這樣,數(shù)據(jù)才可以高效率、高質(zhì)量、高性能、低成本地使用,才可以更好地支持企業(yè)決策,賦能企業(yè)業(yè)務(wù),提升企業(yè)綜合實力。
二、數(shù)據(jù)倉庫建模常用模型淺析
1. ER模型(實體關(guān)系模型)
數(shù)據(jù)倉庫之父Bill Inmon提出的建模方法是從全企業(yè)的高度,用實體關(guān)系(Entity Relationship,ER)模型來描述企業(yè)業(yè)務(wù),并用規(guī)范化的方式表示出來,在范式理論上符合3NF。
1)什么是實體關(guān)系模型
實體關(guān)系模型由美籍華裔計算機(jī)科學(xué)家陳品山發(fā)明,用概念數(shù)據(jù)模型的描述所使用的數(shù)據(jù)或模式圖,實體關(guān)系模型將復(fù)雜的數(shù)據(jù)抽象為兩個概念——實體和關(guān)系。實體表示一個對象,例如商店、員工這兩個對象,關(guān)系是指兩個實體之間的關(guān)系,例如員工和商店的從屬關(guān)系。對象與對象的關(guān)系可以分為1-1,1-n,n-n這三種類型,舉例說明:
- 1-1:一個商店只能有一個店長,一個店長只能在一個商店中任職,則商店和店長就是1對1的關(guān)系。
- 1-n:一個商店有很多雇員,雇員只屬于這個商店。則商店和雇員就是1對多的關(guān)系。
- n-n:商店里有很多商品,商品也可以在多個商店售賣,則商店和商品就是多對多的關(guān)系。
2)范式理論是什么?
范式是表結(jié)構(gòu)設(shè)計標(biāo)準(zhǔn)的級別,是關(guān)系的約束條件的規(guī)范,關(guān)系型數(shù)據(jù)庫的范式一共有六種,分別是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF)。遵循的范式級別越高,數(shù)據(jù)冗余性就越低。
因為數(shù)據(jù)倉庫ER建模遵循3范式標(biāo)準(zhǔn),本文就只針對于前3個范式進(jìn)行講解,其他的范式不再贅述, 感興趣的讀者可以自己查詢下相關(guān)資料。
數(shù)據(jù)庫規(guī)范化就是使用一系列范式設(shè)計數(shù)據(jù)庫(通常是關(guān)系型數(shù)據(jù)庫)的過程,其目的是減少數(shù)據(jù)冗余,增強數(shù)據(jù)的一致性,必須要注意的一點是范式存在前置依賴,如要使用第三范式,設(shè)計數(shù)據(jù)庫時必須依賴于使用前兩個范式的之后,才可以按照第三范式的繼續(xù)設(shè)計數(shù)據(jù)庫表。具體設(shè)計時要根據(jù)業(yè)務(wù)實際流程,一般遵循第三范式即可。
第一范式:強調(diào)列的原子性,要求每列屬性不可分割。
第二范式:在1范式的基礎(chǔ)上,要求屬性必須依賴于主鍵,不能存在部分函數(shù)依賴。
函數(shù)依賴:某個屬性集x決定另一個屬性集y時,稱另一屬性集y依賴于該屬性集x。如學(xué)號和姓名,通過學(xué)號可以找到姓名,那么就說姓名依賴于學(xué)號。
完全函數(shù)依賴:通過xy能得到z,但是單獨通過x或者通過y得不到z,那么就稱z完全依賴于xy。如:學(xué)號,課程和成績。可以通過學(xué)號和課程得到成績,但是單獨通過課程和學(xué)號得不到課程,就說成績完全依賴于課程和學(xué)號。
部分函數(shù)依賴:通過xy能得到z,通過x得到z或者通過y也可以得到z,那么就說z部分依賴于xy,如學(xué)號、姓名和性別,通過學(xué)號和姓名可以找到性別,也可以通過學(xué)號單獨找到性別,就說性別部分依賴于學(xué)號和姓名。
傳遞函數(shù)依賴:通過x能得到y(tǒng),通過y得到z,那么就說z傳遞依賴于x,如通過學(xué)號得到班級名稱,在通過班級名稱找到班主任,就可以說班主任傳遞依賴于學(xué)號。
如上圖所示:表中的主鍵如果是(學(xué)號、課程)的話,通過(學(xué)號、課程)可以找到成績,分?jǐn)?shù)是完全依賴于(學(xué)號、課程)但是姓名可以單獨通過學(xué)號找到,姓名不完全依賴于找到(學(xué)號、課程),故不符合第二范式。調(diào)整后如下所示:
第三范式:消除依賴傳遞,任何非主屬性不依賴與其他非主屬性。
如圖所示:上邊這張表中,如果想要找到輔導(dǎo),通過學(xué)號找到班級,通過班級找到輔導(dǎo)員,存在很明顯的函數(shù)依賴,故不符合第三范式要求,調(diào)整后如圖所示:
以上就是關(guān)于三范式的相關(guān)講解,那么按照Bill Inmon提出的數(shù)倉建模思想,用ER模型進(jìn)行建模,首先以京東商城訂單流程為例子,整個交易環(huán)節(jié)中包含下單,取消訂單、支付,拆單、退款,發(fā)貨、收貨、退換貨、評價等,下圖為京東商城訂單截圖。
那么我們以訂單業(yè)務(wù)為例,采用ER模型遵循3范式建模,按照這種方式將數(shù)據(jù)進(jìn)行規(guī)范化處理,則可以構(gòu)建出下圖所示的數(shù)倉模型,值得注意的是下圖只是將一部分交易流程進(jìn)行了繪制,訂單風(fēng)控、訂單退貨退款、訂單評價等還沒有繪制到模型中。
從上圖中可以看出,維度建模數(shù)據(jù)結(jié)構(gòu)相對ER模型來說,更為清晰簡潔,查詢時連表操作相對較少,可以及時響應(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é)議
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
感謝分享?
哦吼,這和軟件工程需求工程都有點類似啊,設(shè)計方面還是有很多相似之處的。
學(xué)到了!有這么多數(shù)據(jù)模型!要好好研究運用到實際當(dāng)中去