关于是否应该对数据库对象进行版本控制,在 SO 社区 wiki 上有一些讨论
对于我的团队来说,这是一个有争议的讨论点——特别是因为开发人员和 DBA 在评估数据库部署的自动化方法的好处和风险时,通常有不同的目标、方法和关注点。
我想听听 SO 社区关于什么实践在现实世界中是有效的一些想法。
我意识到哪种做法真的是最好的,这有点主观,但我认为一个好的对话什么样的工作可以对许多人有帮助。
以下是我的一些关于这个主题中关注领域的问题。这些并不意味着一个明确的清单-而是一个起点,让人们帮助了解我在寻找什么。
- 测试环境和生产环境都应该从源代码管理构建吗?
- 两者都应该使用自动化来构建——还是应该通过从稳定的最终测试环境中复制对象来构建生产?
- 如何处理部署脚本中测试环境和生产环境之间的潜在差异?
- 您如何测试部署脚本在生产环境中的工作效率是否与在测试环境中一样高?
- 应该对哪些类型的对象进行版本控制?
- 只是代码(过程、包、触发器、 Java 等) ?
- 索引?
- 约束?
- 表格定义?
- 表更改脚本? (例如,ALTER 脚本)
- 一切?
- 哪些类型的对象不应该进行版本控制?
- 应该如何在 SCM 存储库中组织数据库对象?
- 如何处理转换脚本或 ALTER 脚本这样的一次性事件?
- 如何处理从数据库中退出的对象?
- 从开发到测试级别,谁应该负责 宣传对象?
- 如何协调来自多个开发人员的更改?
- 如何处理多个系统使用的数据库对象的分支?
- 对于这个过程,哪些例外(如果有的话)是合理的?
- 安全问题?
- 涉及身份识别问题的数据?
- 不能完全自动化的脚本?
- 你如何才能使这个过程具有弹性和可执行性?
- 你如何使决策者相信 DB-SCM 的好处确实证明了成本的合理性?
- 轶事证据
- 行业研究?
- 行业最佳实践建议?
- 向认可机构上诉?
- 成本效益分析? ?
- 谁应该“拥有”这个模型中的数据库对象?