我正在设计一个新的周期性快照事实表。我正在调查健康保险索赔以及人们欠保险公司的金额以及他们已经支付的金额。表中的数据将如下所示。
CLAIM_ID TIME_KEY AMOUNT_OWED PAID
123 31.1.2000 1000 0
123 28.2.2000 900 100
123 31.3.2000 800 200
123 30.4.2000 0 1000
123 31.5.2000 0 1000
123 30.6.2000 0 1000
123 31.7.2000 0 1000
123 31.8.2000 0 1000
...
正如您所见,在 2000 年 4 月 30 日之后,为 Claim_id 123 插入新数据是没有意义的,因为它不再更改(可以合理确定这种情况不会发生)。停止为此声明插入数据是个好主意还是应该这样做直到时间结束:)?
我主要关心的是在设计数据仓库表时坚持最佳实践。
感谢您的回答!
如果有的话,通常您会选择定期快照
a) 大量交易以及
b) 您需要在某个时间点有效访问数据(在您的情况下是月底)
如果您每月有 50 笔索赔交易,并且索赔平均活跃一年,即使您将持有不活跃索赔 50 年(您可能不会这样做;),您也将从这种设计中获利。
您的疑虑表明您在每个索赔生命周期内没有那么多交易。在这种情况下,您应该考虑使用一个事实表来存储每笔交易。
对于非活动声明,您绝对不会有任何开销,但要在特定时间获取快照信息,您必须读取整个表。相反,定期快照通常是按快照时间进行分区的,因此访问非常有效。 没有
免费午餐,但节省空间和有效访问。
但在一般情况下,你是对的,在快照表中重复数据是没有意义的。当快照表包含长时间重复事实时,您应该使用
时间跨度事实表来代替:
CLAIM_ID VALID_FROM VALID_TO AMOUNT_OWED PAID
123 31.1.2000 27.2.2000 1000 0
123 28.2.2000 30.3.2000 900 100
123 31.3.2000 29.4.2000 800 200
123 30.4.2000 31.12.9999 0 1000
...