维度上的 EndDate Table - 我们应该使用 NULL 还是 99991231 日期值

EndDate on Dimension Table - Should we go with NULL or 99991231 Date Value

我正在 SQL 服务器上构建数据仓库,我想知道处理维度 table(SCD 类型 2)中关于 'end_date'属性。 对于当前记录,我们可以选择使用日期文字(例如“12/31/9999”)或将其指定为 NULL。除了 'start_date' 和 'end_date' 之外,维度 table 还具有额外的 'current_flag' 属性。

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

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

就是说,我目前正在使用的系统也发布了一个仅包含当前记录的视图。好用。

该系统不在 SQL 服务器中。您可以尝试的一种优化是集群,因此当前记录都位于同一位置——假设它们被更频繁地访问。您可以使用任一方法执行此操作。使用像这样的聚簇索引会使更新成本更高,但它们可以方便地优化内存。