比方说,我们有一个代表销售办事处的维度。办事处可能会移动,这将是第二类改变。我们希望跟踪在旧办公地点发生的操作,以及现在发生在新的办公室的操作,并知道发生了什么变化。到目前为止,只是标准的II型设计。现在让我们说一个办公室与另一个办公室合并。也就是说,两个原本不同的办事处(“主管办公室”)的业务活动现在正在一个单一的办公室(“合并办公室”)进行,这可能是任一办公室(实际或工作人员)的延续原来的办公室,或者它可能是一个新的办公室,从商业的角度来看,这是前两个办公室的延续。类型II SCD与实体合并随着时间的推移
报告/分析要求如下:
- 我们希望能够看到所有的当前活动为新的合并办公。
- 我们希望能够看到合并办公室或总部办公室所做的所有活动。
- 我们希望能够看到合并前后在其中一家总部办公室发生的一段时间的活动,而没有看到其他总部办公室的活动(至少在合并之前)。
我不知道如何使用任何SCD类型对此进行建模。如果我们只用一个新办公室条目替换两个父办公室条目,并相应地更新所有事实表,我们就有一个类型I变更。这让我们看到目前的活动很好,但我们失去了历史。如果我们保持记录分开,我们将不知道合并。如果我们添加第三条记录来代表合并后的办公室,我们也会失去历史记录(它具有哪个自然钥匙?两个母公司的自然钥匙都不适合)。
我需要使用桥/多对多表吗?这引入了我想避免的复杂性。但是,如果这是做到这一点的最佳方式,那就这样做吧。然而,我仍然不确定这将如何构建。也许事实表将指向一个办公室入口,并且办公室将以多对多的方式分组。报告将根据小组进行,而不是直接在办公室进行。
答案ElectricLlama的问题
- 大多数用户的交互是通过罐装报告,所以任何来自底层结构的复杂性将它们隐藏。
- 有些用户确实使用SQL或SAS来获取数据。目前,他们不太可能关心这个具体问题,但是随着我们为这些工具带来更多用户,这可能会发生变化。
- 在这个时刻我们没有查询作家。
- 我不认为会有多层次的兼并,但我不能确定地说不。如果有的话,我会很惊讶。
- 我不知道如何使这种事情容易为最终用户,这可能是足以放松一些要求的论据。
Q1:我们期望看到多少级别的合并?我们是否期望看到多个级别的多个办公室将来并入其他办公室?或者我们只希望将其最复杂的多个办事处合并成一个办公室? Q2:“合并发生前后在母公司的活动”。这意味着您需要以某种方式跟踪合并后的合并后的办公室活动。那是对的吗? –
@ElectricLlama:合并后的办公室可能会在未来的某个时间点合并,尽管我们目前没有这方面的例子。办事处也可能分裂,尽管这比基本或复合合并的可能性要小得多。至于你最后的问题,答案是肯定的,我想跟踪合并前的活动。 – siride
我认为第三个选项是唯一的选择 - 创建一个新成员 - 因为这是唯一一个维护所有信息的选项。那么唯一的挑战就是将新成员与以前的办公室联系起来。这取决于最终用户如何获取此信息。是否有人为此构建自定义SQL查询,或者您是否拥有自助服务,或者您是否拥有带有“在此报告中包含相关办公室”勾选框的预设报告?我并没有意识到一个特定的成功模式,但我个人喜欢避免过度设计。 –