別の SQL サーバー データベースに完全に存在する 2 つのアプリケーションをマージするという課題があります。各データベースは、5,000,000 の範囲の連続した整数である独自の内部データベース ID を維持します。標準 API 経由でデータをインポートするツールを使用しています。
私が直面している主な課題は、データセットがマージされた後の親子関係の参照整合性に関係しています。例については、下の表を参照してください。各アプリケーションのデータ構造は同じですが、データは一意です。すべてのデータを 1 つのシステムに常駐させたいと考えています。
1 つの例は、複数のタスクを持つプロジェクト オブジェクトであり、各タスクには複数のリソースを割り当てることができます。括弧内は、各オブジェクト タイプの内部データベース シーケンス 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)
システム1
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)
上記のデータから、システム 0 からプロジェクト 1 をマージすると、既存のプロジェクト ID 5000001 が原因で、ターゲット システム 1 のプロジェクト 3 がどのように上書きされるかがわかります。
私の質問は、参照整合性を維持しながらデータをマージする方法ですか? 私が最初に考えたのは、オブジェクトごとに両方のシステムからの両方のデータ セットを結合し、インポートされるレコードを何らかの方法で更新し、新しい内部 ID を保存し、その新しい参照 ID を関連オブジェクトにカスケードするビューを作成することです。より簡単なアプローチはありますか?
これを自動化できるツールはありますか?