我正在開發一些Delphi應用程序,這些應用程序需要在新版本發佈時以及用戶選擇安裝附加模塊時在現場升級自己的數據庫結構。應用程序正在使用各種嵌入式數據庫(目前DBISAM和Jet,但這可能會改變)。在使用Delphi的已安裝應用程序中對數據庫進行版本控制
在過去,我已經使用DBISAM使用用戶版本號來完成此操作,而不是使用每個表可以存儲的數字。我發佈了一組額外的空數據庫文件,並在啓動時使用FieldDefs比較每個表的版本號,以便在必要時更新已安裝的表。雖然這工作,但我發現必須運送數據庫的備用副本並且DBISAM的較新版本改變了表格重構方法,所以我需要重寫這個。
我可以看到兩種實現方法:使用數據庫存儲版本號,並使用DDL腳本從舊版本獲取更新版本或在應用程序內存儲數據庫結構的引用版本,將引用與啓動數據庫,並讓應用程序生成DDL命令來升級數據庫。
我認爲我可能必須實現兩者的部分。每當應用程序啓動時(太慢),我都不希望應用程序將數據庫與引用結構區分開來,所以我需要一個數據庫結構版本號來檢測用戶是否使用過時結構。但是,我不確定在過去數據庫可能部分更新或用戶可能自己更改了數據庫結構時,我可以信任預先寫好的腳本進行結構升級,所以我傾向於使用實際更新的參考差異。
研究問題我找到了一些數據庫版本控制工具,但它們都似乎針對SQL Server,並且在實際應用程序之外實現。我正在尋找一個可以緊密集成到我的應用程序中的進程,並且可以適應不同的數據庫要求(我知道我必須編寫適配器,自定義後代類或事件代碼來處理各種DDL差異數據庫,這並沒有打擾我)。
有誰知道的東西掉,做這個或做不到這一點,沒有任何人有任何的想法貨架:
存儲的應用程序中的通用關係數據庫結構的參考版本的最好方法。
最好的方式來區分引用與實際數據庫。
生成DDL以更新數據庫的最佳方法。
感謝您提供非常詳細和有用的答案。這將是一兩天,直到我可以消化所有。 – 2009-11-27 04:24:23