Когда две базы данных имеют настолько радикально разные схемы, вам следует обратить внимание на методы переноса или репликации данных, а не на синхронизацию.SQL Server предоставляет две технологии для этого, SSIS и Replication, или вы можете написать свой собственный скрипт для этого.
Репликация будет принимать новые или измененные данные из исходной базы данных и копировать их в целевую базу данных.Он предоставляет механизмы для планирования, упаковки и распространения изменений и может обрабатывать как в режиме реального времени, так и пакетные обновления.Для работы необходимо добавить достаточно информации в обе базы данных, чтобы отслеживать изменения и соответствующие строки.В вашем случае было бы трудно определить, какие «Продукты» были изменены, поскольку вам нужно было бы идентифицировать все соответствующие измененные строки в 4 или более разных таблицах.Это можно сделать, но это потребует определенных усилий.В любом случае вам придется создавать представления, соответствующие целевой схеме, поскольку репликация не позволяет преобразовывать исходные данные.
Служба SSIS извлечет данные из одного источника, преобразует их и передает их вцель.Он не имеет встроенных механизмов для отслеживания изменений, поэтому вам придется добавлять поля в таблицы для отслеживания изменений.Это строго пакетный процесс, который может выполняться по расписанию.Основное преимущество заключается в том, что вы можете выполнять самые разнообразные преобразования, в то время как репликация практически не позволяет (кроме рисования данных из представления).Вы можете создавать потоки данных, которые изменяют только соответствующее поле Продукта, когда изменяется запись Атрибута, связанного с продуктом, или просто воссоздавать всю запись Продукта и перезаписывать целевую запись.
Наконец, вы можете создавать свои собственные триггеры или хранимые процедуры, которыебудет работать при изменении данных и копировать их из одной базы данных в другую.
Я также должен отметить, что вы, вероятно, чрезмерно нормализовали свою базу данных.Во всех трех случаях у вас будет некоторое снижение производительности при объединении всех таблиц для восстановления сущности, что приведет к большему количеству блокировок, что необходимо и неэффективному использованию индексов.Вы жертвуете производительностью и масштабируемостью ради простоты изменений.
Возможно, вам стоит взглянуть на функцию Sparse Column в SQL Server 2008, чтобы найти способ поддержки гибких схем при сохранении производительности и масштабируемости.