处理包含多个版本的数据记录时有两种策略。一种是将当前记录放在一个表中,将它们过去的版本放在历史表中。
另一种是将所有版本都放在同一个表中,并在当前版本上带有一个标志。
我已经看到了每种策略的争论,并且我看到社区在不同的帖子中都同意这两种策略。
如果没有正确答案,如何决定采取哪种策略?我可以看到将所有记录保留在同一个表中以简化查询(一个表中的所有记录)和一般较少表的优势。
另一方面,您拥有这些巨大的表,其中包含大量记录,具体取决于表之间有多少版本和复杂的关系。
用于修订的 Pro 历史表数据库设计?数据库历史更改,相同或不同的表?
如果我们在数据仓库场景中明确讨论缓慢变化的维度,并且您正在遵循 Kimball 方法,那么实际上有超过 2 种不同的方法可以做到这一点。
Kimball 方法有7 种不同的 SCD 记录方式(向下滚动到链接中的渐变维度技术)。类型 1、2 和 3 显然是最常见的,我真的不知道有人使用 5、6 或 7。
历史表是类型 4,是我目前使用的。它使我们能够尽可能地保持“活动”表的紧凑性。我们很少查询历史表,所以当我们需要审计一个维度的历史时,它们真的就在那里。此表与任何其他表之间没有关系,并且它有一个代理 ID 作为主键。
我曾在我们使用过 Type 2 的地方工作过,这是 Flag 方法,它会导致 key table 上不必要的大表增长。不过,这只是我的经验!