在我們的數據庫中的所有對象都保持在代碼 - 表,視圖,觸發器,存儲過程,一切 - 如果我們期望找到它在數據庫中,那麼它應該是在DDL,我們可以運行的代碼。實際的模式更改是版本化的 - 因此數據庫中有一個表格,表示這是模式版本「n」,如果這不是當前版本(根據更新代碼),那麼我們會進行必要的更改。
我們盡力分離出觸發器和視圖 - 不這樣做,雖然我們也許應該,做與SP和FN - 與刪除並重新創建代碼,有效期爲當前架構版本。因此,應該「安全」地刪除和重新創建不是表格的任何東西,儘管如果對象之間存在依賴關係,那麼刪除和創建都會出現排序問題。關於這一點的好處通常是,我們可以自信地將架構從新增到現在,並且有信心模式的任何實例都是一致的。
如果您有能力運行模式更新代碼,包括根據當前定義重新創建所有數據庫對象的代碼,那麼您的問題應該基本消失...備份,恢復,運行模式主線邏輯。這可以帶來進一步的好處,即可以在開發服務器中引入模式(表)更改並保持相同的更新邏輯。
我知道這不是一個完全通用的解決方案。值得注意的是,它可能對每個開發人員的數據庫效果更好(我是一個老式的程序員,所以我將所有問題看作具有基於代碼的解決方案( - :),但作爲一般方法,我認爲它具有相當大的優點,你有一個一致的機制來解決一些問題。