.net 如何更新多个SQL Server数据库架构

.net 如何更新多个SQL Server数据库架构,.net,sql-server,database,asp.net-mvc-3,database-schema,.net,Sql Server,Database,Asp.net Mvc 3,Database Schema,这是我的困境 我正在使用ASP.net MVC3和SQL Server开发一些SaaS 将有多个公司使用该软件,每个公司将有多个用户。为了确保数据不会意外地从一个公司到另一个公司可见,我将数据库设置为每个公司的单独数据库,然后web服务器处理其他一切:UI、逻辑等 我已经可以预见到一个问题,我需要在它成为真正的问题之前决定如何最好地处理它。有了这些多个数据库,如果今年一切顺利的话,到年底我们可能会有500个客户。显然,不可能手动同步模式。VS2010有一个很好的SQL比较脚本工具,这将很有帮助,

这是我的困境

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

将有多个公司使用该软件,每个公司将有多个用户。为了确保数据不会意外地从一个公司到另一个公司可见,我将数据库设置为每个公司的单独数据库,然后web服务器处理其他一切:UI、逻辑等

我已经可以预见到一个问题,我需要在它成为真正的问题之前决定如何最好地处理它。有了这些多个数据库,如果今年一切顺利的话,到年底我们可能会有500个客户。显然,不可能手动同步模式。VS2010有一个很好的SQL比较脚本工具,这将很有帮助,但是我应该如何确保所有数据库都是最新版本的呢

问题2

系统的设计方式是非常模块化的,因此客户端将能够根据其特定需求添加小部件和东西,从而将新表添加到特定的数据库中。所以在理论上,每个数据库都会有一点不同。我认为处理这个问题的最好方法是放弃所有的更改脚本,这样您就可以

Core.sql 
Widget-Map.sql 
Widget-HR.sql  
etc.. 
我的这种想法是正确的,还是有更实际的方法来应对这种情况

我已经研究了RedGateSqlCompare,我很喜欢它,但是它在多数据库的情况下仍然没有帮助

因此,在这种情况下,我应该创建自己的工具来更新模式吗

如果有任何建议,提示,链接。如果能让这项任务不那么艰巨,我们将不胜感激

非常感谢您提供的一切帮助

我已经读过一些资料,


除了进行结构升级的ORM之外,这些方法可以分解为:

  • 与一些被认为正确的DB进行比较。就我个人而言,我认为这有风险,因为我更愿意将升级与代码部署绑定在一起,并在代码中包含了DB规范。这是我个人的喜好

  • 升级脚本。曾经是最受欢迎的,似乎随着ORM的流行而逐渐消失。基本上,对于任何特定的发行版,您都有一个从头开始构建的“安装”脚本,以及第二组处理所有增量的“从_x.y.z_到_a.b.c”之类的脚本。赞成:简单易懂。缺点:代码加倍,当17的第7个脚本失败时,非常重要的PITA

  • 基于字典或模式的升级。除了我自己,这可能是最不受欢迎的,我知道没有人这样做:(好吧,也许这有点夸张。PHP原则是这样的。想法是一些工具将模式与现有数据库进行比较,并使模式成为当前模式。Pro:单个模式文件(或多个文件),无需加倍代码,这是保证升级将在最短时间内生成您期望的数据库的最佳方法。缺点:(几乎)没有人这样做,缺少工具


  • 我有一个工具可以做到这一点,应该可以在MS SQL上使用,但我现在只在Postgres上测试,所以我不会发布链接,因为我不想浪费您的时间。

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


    请联系support@red-如果您需要任何帮助,请访问gate.com尝试或设置此功能。

    Visula Studio GDR数据库项目与(3)类似但其优越之处在于模式受源代码控制。GDR项目可以很灵活,但工作良好。@Mitch我想我应该指出,您的字典/模式将受源代码控制:)根据Mitch的建议,我正在研究数据库项目,因此,我将在我的progressGert Drapers博客上阅读并更新大量GDR R2信息:@MitchWheat谢谢你的链接。我刚刚安装了Team Foundation Server,现在正在将数据库模式转换为数据库项目,我认为这将使这非常容易。再次感谢您的回复,我计划使用RedGate的一些工具,但是,在新的2010数据库项目中,它允许我在VisualStudio中拥有一个源代码控制的数据库模式,而无需太多麻烦。