我有一个挑战,它涉及合并两个完全位于不同 SQL 服务器数据库中的应用程序。每个数据库都维护自己的内部数据库 ID,它们是 5,000,000 范围内的有序整数。我正在使用通过标准 API 导入数据的工具。
一旦数据集合并,我面临的关键挑战与父子关系的参照完整性有关。请参阅下表中的示例。每个应用程序都有相同的数据结构,但它们的数据是唯一的。我们希望所有数据都驻留在一个系统中。
一个例子是项目对象,它有多个任务,每个任务可以分配多个资源。括号中是每个对象类型的内部数据库序列 ID(主键)。每个项目都是唯一的,每个项目的每个任务都是唯一的,但是可以跨项目和任务分配相同的资源。
系统 0
Project 1 (PROJECT ID 5000001)
Task A ( TASK ID 5000001)
Resource X (RESOURCE ID 5000001)
Resource Y (RESOURCE ID 5000002)
Task B ( TASK ID 5000002)
Resource Y (RESOURCE ID 5000002)
Resource Z (RESOURCE ID 5000003)
Project 2 (PROJECT ID 5000002)
Task A (TASK ID 5000003)
Resource Z (RESOURCE ID 5000003)
Task B (TASK ID 5000003)
Resource X (RESOURCE ID 5000001)
系统一
Project 3 (PROJECT ID 5000001)
Task C ( TASK ID 5000001)
Resource F (RESOURCE ID 5000001)
Resource G (RESOURCE ID 5000002)
Task D ( TASK ID 5000002)
Resource G (RESOURCE ID 5000002)
Resource H (RESOURCE ID 5000003)
Project 4 (PROJECT ID 5000002)
Task A (TASK ID 5000003)
Resource H (RESOURCE ID 5000003)
Task B (TASK ID 5000004)
Resource F (RESOURCE ID 5000001)
从上面的数据中,您可以看到由于预先存在的 PROJECT ID 5000001,从系统 0 合并项目 1 将如何覆盖目标系统 1 中的项目 3。
我的问题是如何在保持参照完整性的同时合并数据?我的第一个想法是创建一个视图,该视图将来自两个系统的每个对象的两个数据集结合起来,并以某种方式更新将要导入的记录,并存储新的内部 ID 并将新的引用 ID 级联到相关对象。有没有更简单的方法?
有没有可以自动化的工具?