我正在维护一个数据仓库,其中包含多个关于必须合并的实体类的数据源。每个来源都有一个自然键,并且应该发生的是,始终为每个自然键创建一个且仅有一个代理键。如果来自具有特定自然键的源系统的一个记录表示与来自具有不同自然键的另一个源系统的另一个记录相同的实体,则相同的替代键将被分配给两者。换句话说,如果源系统A具有与源系统B的自然键DEF相同的实体的自然键ABC,那么我们将为两者分配相同的代理键。该表如下所示:保证唯一代理键分配 - 非二分图最大匹配
SURROGATE_KEY SOURCE_A_NATURAL_KEY SOURCE_B_NATURAL_KEY
1 ABC DEF
这是计划。但是,这个系统已经投入生产了一段时间,而且代理键分配一团糟。在源系统B知道它之前,源系统A将在一天内给出自然密钥ABC。 DW为其分配了代理键1。然后源系统B开始给出自然键DEF,这与源系统A的自然键ABC表示相同的东西。 DW错误地给了这个组合代理键2.表看起来像这样:
SURROGATE_KEY SOURCE_A_NATURAL_KEY SOURCE_B_NATURAL_KEY
1 ABC NULL
2 ABC DEF
所以仓库是一团糟。比这更复杂的情况。我有一个简短的清理时间表,需要找出一组干净的代理键来自然键映射。
一个小Googling表明,这可以在非二分图被模拟成一个匹配的问题:
MIT 18.433 Combinatorial Optimization - Lecture Notes on Non-Bipartite Matching
我需要一个容易理解的实现(不是最佳表演)爱德蒙的路径,树木和花朵算法。我没有正式的数学或CS背景,而我所拥有的是自学成才的,今晚我并没有进入数学领域。谁能帮忙?深受赞赏的是,一篇写得很好的解释指导我实施。
编辑:
数学方法是最优的,因为我们要最大限度地提高全球健康。一个贪婪的方法(首先采取A的所有实例,然后B,然后C ...)将您绘制到当地最大角落。
在任何情况下,我都会将这个推回到业务分析师手动执行(全部2000万)。我正在帮助他们评估全球比赛质量。这是理想的,因为他们是反正签署的,所以我的背面被覆盖。
不使用代理键不会改变匹配问题。仍然有1:1的自然键映射必须被发现和维护。代理键是一个方便的锚,仅此而已。