【发布时间】:2012-01-11 12:14:04
【问题描述】:
我正在考虑使用 DDD/TDD/NHibernate 开发一个新的新应用程序,该应用程序具有一个反映域的新数据库架构,其中数据库中的更改需要与旧项目数据库双向同步。要求是两个项目并行运行,一旦新项目开始比旧项目增加更多业务价值,旧项目将被关闭。
我想到的一种方法是通过数据库触发器实现数据库同步。在新数据库中插入/更新/删除后,表的触发器将需要正确更新旧数据库。旧数据库中的更改也是如此,其触发器需要更新新数据库。
示例: 旧项目有一个表 Quote,其中包含 QuoteId 和 QuoteVersion 列。正确的域模型是一个 Quote 对象,具有许多 QuoteVersion 对象。因此,新数据库将有两个表,Quote 和 QuoteVersion。因此,如果您更改新数据库中的 Quote 表,触发器将需要更新旧数据库中具有该 QuoteId 的所有记录或最新版本。接下来,如果您更新旧数据库中的报价记录,您可以再次更新新数据库中的记录,或者它可能仅在更新旧数据库中最新版本的报价时更新它。
因此,触发器中需要有一些逻辑。那些 sql 语句可能有点不重要。为了确保可维护性,需要对触发器进行彻底的测试(数据保存在一个数据库中,测试数据在第二个数据库中,针对不同的情况)。
问题:您认为这种用于数据库同步的触发器想法是否可行(尚不确定如何确保一个触发器不会触发另一个数据库触发器)?有人试过,发现它会下地狱吗?您对如何满足同步数据库的要求有更好的了解吗?
【问题讨论】:
-
那天我们通过 sql server 2008 'change tracking' (msdn.microsoft.com/en-us/library/cc280462%28v=sql.105%29.aspx) 实现了一些同步原型,并决定不继续这种同步想法,因为它太昂贵了。