如何管理sql结构更新

时间:2009-05-12 13:17:09

标签: sql mysql

人们如何建议管理数据库结构更新?

e.g。添加了新功能,需要更改现有表,添加新表等。

是否有一个好的软件或是写ALTER类型语句的情况。

4 个答案:

答案 0 :(得分:4)

虽然有软件可以分析两个模式(RedGate SQL Compare)之间的差异并生成必要的更改脚本,但我更喜欢编写自己的数据库更改语句。这样,我就可以完全控制正在改变的内容 - 仅此而已。将更改转换为每个数据库版本的Install.sql脚本或类似内容,以便您可以运行该脚本并更新数据库。

这样可以轻松地将更改从开发移动到测试再到生产。

请参阅:Deploying SQL Server Databases from Test to Live

答案 1 :(得分:1)

如果您不想手写所有alter语句,SQL Server Management Studio有一个GUI来处理所有这类内容。您可以使用GUI,然后查看它生成的脚本,如果您想要某种快速,混合的方法,可以从那里开始。

答案 2 :(得分:1)

我要添加一件事。编写alter table语句来更改表结构是不够的。如果要更改表结构,最好在运行它之前确定其确切知道其他视图,函数,表,存储过程,触发器,SSIS(DTS)包(对于SQL Server)和来自应用程序的动态代码将受到变化的影响。如果您不完全确定可能会影响其他对象,则表示您尚未准备好更改该表。我已经看到过多的业务关键功能被破坏了,因为有人在不考虑使用该结构的情况下偶然改变了表结构。如果您正在考虑进行数据库结构更改,我建议您在执行此操作之前先阅读数据库重构。

这是一本很好的书: http://www.amazon.com/Refactoring-Databases-Evolutionary-Addison-Wesley-Signature/dp/0321293533

答案 3 :(得分:0)

您没有提及您的申请范围或开发人员的数量等,因此提出任何建议都有点困难。但是,如果您的开发包含多个并发项目和多个开发人员,并且您正在从开发复制到生产,我会建议以下内容:

  • 实施3个“区域”:dev,qa,production。
  • 开发dev中的所有更改,在脚本中创建所有更改,使用cvs之类的内容来跟踪所有对象的更改
  • 当更改准备就绪并经过测试时,在qa中运行脚本,这将验证脚本和安装过程
  • 准备好运行脚本并在生产中安装程序

注意:qa与生产几乎完全相同,除了应用等待最终生产安装的更改。 dev包含任何正在进行的工作更改,额外的调试垃圾等。您可以定期将生产备份恢复到qa和dev以重新同步它们(只需确保所有开发人员都知道这一点并相应地计划),因为(取决于数量)开发人员)他们(生产与qa与开发)将开始产生更多的差异。