专栏首页首席架构师智库「数据仓库架构」数据建模:星型模式

「数据仓库架构」数据建模:星型模式

数据建模是现代数据工作流中的一个关键步骤,其目的是将原始数据组织成方便、高效的形式。如果一个可用的数据集易于访问,数据分析师和科学家将发现他们的工作更加容易。更快的分析和预测将导致更快的商业决策洞察力。

建模的第一步通常是规范化数据,这是一个组织过程,通过减少不一致的依赖性和冗余来提高数据库的灵活性。如果你不熟悉的话,我建议你读一下这个和/或看一些视频!规范化数据库的问题是,任何真正有意思的数据洞察都需要许多连接,随着数据库大小的增加,这些连接会大大降低查询的速度。例如,查看下面的模式,大多数表都不是直接相关的。这意味着要连接订单和位置等两个表中的信息,我们至少需要4个连接(Orders -> Employment -> Person -> Phone_Number -> Location是到达那里的一种方式)

如果在4部分连接之后我们需要更多表的数据呢?那将是疯狂。更不用说,如果只编写查询而不出现任何错误,那将是一个绝对头疼的问题。

此外,实际数据库中的表可能比上面示例中显示的表多得多。正如您可以想象的那样,随着模式的增长,甚至越来越难以理解表之间的关系。

星型模式

解决这个问题的一个方法是执行数据建模的非规范化步骤,以创建一个更简单、易于理解的为ceratin查询优化的模式。创建星型模式的过程包括将完整的模式提取为特定分析过程的相关特性。星型模式的总体结构如下:

星型模式由两种类型的表组成:

  • 事实:业务流程的度量。这些通常是数字和加法(例如发票金额或发票数量)或数量。事实表还包含指向相关维度表的键。在星型模式的中心只有一个事实表。
  • 维度:地点、时间、内容等(如日期/时间、地点、销售商品)。它们通常包含定性信息。数据模式中有多个维度表,它们都与事实表相关。

优势

  • 一个简化的模式意味着我们不必每次想要从数据库中获得一些信息时都编写冗长的查询。
  • 我们对阅读进行了优化。现在我们可以编写更少的连接,结果将更快地返回。
  • 而且,它将业务逻辑用于报告。我们不必向涉众解释所有用于创建模式的疯狂连接,只是可能。

缺点

  • 对数据进行非规范化意味着数据异常可能是一次性插入或更新引起的。在实践中,星型模式是通过“涓流喂养”(trickle feeds)或批处理来实现的,以弥补这个问题。
  • 我们的分析灵活性有限。星型模式通常是为特定目的而设计的。由于星型模式中的特性比完整数据库中的少,因此我们仅限于此星型模式包含的内容。

例子

https://www.guru99.com/star-snowflake-data-warehousing.html

让我们考虑一个商店的销售数据库。我们在模式的中心有一个事实表Revenue和四维表。

事实表由复合主键组成,复合主键是维度表主键的组合。事实表非主键Units_Sold和Revenu是我们感兴趣的事实,Product_Name和Name (分支名称)等维度使我们能够了解有关销售商品的更多信息。

例如,以下查询将允许我们计算2010年按产品列出的总收入:

SELECT p.Product_Name AS product, SUM(r.Revenue) AS total_revenue FROM Revenue r JOIN Product p ON (r.Model_ID = p.Model_ID) JOIN DateDim d ON (r.Date_ID = d.Date_ID) WHERE d.Year = 2010 GROUP BY p.Product_ID

星型模式被广泛使用,对业务应用程序非常有用。它有助于我们加快可能经常运行的查询,并清理可能非常混乱的查询等。

还有其他模式,如雪花模式和星系模式,它们是恒星模式的简单扩展。如果你喜欢星型模式,我建议你也检查其他的!

原文:https://medium.com/@marcosanchezayala/data-modeling-the-star-schema-c37e7652e206

本文:http://jiagoushi.pro/node/1025

讨论:请加入知识星球或者微信圈子【首席架构师智库】

微信公众号

关注微信公众号【首席架构师智库】

微信小号

希望加入的群:架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化,产品转型。

知识星球

向大咖提问,近距离接触,或者获得私密分享。

点击加入知识星球【首席架构师圈】

微信圈子

志趣相投的同好交流。

点击加入微信圈子【首席架构师圈】

喜马拉雅

路上或者车上了解最新黑科技资讯,架构心得。

点击,收听【智能时刻,架构君和你聊黑科技】

知识星球

认识更多朋友,职场和技术闲聊。

点击加入知识星球【知识和技术】

本文分享自微信公众号 - 首席架构师智库(jiagoushipro),作者:南极真君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「数据仓库架构」数据仓库的三种模式建模技术

    在为数据仓库设计的模式模型中,有多种安排模式对象的方法。一个数据仓库模式模型是星型模式。示例模式(本书中大多数示例的基础)使用星型模式。但是,还有其他模式模型通...

    首席架构师智库
  • 「首席架构师推荐」文本挖掘软件列表

    文本挖掘,也称为文本数据挖掘,大致相当于文本分析,是指从文本中获取高质量信息的过程。高质量的信息通常是通过设计模式和趋势通过统计模式学习等手段获得的。

    首席架构师智库
  • 「数据架构」数据模式/纲要,数据结构和数据模型有什么异同

    在讨论了数据架构和数据结构之后,接下来的问题是数据架构和数据结构之间的区别是什么?数据模式、数据结构和数据模型是如何正式命名的?

    首席架构师智库
  • Golang Leetcode 236. Lowest Common Ancestor of a Binary Tree.go

    版权声明:原创勿转 https://blog.csdn.net/anakinsun/article/details/89054981

    anakinsun
  • 当删库跑路成为一种习惯

    我们是谁? DBA! 为什么要跑步? 因为要跑路! 什么时候跑? 删完库! 据新华社北京8月20日电 ,北京一软件工程师徐某离职后因公司未能如期结清工资,便利...

    吴柯
  • Tree - 101. Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric aroun...

    用户5705150
  • java中Integer包装类的详细讲解(java二进制操作,所有进制转换)

    今天为大家分享的是Integer这个包装类。在现实开发中,我们往往需要操作Integer,或者各种进制的转换等等。我今天就为大家详细讲解一下Integer的使用...

    业余草
  • [Selenium+Chrome使用总结]加载Flash、禁用JS脚本、滚动页面至元素、缩放页面

    前几周做了个使用Selenium的项目,踩了好多好多好多的Selenium的坑,越来越感觉他作为一个第三方库,对于Chrome的操作实在是有局限。另外,推荐大家...

    Rude3Knife的公众号
  • [Selenium+Chrome使用总结]加载Flash/禁用JS脚本/滚动页面至元素/缩放页面

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    后端技术漫谈
  • c++多态案例之计算器类

    绝命生

扫码关注云+社区

领取腾讯云代金券