如何更新多个SQL Server数据库模式

时间:2011-02-07 01:13:43

标签: .net sql-server database asp.net-mvc-3 database-schema

这是我的困境,

我正在使用ASP.net MVC3和SQL Server开发一些SaaS。

将有多家公司使用该软件,每家公司将拥有多个用户。为了确保从一个公司到另一个公司不会意外地看到数据,我已经将数据库设置为每个公司的单独数据库,然后Web服务器处理其他所有内容:UI,逻辑等。

我已经可以预见到一个问题,我需要在它成为一个真正的问题之前决定如何最好地处理它。拥有这些多个数据库,如果今年一切顺利敲木头我们可能在今年年底前获得500个客户。出于显而易见的原因,手动同步模式是不可能的。 VS2010有一个很好的SQL比较脚本工具,但是我应该如何确保所有数据库都是最新版本?

问题2

系统的设计方式非常模块化,因此客户端可以根据自己的特殊需求添加小部件和小东西,这将为特定数据库添加新表。所以从理论上讲,每个数据库都会有所不同。我认为处理这个问题的最佳方法是查看所有更改脚本以便

Core.sql 
Widget-Map.sql 
Widget-HR.sql  
etc.. 
我是否正确思考这个问题,或者是否有更实际的方法可以解决这种情况?

我已经研究过Red-Gate SQL比较,但我喜欢它,但它在多数据库情况下仍然无济于事。

所以我应该创建自己的工具来更新模式吗?

若有,建议,提示,链接。要使这项任务不那么令人生畏,我将非常感激。

非常感谢您提供任何帮助,

我已经读过的几个来源, Migrations for Java

http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

2 个答案:

答案 0 :(得分:1)

在进行结构升级的ORM之外,方法分解为:

  1. 与某些被认为正确的数据库进行比较。我个人认为这有风险,因为我宁愿将升级与代码部署联系起来,并且在代码中以某种方式包含了db规范。这是我的个人偏好。

  2. 升级脚本。曾经是最受欢迎的,似乎是在与ORM的关注更多。基本上对于任何特定版本,您都有一个从头开始构建的“安装”脚本,以及第二组处理所有增量“From_x.y.z_to_a.b.c”的脚本。亲:简单易懂。 Con:加倍代码,当17的第7个脚本失败时非常重要的PITA。

  3. 基于字典或架构的升级。可能是我自己以外最不受欢迎的,我知道没有人这么做:(好吧,也许这是夸大其词.PHP Doctrine有这样的东西。想法是一些工具将模式与现有数据库进行比较并使模式最新。 Pro:单个模式文件(或文件),代码不加倍,保证升级的最佳方式将在最短的时间内生成您期望的数据库.Con :(几乎)没人做,缺乏工具。

    < / LI>

    我有一个工具可以做到这一点,并且应该在MS SQL上工作,但我现在只在Postgres上测试,所以我不会发布一个链接,因为我不想浪费你的时间。< / p>

答案 1 :(得分:0)

理论上,您可以为源代码管理中的每个不同架构版本创建一个单独的分支,当您需要更新它们时,请使用源代码管理中的SQL Compare Pro命令行方向执行此操作。这将要求您使用SQL Source Control将模式保存为SQL Compare Pro可识别的源可控格式。

如果您需要任何帮助尝试此操作或进行此设置,请联系support@red-gate.com。