数据仓库设计中如何处理等量增长的fact/dimension表?

How to deal with equally growing fact/dimension tables in datawarehouse design?

我有一个源数据集:
1. 客户
2.customer_product_purchase
3.customer_support_plan_purchase
4. customer_support_request

他们都具有针对计划和产品购买提出支持请求的关系。并且客户购买了产品的支持计划(客户也购买了)。

为了为此设计一个数据仓库模式,我想创建一个单一的事实table,我想到了以下方法:

一个。合并事实 table 与 customer_product_purchasecustomer_support_plan_purchasecustomer_support_request 合并为一个,因为它们有一些共同的属性(以及一些不常见的属性,可以为其他人留空)。我相信它们具有相同的粒度(购买 product/support 计划,提出针对支持计划的请求)。这将意味着丢失一些特定信息以使其通用,例如相同名称下的产品保修和支持计划有效性 有效性

乙。从 customer_product_purchasecustomer_support_plan_purchase 创建一个事实 table,它们本质上是购买的,可以放在一起具有一些常见和一些不常见的属性。 customer_support_request可以单独处理。

C。在 customer_support_request 周围创建一个事实 table,因为它与其他 table 相关联,后者可以是维度。然而,这将意味着尺寸也将以与事实相同的速度增长(我读过,是糟糕设计的指标)。

那么如何处理支持计划、服务请求和产品购买可以单独增长的情况,是不是最好将它们全部分开?但是因为它们(全部或两个)具有相似的粒度,是否应该将它们合并?

我评论的一些要点

  • 星型模式中的事实表应该为业务流程建模。

  • 我建议不要太努力地结合事实,除非这样做有明确的意义。不同细节级别的事实是不合并的有力指标

这里是关于事实细节层次的一些观察;

  • 一次购买可以有 0 个或多个支持计划。这是不同级别的详细信息,可能是不同的事实

  • 您可以针对单个支持计划提出零个或多个支持请求。这是不同级别的详细信息,可能是不同的事实

  • 如果您将支持计划和销售放在同一个事实中,并且您有针对同一客户的两种产品销售,一种支持计划为零,一种支持计划为 3,则最终有 5 (2+ 3) 记录你的事实,很难将支持计划与销售联系起来,因为它们在不同的行中。例如,如果您想要支持计划与购买金额的价值比率,对于给定的产品组,虽然并非不可能,但 "smell" 将所有这些分散在同一个事实中是不正确的

  • 如果您确定的回头客很少,那么是的,您的客户暗淡会以与事实相同的速度增长,但这是不可避免且正常的

请记住,从来没有任何 "best" 解决方案,所以不要陷入分析瘫痪状态。值得在 Power BI 之类的工具中快速建模并向其提出一些业务问题。请记住,您的星型模式是为了让业务问题更容易回答。