维度建模中事实表的两个或多个相似计数

Posted

技术标签:

【中文标题】维度建模中事实表的两个或多个相似计数【英文标题】:Two or more similar counts on fact table in dimensional modelling 【发布时间】:2010-09-20 21:12:49 【问题描述】:

我设计了一个事实表,用于存储特定日期维度和操作类型(如创建、更新或取消)的事实。事实只能创建和取消一次,但可以多次更新。

myfact
---------------
date_key
location_key
action_type_key

这将允许我计算完成的所有更新、一段时间内创建的所有新更新,并通过位置维度指定特定区域。

现在除了每个事实我还有 2 个计数,即人数,建筑物数。这些之间没有任何关系。而且我想查询有多少事实具有特定的计数,例如有多少有 10 个建筑物,有多少有 9 个等。

对于这些来说,最好的桌子设计是什么。基本上我看到以下选项,但愿意听取更好的解决方案。

    将计数添加为事实表中的参考信息people_countbuilding_count

    为每个存储有效选项的维度添加一个维度,即存储key 和计数的people dimension 和存储key 和计数的building dimension。主要事实将有一个people_key 和一个building_key

    为计数添加一个维度,这些维度用于人员和建筑物计数,即存储 key 和通用计数的 count dimension。主要事实将有一个people_count_key 和一个building_count_key

【问题讨论】:

"但更新了很多次" 这不是一个正确的事实表。那是某种汇总表。正确的事实表是仅插入的。您为什么不简单地使用适当的事实表?为什么要更新汇总计数? 您能否再解释一下——事实表通常不会更新(某些特殊情况除外)。这应该算什么?人与建筑物的关系如何? 感兴趣的信息是一条记录被创建了多少次,记录被更新了多少次等等,然后再结合其他维度。人们与建筑无关,只对每个计数的分组和出现频率感兴趣。 鉴于上述问题,维度建模方法似乎过于矫枉过正。这是对真正问题的简化吗?您期待什么样的数据量? 可能每月大约 3000 次插入,2000 次更新。附加维度的数量约为 8,因此我可以按位置、日期、用户时间等进行分组。 【参考方案1】:

首先,您的计数本质上是最纯粹意义上的“维度”(您可以将维度视为为报告目的对记录进行分组的一种方式)。但问题是维度建模是否是您想要做的。我认为您最好将其视为隐含维度,而不是添加维度表。这实质上意味着维度表没有添加任何内容,并且它们会产生错误的极端情况,除非您需要跟踪一堆与数字相关的信息,否则我认为这不是很有帮助。

如果是我,我只会将计数添加到事实表,而不是其他表。

【讨论】:

以上是关于维度建模中事实表的两个或多个相似计数的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库维度建模法案例

如何对链接到具有不同粒度级别的多个事实的维度表进行建模?

星型模式 - 贷款逾期日期建模

维度建模(星型雪花星座)

维度建模简介

维度建模:如何创建没有代理主键的表?