1、數倉建模的目標
- 訪問性能:能夠快速查詢所需的數據,減少數據I/O
- 數據成本:減少不必要的數據冗余,實現計算結果數據復用,降低大數據系統中的存儲成本和計算成本
- 使用效率:改善用戶應用體驗,提高使用數據的效率
- 數據質量:改善數據統計口徑的不一致性,減少數據計算錯誤的可能性,提供高質量的、一直的數據訪問平台
大數據的數倉建模:需要通過建模的方法更好的組織、存儲數據,以便於在性能、成本、效率和數據質量之間找到最佳平衡點
關系模式范式
關系型數據庫設計時,遵照一定的規范要求,目的在於降低數據的冗余性和數據的一致性,目前業界范式有:
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
- 巴斯-科德范式(BCNF)
- 第四范式(4NF)
- 第五范式(5NF)
第一范式(1NF)
域都應該是原子性的,即數據庫的每一列都是不可分割的原子數據項
第二范式(2NF)
在1NF的基礎上,實體的屬性完全依賴於主關鍵字,不能存在僅依賴主關鍵字的一部分的屬性
第三范式(3NF)
在2NF的基礎上,任何非主屬性不依賴於其他非主屬性
數據倉庫建模基本理論
- ER實體模型
- 維度建模
- dataVault模型
- Anchor
1、ER實體模型
在信息系統中,將事物抽象為“實體”、“屬性”、“關系”來表示數據關聯和事物描述;實體:Entity,關系:“Relationship”,這種對數據的抽象建模通常被稱為ER實體關系模型。
- 實體:通常為參與到過程中的主題,客觀存在的,比如商品、倉庫、貨位、汽車,此實體非數據庫的實體表。
- 屬性:對主體的描述、修飾即為屬性,比如商品的屬性有商品名稱、顏色、尺寸、重量、產地等
- 關系:現實的物理事件是依附於實體的,比如商品入庫事件,依附於實體商品、貨位,就會有“庫存”的屬性產生;用戶購買商品,依附實體“用戶”、“商品”,就會有“購買數量”、“金額”的屬性產生。
實體之間建立關系時,存在對照關系:
1:1,即1對1的關系,比如實體人--身份證,一個人僅有一個身份證號
1:n,即1對多的關系,比如實體班級--學生,一個班級中有多個學生,一個學生屬於一個班級。
n:m,即多對多的關系,比如實體學生--課程,每個學生可以選修多門課程,同樣每個課程也可以被多門學生選修。
在日常建模過程中
“實體”用矩形表示:
“關系”用菱形表示:
“屬性”用橢圓形表示:
所以ER實體關系模型,也稱作E-R關系圖。
針對商品入庫,ER圖構建
抽象出實體 | 商品、貨位 |
梳理實體間的關系 | 一個貨位能存儲多個商品,一個商品僅能放置在一個貨位 |
梳理實體屬性、關系屬性 | 商品:ID、名稱、顏色、品類。。。 貨位:位置、容量、存儲條件。。。 入庫關系:庫存 |
案例
場景: 課程管理系統
該系統主要用來管理某校教師、學生、課程,其中包括課程選修、考試、教師授課、學生班級管理功能,現需要完成數據庫邏輯模型設計。
- 抽象出主體
- 梳理主體之間的關系
- 梳理主體的屬性
- 畫出E-R關系圖
IDEF1X
應用場景
- ER模型是數據庫設計的理論基礎,當前幾乎所有的OLTP系統設計都采用ER模型建模的方式
- Bill Inom提出的數倉理論,推薦采用ER關系模型進行建模
- BI架構提出分層架構,數倉底層ods、dwd也多采用ER關系模型進行設計