我有一个数据库(SQL Server 2008 R2),它主要受源代码控制(因此每个数据库对象一个文件,在文件夹中组合在一起,例如表、视图、存储过程)。目前,更改是通过编写 SQL 升级脚本进行的,然后是一些自制批处理文件来执行它们(它们也很容易出错)。
因此,我们正在研究迁移是否对我们有用,但我还没有看到对最佳实践的很好解释。大多数博客文章似乎都假设一个空数据库,然后进行几次迁移(通常是 CreateUsers 和 CreateRoles),但没有显示之后会发生什么?如果您有数百个存储过程,您是否希望它们(就像我们目前拥有的那样)在每个对象的 .sql 文件中,然后让您的迁移引用这些文件?我们是否混淆了基于状态的部署和基于迁移的部署?
换句话说,如果我们要进行迁移,我们是否应该有一个 SQL 文件来创建处于某个已知状态的整个数据库(快照 #1)(包含数百个表和数百个存储过程),编写一大堆在一个主要项目的过程中进行迁移,然后在该项目结束时,创建一个新快照,并将其添加到源代码控制中?所以我们的 VCS 中唯一的东西就是快照,以及在快照之间移动我们的迁移?但是,如果您没有单独的对象在版本控制之下,您如何跟踪例如用户表的历史?