我正处于构建应用程序的初期阶段,该应用程序有望在1000年内销售 - 更有可能是数百个,但无论哪种方式都足以导致数据库模式更改的大小问题。
我比较局限于windows / .net / sql服务器环境,因为我们的许多客户将自己托管我正在他们的网络服务器中构建的应用程序,并且在他们的服务器上安装的额外位数永远不会很顺利总是有很多抱怨/丢失的业务。所以sqlalchemy出局了,因为它运行在python中。
我所追求的是一个允许我在应用程序版本之间轻松迁移的工具。我找到了migrator.net,之前我已经使用过它,但从未投入生产,因为开发团队似乎每年都只使用它,而不是一个活跃的项目。
有哪些替代方法?
更新 我忘了提到我希望能够在持续集成环境中使用它,所以虽然数据花花公子和sql比较是很好的gui工具,但我确实是自动化的。
答案 0 :(得分:2)
如果您使用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 Ultimate或Premium而没有VS2008团队或数据库版本,我建议您查看一些http://www.red-gate.com/的产品(如http://www.red-gate.com/products/SQL_Compare/index.htm)及其近似特征。
答案 1 :(得分:2)
Red_Gate的SQl Compare有利于保持两个数据库同步。
但是,我认为最重要的是将源代码管理中的更改保留在特定版本下。像处理某个版本的任何其他代码一样处理您的sql代码。绝不允许您的开发人员使用GUI进行更改。所有更改都应编写脚本并作为版本的一部分放入源代码管理中。如果有人在版本1中并且您想将它们升级到版本2.3,那么只需按顺序运行每个版本的sripts,您将拥有2.3版本的数据库。
答案 2 :(得分:1)
将升级脚本添加到您的应用程序中。如果您还没有,请创建一个设置表,用于存储数据库的当前架构版本。例如:
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。
答案 3 :(得分:0)
SQL Compare的专业版有一个可用于持续集成的命令行。这在此处记录:http://downloads.red-gate.com/HelpPDF/ContinuousIntegrationForDatabasesUsingRedGateSQLTools.pdf
理想情况下,您可以在源代码管理中维护架构,以便充分利用SQL Source Control。
SQL Compare可以在两个给定的数据库之间进行迁移,但源代码管理提供more mature development process。
如果这不符合您的要求,请对此“回答”发表评论。