Sql 使用父行ID设计事实表
我一直在做我的第一个数据仓库设计,遇到了一个我无法找到答案的问题 事实表中的每一行都需要标识“父”记录的RowID。在我的例子中,每个装运事件都会导致后续事件属于该行。如果产品被重新装运,那么以下产品属于该新行,以此类推 然而,由于各种原因,并非所有产品都有发货历史记录。因此,将这些行设为空 事实表中的每一行都有一个唯一的id,因此我可以引用它,但我应该将此关系存储在哪里?我是否为ParentRowId在事实表中添加了一个可为null的列?我是否创建一个无事实的事实表来定义关系Sql 使用父行ID设计事实表,sql,sql-server-2012,data-warehouse,Sql,Sql Server 2012,Data Warehouse,我一直在做我的第一个数据仓库设计,遇到了一个我无法找到答案的问题 事实表中的每一行都需要标识“父”记录的RowID。在我的例子中,每个装运事件都会导致后续事件属于该行。如果产品被重新装运,那么以下产品属于该新行,以此类推 然而,由于各种原因,并非所有产品都有发货历史记录。因此,将这些行设为空 事实表中的每一行都有一个唯一的id,因此我可以引用它,但我应该将此关系存储在哪里?我是否为ParentRowId在事实表中添加了一个可为null的列?我是否创建一个无事实的事实表来定义关系 我倾向于第一种选
我倾向于第一种选择,但不确定在这种情况下什么是“合适的”。如果这对SQL Server 2012有影响的话,每年大约有300万行。我总是构建一个单独的表来做“桥接表”、“覆盖率表”和类似的事情。无论如何,您都必须进行联接(自联接)才能找到父级,因此,将该联接连接到负责保持这种关系的表中并没有什么害处。每年有300万行,性能和存储似乎与您无关。@usr尽管如此,我仍然想理解正确的方法我不能很好地理解你的例子。哪一个是事实表的颗粒?这是一批货吗?这是装运历史记录吗?在任何情况下,事实表中的null键都不是“正确的”。@mombo粒度是单个单元(序列号)的事件。因此,一系列事实将是装运>退货>装运>索赔>索赔>退货>装运>索赔。。。8事实。虽然正如我所说,这是理想的,因为可能不存在装运,因此为什么会存在空值