数据库 - 版本控制 - 管理 dropped/deleted 个对象

Database - Version Control - Managing dropped/deleted objects

我们想清理不再使用的数据库架构和 drop/delete 个对象。

我们怀疑在未来的某个时候我们会想要恢复已删除的功能。

我们讨论了以下用于在版本控制中处理丢弃对象的选项:

  1. 从源代码管理中删除 .sql 文件,一旦它们从数据库中消失并依赖版本历史记录来存储定义。我们对这种方法的担忧是,多年来的某个时候,源代码控制将被移动,我们将丢失历史记录。如果我们看不到所有丢失的对象,似乎也很难知道要寻找什么来恢复。

  2. 将 .sql 文件保留在源代码管理中,但将定义更新为 "drop proc {someproc}"。通过这种方法,我们担心将不再存在的对象留在版本控制中,并且如果 vcs 被移动,还有丢失历史记录的风险

  3. 为删除的对象创建一个新的存储库,并将 .sql 文件从 SQL 服务器删除后迁移到此存储库。

我们在 windows 环境中工作,并且对使用 VCS 处理数据库还很陌生。目前 GIT + SSDT。

目前选项 3 是我们的首选方法。

有很多用于版本控制数据库更改的好工具:您很有可能会因为 "Too broad" 原因而关闭此问题,但我会尝试建议

  • 阅读、理解并尝试将 Liquibase 添加到您的开发工具箱
  • 采用你的工作流来使用这个额外的层 - 从技术上讲,它将是变更集中的一个文件(就 Liquibase 而言的变更日志),你可以在其中更改 DD 和|或数据。
  • 这些变更日志提供了在数据库变化的线性历史中来回移动的良好而流畅的方式,对于在不同历史节点之间直接跳转不是很好(或者我不知道正确的方法),但它似乎不是你的情况

从您的选项列表来看,它会比其他选项更多 p.1(但它在版本控制的数据库中存储 更改不是状态)

我在数据库代码中经常看到这种情况,随着时间的推移,人们最终会在数据库中找到未使用或根本不起作用的东西(想想引用 table 和table 被修改但 proc 没有被修改。

要做的事情是在源代码管理中获取所有内容(它看起来像你拥有的),然后在删除之前和之后创建所有代码的标记或分支,以便你可以将其取回。

通常会发生两件事,要么代码真的从未使用过,要么在年底使用,当您发现时,世界即将落在您的头上,所以最好有一个快速的方法来取回它。

当然,如果您有全套测试,那么即使是年终流程也是安全的:)

我个人不会使用选项 3,我只会将历史保留在主分支中,以便您保留历史。

编辑

请注意另一个选项,在 SSDT 中,您可以将文件 属性 标记为 Build Action = None。选择此构建选项时,该文件将不会包含在 dacpac 中。但我倾向于同意你应该依靠你的 VCS 来处理历史的想法。