sql - 最佳数据库变更控制方法

标签 sql database architecture schema methodology

作为数据库架构师、开发人员和顾问,有许多问题需要回答。一,虽然我最近被问到但仍然不能很好地回答,是......

"What is one of, or some of, the best methods or techniques to keep database changes documented, organized, and yet able to roll out effectively either in a single-developer or multi-developer environment."

这可能涉及存储过程和其他对象脚本,但尤其是模式 - 从文档到新的物理更新脚本,再到推出,然后是完整的循环。有一些应用程序可以实现这一点,但需要模式 Hook 和开销。我更想了解在没有大量额外第三方参与的情况下使用的技术。

最佳答案

我见过在没有外部工具帮助的情况下完成此操作的最简单方法是创建一个“架构补丁”(如果您愿意的话)。模式补丁只是一个简单的 t-sql 脚本。模式补丁在脚本中被赋予一个版本号,这个版本号存储在数据库的一个表中以接收更改。

对数据库的任何新更改都涉及创建一个新的模式补丁,然后您可以按顺序运行该补丁,然后检测数据库当前的版本并运行其间的所有模式补丁。之后,架构版本表将更新为执行补丁的任何日期/时间,以存储下一次运行。

一本像这样深入细节的好书叫做Refactoring Databases .

如果您想使用外部工具,您可以查看 Ruby's Migrations项目或 C# 中名为 Migrator.NET 的类似工具.这些工具通过创建具有“向前”和“向后”迁移的 c# 类/ruby 类来工作。这些工具功能更丰富,因为它们知道如何在模式补丁中前进和后退。然而,正如您所说,您对外部工具不感兴趣,但我想我还是会为其他读者添加它。

关于sql - 最佳数据库变更控制方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/534955/

相关文章:

sql - 使用递归 CTE 遍历父/子树?

sql - 使用大于运算符和 ORDER BY 的 MySQL 查询的索引帮助

sql - 如何将不同表的多列合并到一个表中

mysql - 从签到日期列表中获取持续时间

mysql - 如何在远程服务器上运行SQL查询

android - 关于在ListView上显示的高效查询

php - 加入后只识别已注册的群组?

facebook - 合并多个账户并注册一个用户账户的架构

.net - 寻找在我们的应用程序中实现版本控制功能的建议

c# - 抽象出复合标识值以用于业务逻辑?