在我们的数据库中的所有对象都保持在代码 - 表,视图,触发器,存储过程,一切 - 如果我们期望找到它在数据库中,那么它应该是在DDL,我们可以运行的代码。实际的模式更改是版本化的 - 因此数据库中有一个表格,表示这是模式版本“n”,如果这不是当前版本(根据更新代码),那么我们会进行必要的更改。
我们尽力分离出触发器和视图 - 不这样做,虽然我们也许应该,做与SP和FN - 与删除并重新创建代码,有效期为当前架构版本。因此,应该“安全”地删除和重新创建不是表格的任何东西,尽管如果对象之间存在依赖关系,那么删除和创建都会出现排序问题。关于这一点的好处通常是,我们可以自信地将架构从新增到现在,并且有信心模式的任何实例都是一致的。
如果您有能力运行模式更新代码,包括根据当前定义重新创建所有数据库对象的代码,那么您的问题应该基本消失...备份,恢复,运行模式主线逻辑。这可以带来进一步的好处,即可以在开发服务器中引入模式(表)更改并保持相同的更新逻辑。
我知道这不是一个完全通用的解决方案。值得注意的是,它可能对每个开发人员的数据库效果更好(我是一个老式的程序员,所以我将所有问题看作具有基于代码的解决方案( - :),但作为一般方法,我认为它具有相当大的优点,你有一个一致的机制来解决一些问题。