我想为配置单元表创建一个代理键,但每次将数据放入表中时都可以复制它。其他表将通过代理键引用该表,并且可以重新生成该表以添加更多行,并且这种关联不会被破坏。我的想法是基本上有一个表中所有列的复合键。
将我的所有列连接起来,并将该字符串的md5哈希用作该行的简单查找,这合理吗?
我看到的这个解决方案的问题是:
- 如果行中的数据发生更改,则关联仍将被破坏
- 并不能真正保证哈希值是唯一的(尽管根据我的数字,碰撞的可能性很小)
数据注释:
- 数据是按天划分的每天
- 在某些情况下,两行具有完全相同的数据,并且如果他们最终使用同一把钥匙也没关系
您已经回答了自己的问题:
并不能真正保证散列值是唯一的(尽管根据我的数字,碰撞的可能性很小)
钥匙必须是独一无二的,这就是它们的目的。如果你给我一个记录密钥(无论是代理密钥还是自然密钥),我就能找到那个记录。哈希不会是唯一的。
你需要回去问问自己为什么要这个代孕钥匙。如果它只是一个唯一的标识符,那么使用你的数据库的唯一标识符|序列类型并完成它。
如果有业务需求(需要复制SK<-为什么?),那么回到那个原因,并尝试为其想出一个更直接|简单的解决方案。
(我们尝试了用于类型2更改检测的哈希-它不起作用,我们返回到逐列比较)
这与我有关:
有些情况下,两行具有完全相同的数据,如果它们最终具有相同的密钥,那也没关系
如果您的数据库中有两条完全相同的记录,那么您就缺少数据:甚至是序列或时间戳,这可以用来区分您的记录。如果你没有一把天然的钥匙,你可能会错过一些东西。