天天看點

數倉理論【範式】【次元模組化】數倉理論

數倉理論

1 範式理論

1.1 範式概念

資料模組化要遵循一定的規則,在關系模組化中,這種規則就是範式

采用範式結構,可以有效的降低資料的備援性

範式在擷取資料時,需要通過join拼接出資料

範式有第一範式(1NF),第二範式(2NF),第三範式(3NF),巴斯-科德範式(BCNF),第四範式(4NF),第五範式(5NF)

一般隻遵循到第三範式

1.2 函數依賴

1.2.1 完全函數依賴

通過(學号,課程)可以推斷出分數,但是單獨用學号或者課程都不能推斷出分數,這時可以說分數完全依賴于(學号,課程)

即AB能推斷出C,但是A和B單獨不能推斷出C,這時C完全依賴于AB

1.2.2 部分函數依賴

通過(學号,課程)可以推斷出姓名,但是隻通過學号就能推斷出姓名,這時可以說姓名部分依賴于(學号,課程)

即AB能得出C,A或B單獨也能得出C,這時C部分依賴于AB

1.2.3 傳遞函數依賴

學号可以推斷出學院名,學院名可以推斷出院長,但是院長推斷不出來學号,這時可以說院長傳遞依賴于學号

即A得出B,B得出C,但是C得不到A,這時C傳遞依賴于A

1.3三範式的區分

1.3.1 第一範式

1NF的核心原則為:屬性不可切割

比如下面的表格,商品列中的資料可以分割成 3台 和 電腦 ,是以下面的表格不遵循1NF

商品ID 商品 商家ID 使用者ID
001 3台電腦 001 001

修改成遵循1NF的表格為

商品ID 商品 商家ID 使用者ID 數量
001 電腦 001 001 3

1NF時關系型資料庫的最基本的要求,在RDBMS中建立表時,如果不符合1NF的要求,操作是不會成功的

1.3.2 第二範式

2NF的原則為:不存在部分函數依賴

比如下面的表格,屬性不可切割,滿足第一範式,但是課名不完全依賴于(學号,姓名),是以不滿足2NF的要求

數倉理論【範式】【次元模組化】數倉理論

這時将表拆分成以下兩個,這時就滿足了2NF

數倉理論【範式】【次元模組化】數倉理論
數倉理論【範式】【次元模組化】數倉理論

1.3.3 第三範式

3NF的原則為:不存在傳遞函數依賴

拿上面滿足2NF的第二章表來說,系主任傳遞依賴于學号,是以需要進行進一步的拆解

拆分之後的如下兩張表滿足3NF

數倉理論【範式】【次元模組化】數倉理論
數倉理論【範式】【次元模組化】數倉理論

2 關系模組化和次元模組化

2.2 關系模組化

關系模組化将資料抽象成兩個概念:實體和關系,使用規範化的方式表示出來,如圖所示,關系模組化較為松散。

數倉理論【範式】【次元模組化】數倉理論

關系模組化遵循三範式,資料備援性低,但是查詢相對複雜,join操作比較多導緻MR較多,查詢效率較低

2.3 次元模組化

次元模組化以資料分析為出發點,不遵循三範式,存在一些資料備援

面向業務,将業務用事實表和次元表的方式表現出來

查詢效率較高

數倉理論【範式】【次元模組化】數倉理論

3 次元表和事實表

3.1 次元表

次元表一般是對事實的描述資訊,比如:使用者、商品、日期等

次元表很寬,具有多個屬性,列多

與事實表相比,行數相對較小

内容相對固定

  • 比如:時間次元表
日期ID day of week day of year 季度
2023-2-15 3 46 1
2023-2-16 4 47 1

3.2 事實表

事實表中每行資料代表了一個業務事件(下單,支付等)

實時表示的是實踐的路徑成本(次數,個數,金額等)

比如:2023年2月15日,jx在京東花了40元買了一本書

次元表存儲:時間、使用者、商家、商品等

實時表存儲:數量、價錢(40元,一本)

一個事實表的行包括:路徑成本、與次元表相連的外鍵(通常有多個外鍵)

事實表非常大,相對較窄,列數較少,主要存儲的是外鍵id和路徑成本

經常會發生變化,會産生很多的新增資料

3.2.1 事務型事實表

以單個事務或時間為機關

比如:一筆支付記錄、一個訂單記錄

事實表中的一行資料,一旦事務被送出,資料被插入,就不能在進行更改

更新方式為增量同步

3.2.2 周期型快照事實表

不會保留所有的資料,隻保留固定時間間隔的資料

比如:每天的營業額、每月的賬戶餘額等

再比如:購物車随時都有可能增減商品,但是隻關心每天結束時購物車的情況

3.2.3 累積型快照事實表

用于跟蹤業務事實的變化

比如:要累積訂單從下單開始,到訂單商品打包、運輸、簽收的各個業務階段的資料來追蹤進展情況

這個業務進行時,事實表的記錄也要不斷更新

4 次元模型的分類

4.1 模型的介紹

次元模型分為三種:星型模型、雪花模型、星座模型

  • 星型模型
數倉理論【範式】【次元模組化】數倉理論

标準的星型模型隻有一層

  • 雪花模型
    數倉理論【範式】【次元模組化】數倉理論

雪花模型和星型模型的差別主要在于次元的層級

雪花模型較為靠近3NF,但是無法完全遵守

  • 星座模型
    數倉理論【範式】【次元模組化】數倉理論

星座模型包含多個事實表,多個事實表共享次元表

多個星型模型或者雪花模型會形成星座模型

4.2 模型的選擇

星座模型不用進行原則,多個事實表共享次元表是正常的,是資料倉庫的常态

選擇星型模型還是雪花模型,取決于是性能優先還是靈活優先,在實際的開發中不會隻選擇一種,需要根據情況靈活組合

星型模型次元更少,可以減少join,進而減少shuffle

繼續閱讀