我想现在是我关于 stackoverflow 的第一个问题的时候了。直到现在,我总能找到问题的答案,但现在我有一个关于事实表设计的非常具体的问题。现在我有一个事实表,问题是,我是否应该把它分成三个事实表。目前该表如下所示:
d_date | d_customer | d_filter | d_x | d_y | metric 1 | metric 2 | metric 3
我的数据库的数据是通过三个不同的查询从源系统返回的:
- 查询 1 返回具有维度日期、客户和过滤器的数据。这个返回每个客户的总数。
- 查询 2 返回包含日期、客户、过滤器和
d_x
. - 查询 3 返回包含日期、客户、过滤器
d_x
和d_y
.
专长:查询 2 和 3 的聚合彼此不同,也与查询 1 不同。但这很好,源系统就是这样工作的。
因为我不需要所有数据集的所有维度,所以我在维度中创建了虚拟行。因此,对于查询 2,在其中有一个虚拟行d_y
,对于查询 1,在 and 中有一个虚拟d_x
行d_y
。
但是随着查询变慢,我开始阅读有关最佳实践的书籍,以及应该按粒度拆分事实表的红色书籍。也许这个问题没有真正的最佳实践,因为源系统非常奇怪,但在这种情况下,一个选项必须比另一个更好。保留一个事实表或将其拆分为三个事实表。
我希望你能理解这个问题。