那些敏捷的从业者......
如何在项目期间管理对数据库模式的更改?我的假设是,在敏捷项目中,所涉及的任何数据库的模式都会发生变化,并且会像代码库一样重构。
这个假设是否正确?如果是这样,您是否拥有用于帮助保持平稳运行的特定工具或流程?
答案 0 :(得分:7)
AgileData.org是一个很好的资源 - 远远超过我对敏捷数据库开发的单一响应。特别是,您可能对Agile Data Best Practices感兴趣。如果您使用SQL Server,您可能也会对Red Gate软件中的SQL Compare感兴趣。我们的DBA使用它来帮助我将现有应用程序的QA更改迁移到Production。
答案 1 :(得分:5)
对于每次更新,我都会:
HTH
欢呼声,
罗布
答案 2 :(得分:3)
在我们的Agile设置中,有一个用于DB更改的文件夹,以.SQL文件的形式完成。到目前为止,我们已经在每个版本中更改了数据库,并且该文件以应用程序版本命名。更新站点时,安装脚本会自动应用所有更改文件。
我们还有一个参考数据库的完整模式转储,用于新安装,由我们的数据库管理工具创建。
我知道有一些工具可以帮助自动执行此过程,例如Red Gate,但手动创建SQL更改文件非常容易。
答案 3 :(得分:1)
理想情况下,您可以进行非中断更改,然后在发布完成后,您可以完全弃用模式的旧部分。这并不容易,需要纪律处分。它甚至不可能。
答案 4 :(得分:0)
看看Ruby on rails migrations。如果你不使用Rails并不重要,因为这个想法已经被复制到其他框架了。
答案 5 :(得分:0)
数据库结构很可能是代码的许多部分的依赖关系,并且架构更改将具有级联效果。有点像在许多类扩展的类中对接口进行更改。所以要对模式更改保持谨慎。
敏捷方法与其他方法没有什么不同,因为尽可能地预先设计数据库对您有利,并且您应该比代码更频繁地尝试更改它。并不是说你永远无法改变它,但这样做成本很高。
正如其他人所指出的,迁移是一种简单但有效的跟踪架构变更的工具。概念是CREATE和ALTER语句的脚本,用于从架构的一个版本升级到下一个版本,伴随着ALTER和DROP语句的脚本来降级相同的更改。 Ruby on Rails在此基础上使用数据库抽象层,以便更容易切换数据库品牌,但如果您只需要支持一个品牌,则只需使用SQL文件即可。
关于这个主题的一本备受推崇的书(虽然我还没有购买或阅读它)被Scott Ambler称为“Refactoring Databases: Evolutionary Database Design”