维度表上的结束日期 - 我们应该使用 NULL 还是99991231日期值



我正在SQL Server上构建数据仓库,我想知道处理维度表中的当前记录(SCD类型2(中与"end_date"属性的最佳方法是什么。 对于当前记录,我们可以选择使用日期文本,例如"12/31/9999"或将其指定为 NULL。除了"start_date"和"end_date"之外,维度表还有一个额外的"current_flag"属性。

这可能是一个小的设计决策,但只是想看看在查询性能或任何其他方面使用一个是否有任何优势?

我见过两种方式编写的系统。 就个人而言,我选择无限的结束日期(但不是NULL,原因很简单:更容易验证 Type-2 记录是否正确平铺,没有间隙或重叠。 我只喜欢一个验证而不是两个 - 另一个是is_current标志的验证。 访问数据也只有一种正确的方法。

也就是说,我目前正在开发的系统也会发布一个仅包含当前记录的视图。 这很方便。

该系统不在 SQL Server 中。 您可以尝试的一种优化是聚类分析,以便当前记录全部共置 - 假设它们更常被访问。 您可以使用任一方法执行此操作。 使用这样的聚集索引会使更新更加昂贵,但它们可以方便地优化内存。

最新更新