Мы создали инструмент дедупликации (как и вы), который сначала ищет места, где есть конфликты данных (например, два разных телефонных номера), и позволяет человеку, выполняющему дедупликацию, выбрать правильные данные. Затем инструмент меняет идентификатор на тот, который вы храните, начиная с самой нижней дочерней таблицы и просматривая все связанные таблицы. Как только все ссылки на удаляемую запись удаляются, она удаляет родительскую запись. Отключение обычно представляет собой сложный процесс, и этот инструмент должен быть тщательно спроектирован для обработки того, что должно быть обработано, и для внесения изменений в инструмент по мере добавления новых таблиц внешнего ключа. Вы можете настроить его так, чтобы alawys выбирал информацию в записи, которую вы храните, когда у вас возникают конфликты данных, но обычно это плохая идея, если вы не вмешиваетесь вручную. Это потому, что вам часто нужен вклад кого-то, кто знает клиентов. В противном случае вы можете заменить хороший адрес на плохой. Вот общий сценарий того, как дуп попал туда в первую очередь. Клиент А был клиентом некоторое время и имеет несколько заказов. Он идет, чтобы заказать agin, и заказчик запрашивает его номер телефона или другую информацию, позволяющую найти его. Клиент А недавно переехал и получил новый номер телефона и адрес, поэтому он не найден и создана новая запись. Позже выясняется, что это дублирование, но автоматический процесс дедупликации выбирает более старую запись, потому что у нее больше заказов и, таким образом, заменяет запись на текущий новый адрес и телефон. Клиент звонит, чтобы заказать снова, и создается еще одно дублирование, потому что заказчик снова не может его найти. Вот почему я чувствую, что дедупликация должна быть частично ручным процессом.