Я поддерживаю хранилище данных с несколькими источниками данных о классе сущностей, которые должны быть объединены. Каждый источник имеет естественный ключ, и что должно произойти, так это то, что один и только один суррогатный ключ создается для каждого естественного ключа на все времена. Если одна запись из одной исходной системы с конкретным естественным ключом представляет ту же сущность, что и другая запись из другой исходной системы с другим естественным ключом, один и тот же суррогатный ключ будет присвоен обоим.
Другими словами, если исходная система A имеет естественный ключ ABC, представляющий ту же сущность, что и естественный ключ DEF исходной системы B, мы назначим один и тот же суррогатный ключ для обоих. Таблица будет выглядеть так:
SURROGATE_KEY SOURCE_A_NATURAL_KEY SOURCE_B_NATURAL_KEY
1 ABC DEF
Это был план. Тем не менее, эта система была в производстве в течение некоторого времени, и назначение суррогатного ключа беспорядок. Исходная система A выдаст естественный ключ ABC за один день до того, как исходная система B узнает об этом. DW присвоил ему суррогатный ключ 1. Затем исходная система B начала давать естественный ключ DEF, который представляет собой то же самое, что и естественный ключ исходной системы A ABC. DW неправильно дал этот комбинированный суррогатный ключ 2. Таблица будет выглядеть так:
SURROGATE_KEY SOURCE_A_NATURAL_KEY SOURCE_B_NATURAL_KEY
1 ABC NULL
2 ABC DEF
Так что склад - это беспорядок. Там гораздо более сложные ситуации, чем эта. У меня короткая временная шкала для очистки, которая требует определения чистого набора суррогатных ключей для сопоставлений естественных ключей.
Небольшой поиск в Google показывает, что это можно смоделировать как проблему соответствия в двудольном графе:
Википедия - Соответствует
MIT 18.433 Комбинаторная оптимизация - Примечания к лекциям по недвудольному сопоставлению
Мне нужна простая для понимания реализация (не оптимально выполняемая) алгоритма путей, деревьев и цветов Эдмонда. У меня нет формальных знаний по математике или CS, и у меня есть самоучка, и сегодня вечером я не нахожусь в свободном пространстве по математике. Кто-нибудь может помочь? Хорошо написанное объяснение, которое ведет меня к реализации, будет высоко оценено.
EDIT:
Математический подход оптимален, потому что мы хотим максимизировать глобальную пригодность. Жадный подход (сначала возьмите все экземпляры A, затем B, затем C ...) рисует вас в локальный угол максимума.
В любом случае, я заставил бизнес-аналитиков сделать это вручную (все 20 миллионов из них). Я помогаю им с функциями для оценки качества глобального соответствия. Это идеально, так как они все равно подписывают, так что моя задняя сторона покрыта.
Не использование суррогатных ключей не меняет проблему соответствия. Все еще существует естественное отображение ключей 1: 1, которое необходимо обнаружить и поддерживать. Суррогатный ключ является удобным якорем для этого, и ничего более.