代码之家  ›  专栏  ›  技术社区  ›  ilivewithian

处理数据库架构中的更改

  •  2
  • ilivewithian  · 技术社区  · 14 年前

    我正处于开发一个应用程序的初级阶段,这个应用程序有望在1000年销售,很可能会有数百个,但无论哪种方式都足以引起数据库模式更改的巨大麻烦。

    我相当局限于windows/.net/sql server环境,因为我们的许多客户将在他们的web服务器上自行托管我正在构建的应用程序,而在他们的服务器上安装的额外程序永远不会运行良好,因此总会有很多投诉/业务丢失。所以sqlalchemy已经过时了,因为它在python中运行。

    我所追求的是一个工具,它可以让我轻松地在应用程序的不同版本之间进行迁移。我发现了migrator.net,以前也使用过它,但从来没有在生产中使用过,因为开发团队似乎每年只处理它,而不是一个活动的项目。

    有哪些替代方法?

    更新 我忘了提到我想在一个持续集成环境中使用它,所以虽然data dude和sql compare是很好的gui工具,但我真的实现了自动化。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Oleg    14 年前

    如果您使用visual studio 2010旗舰版/高级版或visual studio team/数据库版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数据库的最新版本。

    我开始在VinsualStudio TeamEdition2008中使用此功能,并继续使用它Visual Studio 2010 Ultimate。这正是我所需要的。在某些情况下,我需要修改一些脚本,但95%的工作都是由visual studio完成的。

    如果您不能使用VS2010旗舰版或高级版,也不能使用VS2008团队版或数据库版,我建议您查看 http://www.red-gate.com/ (就像 http://www.red-gate.com/products/SQL_Compare/index.htm )具有紧密的特征。

        2
  •  2
  •   HLGEM    14 年前

    red_gate的sql比较有助于保持两个数据库同步。

    但是,我认为关键的事情是将源代码管理中的更改保持在特定的版本下。像对待其他属于某个版本的代码一样对待sql代码。永远不要允许您的开发人员使用gui进行更改,所有更改都应该作为版本的一部分编写脚本并放入源代码管理中。一旦你这样做了,如果有人在版本1中,你想升级到版本2.3,那么你只需要为每个版本运行sripts,你将在版本2.3中有一个数据库。

        3
  •  1
  •   Thomas Mueller    14 年前

    将升级脚本添加到应用程序中。如果仍然没有,请创建一个设置表,在其中存储数据库的当前架构版本。例子:

    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语句。

        4
  •  0
  •   David Atkinson    14 年前

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

    理想情况下,您可以在源代码管理中维护您的模式,以充分利用它,这可以使用 SQL Source Control 是的。

    sql compare可以在两个给定的数据库之间迁移,但是源代码管理提供了 more mature development process 是的。

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