一尘不染

合并数据库如何处理重复的PK

sql

我们有三个按地区物理隔离的数据库,其中一个位于洛杉矶,旧金山和纽约。所有数据库共享相同的架构,但包含特定于其区域的数据。我们正在寻求将这些数据库合并为一个数据库并进行镜像。我们需要保留每个区域的数据,但是将它们合并到一个数据库中。这给我们带来了很多问题,例如,我们肯定会有重复的主键,而外键可能是无效的。

我希望找到一个对这样的任务有经验的人,他可以提供一些技巧,策略和经验,以帮助我们完成合并。

例如,一种想法是创建组合键,然后更改我们的代码和存储库,以通过组合键(区域/原始pk)查找数据。但这需要我们更改所有代码和存储过程。

另一个想法是只导入数据,并让它生成新的PK,然后将所有FK引用更新为新的PK。这样,我们可能不必更改任何代码。

欢迎任何经验!


阅读 124

收藏
2021-05-23

共1个答案

一尘不染

我对此没有任何亲身经验,但是在我看来,您应该应该能够为每个服务器唯一地映射PK-> New PK。例如,生成新的PK,以使来自LA服务器的数据具有PK%3
== 2,SF具有PK%3 == 1,而NY具有PK%3 == 0。如果服务器仅将FK关系存储到其自己的数据,则可以以相同的方式更新FK。

NewLA = OldLA*3-1
NewSF = OldLA*3-2
NewNY = OldLA*3

然后,您可以合并它们,并且没有重复的PK。就像您已经说过的那样,这实际上只是在生成新的PK,但是以这种方式进行构造可以使您轻松地更新FK(就像我所做的那样,假设每台服务器上的数据都是隔离的)。祝你好运。

2021-05-23