在 Sql Server 中重构时同步多个表

Posted

技术标签:

【中文标题】在 Sql Server 中重构时同步多个表【英文标题】:Sync Several Tables while Refactoring in Sql Server 【发布时间】:2012-07-04 22:11:09 【问题描述】:

我需要你的智慧。我正在对从经典 asp 到 mvc 的系统进行大修,并且在此过程中,我正在重构 sql server 2008 r2 中的一个主表(称为 MAIN)。该表有一百多列(我对此不负责),我将结构移动到 7 个表以提高性能、灵活性和可维护性。但是,新旧代码在许多新旧页面中都引用了 MAIN 表。我想平稳而渐进地过渡到新表,它是业务的一个活跃的核心站点。请帮帮我。

一旦我转移了现有数据,

我想到了:

1.) 在 MAIN 表和七个 NEW 表上使用标准插入、更新和删除触发器。对于无限触发循环,我必须包含一个 catch (http://***.com/questions/2237499/sql-server-trigger-loop)。

2.) 创建一个模拟 MAIN 表的视图,引用 NEW 表。我会在视图上使用 INSTEAD OF 触发器来通过视图插入和更新表。这将允许我立即删除 MAIN 表。

以下哪个更有意义?要么是极其愚蠢的吗?两个都?我绝对不是 dba,但我需要在第一时间做到这一点。

谢谢。

【问题讨论】:

【参考方案1】:

听起来您的应用正在直接访问数据库表,您现在发现这不是一个好主意。

您是否考虑编写存储过程来处理 CRUD 操作,这将抽象出数据库设计?然后您可以从您的应用程序中调用存储的过程并将所有数据作为参数传递。存储过程将完成更新所有新表的所有工作(当然您应该使用事务),您可以立即停止使用旧表。

我认为这比尝试编写复杂的视图更容易,并且肯定比使用触发器更能看到。

【讨论】:

那肯定是一个更好的场景。在所有代码重构(经典 asp 到 mvc )之后切换表设计可能是要走的路。我认为在新代码中对 NEW 表进行编码并在很大程度上保持旧代码不变(只需将 MAIN 表交换为 MAIN 视图)是有价值的。

以上是关于在 Sql Server 中重构时同步多个表的主要内容,如果未能解决你的问题,请参考以下文章

sql server 同步法制问题排查

Oracle与SQL Server如何实现表数据同步

使用Red Gate Sql Compare 数据库同步工具进行SQL Server的两个数据库的结构比较同步

SQL Server 使用 Merge 关键字进行表数据同步

SQL Server - 使用 Merge 语句实现表数据之间的对比同步

转载SQL Server - 使用 Merge 语句实现表数据之间的对比同步