为什么我们使用维度模型而不是非规范化的关系模型?

Ham*_*ood 4 oltp denormalization relational-database dimensional-modeling database-schema

我在一些问题上感到困惑.我需要他们的答案.如果我们的关系模型也是去标准化那么为什么我们更喜欢维度模型?我们更喜欢维模型而不是关系模型的原因是什么?您的历史数据也可以存储在OLTP中,您可以在任何OLTP上轻松执行报告,然后我们使用维度模型和数据仓库?维度和非规范化表之间有什么区别?

提前致谢

Kri*_*pta 9

简短回答:

如果您从OLTP表中查找/检索的速度足够快,并且您的特定搜索要求没有如下所述的复杂性,那么就不需要进入任何维度星型模式.

答案很长:

尺寸和非规范化模型具有不同的目的.维度模型通常用于数据仓库方案,并且在计算数字(例如"按地区按季度销售"或"由销售人员")需要超快查询结果的情况下特别有用.在预先计算这些数字之后,数据存储在Dimensional模型中,并根据某些固定的时间表进行更新.

但即使没有涉及数据仓库,Dimensional模型也可能有用,其目的可以补充Denormalized模型,如下例所示:

A Dimensional model可实现快速搜索.在dimension tables和之间的连接fact table设置在一个star-schema.搜索John Smith将被简化,因为我们将仅在相关维度表中搜索John OR Smith,并从事实表中获取相应的人ID(事实表FK指向维度表PK),从而使所有人都获得他们名下的2个关键字.(进一步的增强将使我们能够通过建立尺寸搜索所有在其名称中具有"John Smith"变体的人,例如John,Jon,Johnny,Jonathan,Smith,Psmith,Smythesnowflake.)

Denormalized model,在另一方面,能够快速检索,比如返回回了很多关于特定项目的列,而不必连接多个表在一起.

因此,在上面的场景中,我们首先使用Dimensional模型为我们感兴趣的人获取一组ID,然后使用Denormalized表获取这些选定ID的完整详细信息,而无需进行任何进一步的连接.

如果我们直接查询非规范化表,这种搜索会非常慢,因为需要在PersonName列上进行文本搜索.如果我们尝试包含名称变体,或者如果我们需要添加更多搜索条件,它会变得更慢.

优秀参考:

Ralph Kimball是一个很好的参考,用于了解维度建模的巨大(也是非常有趣)主题The Data Warehouse Lifecycle Toolkit.其配套卷The Data Warehouse Toolkit涵盖了大量实际用例.

希望这可以帮助!

  • 维度模型不一定在聚合级别预先计算数字,但可能出于其他性能原因而这样做。相反,“原始”维度模型处于粒度、详细级别,并且在查询时聚合数字。我也没有看到快速搜索和快速检索之间的区别。维度模型在某些方面也是非规范化的。'john'、'jon' 示例也不是雪花维度的示例,您也不会首先使用维度模型和非规范化表。维度是非规范化的,具有您需要的所有详细信息。 (3认同)

Ric*_*ich 5

维度模型使用非规范化作为其技术之一,以优化数据库: - 查询性能,以及 - 用户理解。

OLTP 系统通常很难报告,而且速度也很慢,因为它们是为 OLTP(插入、更新、删除)性能和保护事务完整性而优化的。使用维度模型的数据仓库仍然使用关系技术,但进行了优化以考虑获取数据而不是获取数据的体验。

事实是,您不能总是从任何 OLTP 系统轻松报告:这些表格的标题通常很模糊,而没有考虑到人们想要获取数据来做出业务决策。生成 SQL 的报告工具也很难对典型的规范化模式进行高性能查询。

OLTP 技术的现代进步提供了解决性能问题的维度模型的替代方案,但仍然没有解决创建维度模型时所做的典型步骤,以使数据库表更易于理解和导航。

维度是用于表示业务概念或实体的表,为业务流程(或“事实”)的特定度量提供上下文。维度通常在维度模型中进行非规范化,以减少要理解/导航的表的数量,而且出于性能原因减少连接的数量。例如,产品维度可能会联系品牌信息,而在 OLTP 模型中,这些将是单独的表,这允许用户直接按品牌过滤事实,而无需遍历多个表。