处理数据库模式中的更改

我正处于开发一个应用程序的初始阶段,希望能够在1000年内销售这个应用程序,这个应用程序的数量可能会达到数百个,但是无论哪种方式都会导致数据库模式更改的头痛。

我只是限制在一个windows / .net / sql server环境中,因为我们的许多客户将自行托pipe我在他们的web服务器上构build的应用程序,并且在他们的服务器上安装的额外位数永远不会很好,总是有一个数字投诉/丢失业务。 所以sqlalchemy出来了,因为它运行在python中。

我所追求的是一个工具,可以让我在应用程序的各个版本之间轻松迁移。 我find了migrator.net,之前我用过它,但是从来没有用过,因为开发团队似乎每年只能在这个平台上工作,而不是一个活跃的项目。

有什么替代方法可用?

更新我忘了提及,我希望能够在持续集成环境中使用这个,所以虽然数据老兄和SQL比较是很好的GUI工具,我真的自动化。

如果您使用Visual Studio 2010 Ultimate / Premium Edition或Visual Studio Team / Database Edition 2008,则可以在Visual Studio中找到所需的全部内容。

您可以比较两个数据库(例如,dev和prod)并生成用于修改数据的SQL脚本。 您可以轻松排除比较中的某些表格或某些列。 您还可以检查结果并排除脚本生成中的一些条目。 因此,可以轻松而灵活地生成可用于部署数据库中的更改的脚本。 您可以从结构中分离 比较两个数据库的数据模式比较 )。 只需进入“数据”菜单并选择“模式比较”或“数据比较”。 您可以阅读http://msdn.microsoft.com/en-us/library/dd193250.aspx和http://msdn.microsoft.com/en-us/library/dd193261.aspx以了解它是如何工作的。 因此,您可以使用prod中的数据来刷新dev中的数据,或者生成将prod数据库修改为dev数据库最后一个版本的脚本。

我开始在Vinsual Studio Team Edition 2008中使用此功能,并继续使用Visual Studio 2010 Ultimate。 这正是我需要的。 在某些情况下,我需要修改一些脚本,但是有95%的工作是在Visual Studio中完成的。

如果你不能VS2010旗舰版或高级版,并且没有VS2008团队或数据库版本,我建议你去看一些http://www.red-gate.com/的产品(比如http://www.red-gate.com /products/SQL_Compare/index.htm )与关闭功能。

Red_Gate的SQl Compare可以保持两个数据库的同步。

不过,我认为最重要的是将您的更改保留在特定版本的Source Control中。 对待你的SQL代码就像任何其他代码属于一个版本。 切勿让开发人员使用GUI进行更改,所有更改都应作为版本的一部分编写脚本并放入源代码管理。 一旦你这样做,如果有人在版本1,你想升级到版本2.3,那么你只需要按顺序运行每个版本的sripts,你将有2.3版本的数据库。

将升级脚本添加到您的应用程序。 如果您还没有,那么创建一个设置表,您可以在其中存储数据库的当前模式版本。 例:

CREATE TABLE SETTINGS(KEY VARCHAR(255), VALUE VARCHAR(255)); INSERT INTO SETTINGS VALUES('version', '1'); 

当启动应用程序时,查询此表(如果它不存在,则不安装以前的版本),并检查版本。 我只能维护版本1到版本2的单独升级脚本; 版本2到3; 3到4等等。 我不会直接维护版本1到3左右的升级脚本,通常不需要。 升级脚本通常包含ALTER TABLE和CREATE TABLE语句,但有时也包含UPDATE。

SQL Compare的专业版本有一个可用于持续集成的命令行。 这是记录在这里: http : //downloads.red-gate.com/HelpPDF/ContinuousIntegrationForDatabasesUsingRedGateSQLTools.pdf

理想情况下,您可以在源代码控制中维护模式,以充分利用这一点,您可以使用SQL源代码管理来完成这一任务 。

SQL Compare可以在两个给定的数据库之间迁移,但是源代码控制提供了一个更成熟的开发过程 。

如果这没有达到你要找的,请评论这个“答案”。