具有在多个事实表中发生的度量的事实表设计

Posted

技术标签:

【中文标题】具有在多个事实表中发生的度量的事实表设计【英文标题】:Fact table design with measures that occur in multiple fact tables 【发布时间】:2014-09-26 09:38:32 【问题描述】:

我正在研究星型模式并试图找到数据库设计的最佳实践。

我有几个事实的三个(此时)维度表。大多数事实看起来很相似(这意味着它们是不同类型的事实,但具有相同的特征)。虽然共享度量不属于维度表(因为它们不是事实,而是特定时刻的逻辑测试/条件的结果),但我想知道这种情况的最佳实践是什么。

    是否所有事实表都有“共享”度量 会/可能会出现某种事实雪花事实结构(会带来查询性能问题)

期待您对该主题的见解和论证。

【问题讨论】:

【参考方案1】:

有点太模糊了,但这里有几个选项:

1) 如果所有事实都具有相同的粒度和度量,请考虑将它们全部保存在同一个事实表中,以及一个事实类型维度;

2) 通过虚拟多维数据集连接各种事实表。大多数 OLAP 工具应该允许这样的构造(例如,蒙德里安)

3) 如果不同的事实表具有相同的粒度但不同的度量,那么它们仍然可以组合,但让每种类型的事实贡献不同的事实表列集(而不仅仅是行)

4) 如果以上都不可能(例如不同的粒度),您可能需要在粗粒度级别(使用聚合)或更细粒度级别(使用某些分配算法)重新组合它们,一起分析它们。

5) 如果这仍然不可能,您可能希望合并的不是事实表本身,而是报表/仪表板级别的查询结果,仅合并聚合结果而不是原子数据库行。

【讨论】:

以上是关于具有在多个事实表中发生的度量的事实表设计的主要内容,如果未能解决你的问题,请参考以下文章

识别数据仓库设计中的事实表

Hadoop之数据仓库设计

Hadoop之数据仓库设计

——事实表技术之无事实的事实表

事实表设计

阿里巴巴大数据之路读书笔记——事实表设计的八大原则