数据库 - 事实表和维度表

14
阅读一本与业务对象相关的书时,我遇到了术语“事实表”和“维度表”。这是所有数据库都必须具备的标准元素还是仅适用于业务对象设计?我需要一个解释来区分它们之间的差异以及它们之间的关系。
编辑后:
为什么查询就不能直接从事实表中获取所需数据?如果所有信息都存储在单个事实表中会发生什么?创建独立的事实和维度表并将其连接起来有哪些优势?
不好意思,问题有点多,但我想知道它们之间的相互关系和原因。

请参见 https://dev59.com/5mIj5IYBdhLWcg3wpWlx。 - Rory
2个回答

11

DimensionFactOLAP数据库设计中的关键术语。

  • 事实表包含可聚合的数据。
  • 度量是聚合数据表达式(例如成本总和,呼叫计数等)。
  • 维度包含用于生成组和筛选器的数据。
  • 没有维度数据的事实表是无用的。例如:“订单总数为1M”不是信息,但“2005年至2009年订单总数”是。

有很多BI工具使用这些概念(例如Microsft SSASTableau Software),以及语言(例如MDX)。

有时候很难确定数据是度量还是维度。例如,我们正在分析收入,两种情况都有可能:
- 3个度量:净利润、运营开销、利息 - 1个度量:利润 和 1个维度:利润类型(包含3个元素:净额、运营开销、利息)
商业智能分析师决定每个解决方案的最佳设计。
An OLAP解决方案通常具有语义层。该层向OLAP工具提供关于哪些元素是事实数据,哪些元素是维度数据以及表的关系的信息。与OLTP系统不同,不需要OLAP数据库经过适当的规范化。因此,可以从包括事实表在内的多个表中获取维度数据。从事实表中获取数据的维度称为事实维度退化维度

设计OLAP数据库时应该牢记许多概念:“星型模式”,“雪花模式”,“代理键”,“父子层次结构”等等。


请看我的更新问题。非常感谢您迄今为止的回答,但我想更深入地了解一些知识。 - Jack_of_All_Trades

1

在数据仓库中,拥有事实表和维度表是标准做法。事实表包含你所测量的数据,例如你正在求和的数据。维度表则包含一些不希望在事实表中重复出现的数据,例如产品数据、状态、客户等等。它们通过键值关联:在星型模式中,事实表中的每一行都包含一个维度表中某一行的键值。


这是否意味着数据库设计师在设计数据库时应该分别创建事实表和维度表? - Jack_of_All_Trades
3
是的,请将它们分开创建。如果您的所有维度数据都在事实表中,则事实表会比必要的要大得多。尽管数据仓库应该是去规范化的,但您可能不应将其去规范化到只剩下一个表的程度。 - stevie_c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接