【发布时间】:2014-02-09 20:19:24
【问题描述】:
我一直致力于我的第一个数据仓库设计,遇到了一个我无法找到答案的问题。
我的事实表中的每一行都需要标识“父”记录的 RowID。就我而言,每个装运事件都会导致后续事件属于该行。如果产品被重新发货,则以下产品属于该新行,依此类推。
但是,由于各种原因,并非所有产品都有发货历史记录。因此将这些行设为空。
我的事实表中的每一行都有一个唯一的 id,所以我可以引用它,但是我应该在哪里存储这个关系呢?我是否在 ParentRowId 的事实表中添加一个可为空的列?我是否要创建一个无事实的事实表来定义关系?
我倾向于第一个选项,但不确定在这种情况下什么是“合适的”。如果这对 SQL Server 2012 有影响的话,看看每年大约 300 万行。
【问题讨论】:
-
每年有 300 万行,性能和存储似乎不是您关心的问题。
-
@usr 不管怎样,我还是想了解正确的方法
-
我不能很好地理解你的例子。你的事实表的粒度是什么?是出货吗?是出货历史吗?在任何情况下,事实表中的空键都不是“正确的”。
-
@mombo 谷物是单个单元(序列号)的事件。因此,一系列事实将是 Shipment > Return > Shipment > Claim > Claim > Return > Shipment > Claim... 8 个事实。尽管正如我所说,这是理想的,因为可能不存在 Shipment,因此为什么会存在 null
标签: sql sql-server-2012 data-warehouse