Я думал о разработке нового нового приложения с использованием DDD / TDD / NHibernate с новой схемой базы данных, отражающей домен, где изменения в БД необходимо было синхронизировать в обоих направлениях со старой базой данных проектов. Требование заключается в том, что оба проекта будут выполняться параллельно, и как только новый проект начнет приносить больше пользы для бизнеса, чем старый, старые проекты будут закрыты.
Один из подходов, который я имею в виду, заключается в достижении синхронизации БД с помощью триггеров БД. После того, как вы вставите / обновите / удалите новую базу данных, триггер для таблицы должен будет корректно обновить старую базу данных. То же самое для изменений в старой базе данных, ее триггеры должны будут обновить новую базу данных.
Пример:
Старый проект имеет одну таблицу Quote, с колонками QuoteId и QuoteVersion. Правильная модель домена - это один объект Quote со многими объектами QuoteVersion. Таким образом, новая база данных будет иметь две таблицы: Quote и QuoteVersion. Таким образом, если вы измените таблицу цитирования в новой БД, триггеру потребуется обновить все записи с этим QuoteId в старой БД или в последней версии. Затем, если вы обновите запись Quote в старой БД, вы либо обновите запись в новой БД, либо она может обновиться только в том случае, если была обновлена последняя версия Quote в старой БД.
Итак, в триггерах должна быть какая-то логика. Эти SQL-операторы могут быть нетривиальными. Чтобы обеспечить удобство обслуживания, необходимо провести тщательные тесты для триггеров (сохранить данные в один дБ, тестовые данные во второй дБ для разных случаев).
Вопрос: считаете ли вы, что эта идея триггера для синхронизации БД жизнеспособна (пока не знаете, как гарантировать, что один триггер не вызовет другой триггер базы данных)? Кто-нибудь пробовал это и узнал, что это идет в ад? У вас есть идея, как выполнить требование синхронизации баз данных