数据反规范化

使用 Microsoft Fabric 进行数据转换与分析

Luis Silva

Solution Architect - Data & AI

什么是规范化?

  • 通过使用键和新表来替代会导致冗余的属性,从而组织数据以减少冗余并提高完整性
  • 基于计算机科学家 Tedd Codd 于 1970 年提出的关系模型原则
  • 第三范式(3NF):非键属性仅依赖主键
使用 Microsoft Fabric 进行数据转换与分析

什么是规范化?

  • 通过使用键和新表替代会造成冗余的属性来实现规范化。

 

示意图:将一张表拆分为三张以减少冗余

使用 Microsoft Fabric 进行数据转换与分析

规范化示例

示例表:包含电子游戏标题及其发行商和类型。示例行:游戏名 Gran Turismo,发行商 Sony,类型 Racing

  • publishergenre 的文本值大量重复。
使用 Microsoft Fabric 进行数据转换与分析

规范化示例

示例表:包含电子游戏标题、发行商和类型。发行商与类型的文本描述已移至独立表,游戏表中的文本被引用这些主数据表的数字 ID 取代

  • publishergenre 的文本值现在只出现一次。
  • Games 表中用数字键替代 publishergenre 更省空间
使用 Microsoft Fabric 进行数据转换与分析

反规范化

  • 反规范化通过冗余来扁平化数据模型;与规范化相反
  • 反规范化减少表数量,但增加冗余

示意图:将多张表连接为一张

使用 Microsoft Fabric 进行数据转换与分析

何时使用规范化?

  • OLTP 事务系统

    • 优化写入(单条插入、更新、删除)
    • 确保数据完整性
  • 事实表

    • 数百万行
    • 减少存储空间
    • 模型更易理解
    • 星型模式的基础

 

星型模式示意图,突出显示事实表

使用 Microsoft Fabric 进行数据转换与分析

何时使用反规范化?

  • 维度表
    • 通常比事实表小得多
    • 冗余 = 更少连接 = 查询更快
    • 查询性能提升大于存储冗余成本
    • 星型模式比雪花模式更简单

 

星型模式示意图,突出显示维度表

使用 Microsoft Fabric 进行数据转换与分析

实施反规范化

 

 

三个工具的图标:SQL、Spark 和 Dataflows

使用 Microsoft Fabric 进行数据转换与分析

用 SQL 实施反规范化

  • SELECT + JOIN 语句
-- [dim_videogames]: Videogames table
-- [dim_genres]: Genres table
-- [dim_publishers]: Publishers table

SELECT game_id, title, gen.genre, pub.publisher
FROM dim_videogames_norm vidg
JOIN dim_genres gen
  ON vidg.genre_id = gen.genre_id
JOIN dim_publishers pub
  ON vidg.publisher_id = pub.publisher_id
使用 Microsoft Fabric 进行数据转换与分析

用 Spark 实施反规范化

  • DataFrame 的 join() 与 select()
# [videogamesDF]: Videogames DataFrame
# [genresDF]: Genres DataFrame
# [publishersDF]: Publishers DataFrame

videogames1DF = videogamesDF.join(genresDF, ["genre_id"])
videogamesdenormDF = videogames1DF.join(publishersDF, ["publisher_id"])
videogamesdenormDF.select("game_id", "title", "genre_id", "publisher_id").show()
使用 Microsoft Fabric 进行数据转换与分析

用 Dataflows 实施反规范化

  • 使用查询加载数据
  • 使用"合并查询"或"合并查询为新查询"来连接查询

Dataflow 截图:使用"合并查询为新查询"连接 videogames、genres 和 publishers 查询

使用 Microsoft Fabric 进行数据转换与分析

我们来练习!

使用 Microsoft Fabric 进行数据转换与分析

Preparing Video For Download...