数据库——事实表和维度表

Posted

技术标签:

【中文标题】数据库——事实表和维度表【英文标题】:Database - fact table and dimension table 【发布时间】:2012-02-20 14:37:04 【问题描述】:

在阅读有关业务对象的书籍时,我遇到了术语事实表和维度表。这是所有数据库的标准事物,它们都有事实表和维度表,还是仅用于业务对象设计?我正在寻找一种可以区分两者以及它们之间关系的解释。

已编辑:

为什么查询不能只从事实表中获取所需的数据?如果所有信息都单独存储在一个事实表中会发生什么?通过创建单独的事实和维度表并加入它,我们可以获得什么优势?

很抱歉一次有太多问题,但我想知道其中的相互关系和原因。

【问题讨论】:

【参考方案1】:

Dimension 和 Fact 是 OLAP 数据库设计中的关键术语。

事实表包含可以聚合的数据。 度量是聚合的数据表达式(例如,成本总和、调用次数......) 维度包含用于生成组和过滤器的数据。 没有维度数据的事实表是没用的。示例:“订单总数为 1M”不是信息,而是“2005 年至 2009 年订单总数”。

它们有很多使用这些概念(例如Microsft SSAS、Tableau Software)和语言(例如MDX)的 BI 工具。

有时很难知道数据是度量还是维度。比如我们在分析revenue,两种情况都有可能:

3 个措施net profitoverheadsinterest 1 个度量profit1 个维度profit type(包含 3 个元素:净额、开销、利息)

BI 分析师负责确定每个解决方案的最佳设计。

已编辑,因为问题也在编辑中:

OLAP 解决方案通常具有语义层。该层向 OLAP 工具提供以下信息:哪些元素是事实数据,哪些元素是维度数据以及表关系。与 OLTP 系统不同,OLAP 数据库不需要正确规范化。因此,您可以从包括事实表在内的多个表中获取维度数据。从事实表中获取数据的维度被命名为Fact Dimension or Degenerate dimension

在设计 OLAP 数据库时应牢记许多概念:“STAR Schema”、“SNOWFLAKE Schema”、“Surrogate keys”、“parent-child hierarchies”……

【讨论】:

请查看我更新的问题。到目前为止,我很感谢您的回答,但我想了解更多我的知识。【参考方案2】:

在数据仓库中拥有事实表和维度表是一个标准。事实表包含您正在测量的数据,例如您正在求和的数据。维度表是包含您不想在事实表中不断重复的数据的表,例如产品数据、状态、客户等。它们通过键相关:在星型模式中,事实表中的每一行包含维度表中一行的键。

【讨论】:

这是否意味着数据库设计者在设计数据库时应该分别创建事实表和维度表? 是的,分别创建它们。如果事实表中有所有维度数据,那么事实表将比它需要的大得多。尽管应该对数据仓库进行非规范化,但您可能不应该将其非规范化到只剩下一张表的程度。

以上是关于数据库——事实表和维度表的主要内容,如果未能解决你的问题,请参考以下文章

数据库——事实表和维度表

BI中事实表,维度表和数据集市,数据仓库的理解

事实表和维度表

Pentaho Kettle 是不是创建维度表和事实表

结合事实表和维度表的SQL语句?

在Cognos中事实表的概念和维表的概念是啥