背景:我正在尝试为数据仓库设计星型模式。我们有以下商业模式,我们的客户可以购买并使用的产品很少。客户是公司,然后他们的组织中有人员可以映射到他们为产品带来的许可证。
我有以下尺寸。
Account_dim:该维度包含我们当前/未来与我们公司合作的所有公司列表。它可能有那些仍然没有与我们签订合同并且仍处于讨论阶段的公司。所以有些行可能没有合同。
User_dim:这是公司为其公司指定联系人的用户列表。因此,用户将属于 Account_dim 中的一个特定帐户。一个帐户可以有多个用户。
Product_Dim:此维度包含有关我们销售的所有产品的所有信息。许可证的成本以及许可证允许多少用户。因此,例如,如果他带来产品 A,最多两个用户可以使用它。
现在我有三个表,其中包含有关合同的数据。
合同:它包含有关我们拥有的合同的信息,其中包括合同开始日期和结束日期以及该合同分配到的帐户。
products_bought:此表包含根据合同带来的产品。一份合约可以持有多个购买的产品。每个产品行都有产品开始日期/结束日期和客户支付的资产价格。
分配的用户:每个购买的产品都可以有用户映射到它,这些用户被允许使用该帐户的 user_dim 中的用户。基本上将许可证附加给用户。
我正在尝试对合同、购买的产品和分配的用户进行建模,以便生成以下数据。
- 帐户在产品上花费的金额。
- 帐户对许可证的使用。例如,一个帐户有一个允许 3 个用户的产品,但只有一个用户映射到它,这将显示该产品未得到充分利用。
我尝试将所有三个表非规范化为一个事实表,但我遇到了问题,即如果合同结束日期延长,则可以更改。以及新资产可以映射到它。最后同样重要的是,公司可以删除一个用户,然后将另一个用户映射到产品或删除用户,因为他们离开了公司或添加了更多用户。
如何最好地建模。因为他们的合同和资产用户可以更改,所以它们应该是 SCD 而不是事实表,或者我应该如何实现一个事实来处理这些更改以及必须捕获这些更改以保持随时间推移的使用历史。