マージする必要があるエンティティのクラスに関する複数のデータ ソースを持つデータ ウェアハウスを維持しています。各ソースには自然キーがあり、自然キーごとに常に 1 つだけの代理キーが作成されることが想定されています。特定の自然キーを持つ 1 つのソース システムからの 1 つのレコードが、別の自然キーを持つ別のソース システムからの別のレコードと同じエンティティを表す場合、同じ代理キーが両方に割り当てられます。
つまり、ソース システム A に、ソース システム B の自然キー DEF と同じエンティティを表す自然キー ABC がある場合、両方に同じ代理キーを割り当てます。テーブルは次のようになります。
SURROGATE_KEY SOURCE_A_NATURAL_KEY SOURCE_B_NATURAL_KEY
1 ABC DEF
それが計画でした。ただし、このシステムはしばらく本番環境にあり、代理キーの割り当てがめちゃくちゃです。ソース・システム A は、ある日、ソース・システム B がそれを知る前に、ナチュラル・キー ABC を与えます。DW はそれに代理キー 1 を割り当てました。次に、ソース システム B は、ソース システム A の自然キー ABC と同じものを表す自然キー DEF を与え始めました。DW は、このコンボ サロゲート キー 2 を誤って指定しました。テーブルは次のようになります。
SURROGATE_KEY SOURCE_A_NATURAL_KEY SOURCE_B_NATURAL_KEY
1 ABC NULL
2 ABC DEF
だから倉庫がぐちゃぐちゃ。これよりもはるかに複雑な状況があります。クリーンアップのための短いタイムラインがあり、サロゲート キーから自然キーへのマッピングのクリーンなセットを見つけ出す必要があります。
少しグーグルで調べてみると、これは非二部グラフのマッチング問題としてモデル化できることがわかります。
MIT 18.433 組み合わせ最適化 - 非二部マッチングに関する講義ノート
Edmond のパス、ツリー、および花のアルゴリズムの (最適なパフォーマンスではない) 理解しやすい実装が必要です。私は正式な数学やコンピュータ サイエンスのバックグラウンドを持っていません。私が持っているのは独学であり、今夜は数学のヘッドスペースにはいません。誰でも助けることができますか?実装に私を導くよく書かれた説明は、深く感謝されます.
編集:
グローバルな適合度を最大化したいので、数学的なアプローチが最適です。貪欲なアプローチ (最初に A のすべてのインスタンスを取得し、次に B、次に C...) を使用すると、局所的な最大値のコーナーに追い込まれます。
いずれにせよ、私はこれをビジネス アナリストに手動で行うようにプッシュしました (2,000 万人全員)。私は、グローバルな試合の質を評価する機能で彼らを支援しています。とにかくサインオフするのは彼らなので、これは理想的です。
代理キーを使用しなくても、一致の問題は変わりません。発見して維持する必要がある 1:1 の自然キー マッピングがまだあります。代理キーはそのための便利なアンカーであり、それ以上のものではありません。