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

在Sql Server中重构时同步多个表,sql,sql-server,view,triggers,refactoring-databases,Sql,Sql Server,View,Triggers,Refactoring Databases,我需要你的智慧。我正在对一个从经典asp到mvc的系统进行一次大的检修,在此过程中,我正在重构SQLServer2008R2中的一个主表(称之为MAIN)。这个表有100多列(我对此不负责),为了性能、灵活性和可维护性,我将把结构移动到7个表中。但是,新旧代码在许多新旧页面中引用了主表。我想平稳地、逐步地过渡到新的表格,它是业务的一个活跃的核心站点。请帮帮我 一旦我传输了现有数据 我想到了: 1.)在主表和七个新表上使用标准的insert、update和delete触发器。我必须包括一个捕获(h

我需要你的智慧。我正在对一个从经典asp到mvc的系统进行一次大的检修,在此过程中,我正在重构SQLServer2008R2中的一个主表(称之为MAIN)。这个表有100多列(我对此不负责),为了性能、灵活性和可维护性,我将把结构移动到7个表中。但是,新旧代码在许多新旧页面中引用了主表。我想平稳地、逐步地过渡到新的表格,它是业务的一个活跃的核心站点。请帮帮我

一旦我传输了现有数据

我想到了:

1.)在主表和七个新表上使用标准的insert、update和delete触发器。我必须包括一个捕获(http://stackoverflow.com/questions/2237499/sql-server-trigger-loop)对于无限触发循环

2.)创建模拟主表的视图,引用新表。我将在视图上使用INSTEADOF触发器通过视图插入和更新表。这将允许我立即放下主表

以下哪一项更有意义?两个都是极其愚蠢的吗?二者都我肯定不是dba,但我需要在第一次就做到这一点


谢谢。

听起来你的应用程序正在直接访问数据库表,这不是一个好主意,因为你现在发现了

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


我认为这比尝试编写一个复杂的视图更容易,而且肯定比使用触发器更容易让您看到

这绝对是一个更好的情况。在所有的代码重构(从传统的asp到mvc)之后,切换表设计可能是一种可行的方法。我认为在新代码中对新表进行编码并保持旧代码基本不变(只需将主表替换为主视图)是有价值的。