一般來講常見的(小)項目開發,裝一台數據庫服務器,幾個程序員用管理員身份在服務器上創建自己需要的表、存儲過程,測試功能生成數據就什么都搞定了,后面數據庫的維護管理都是越做越繁瑣、發布越來越困難。好一些的情形會有專職的DBA來統一進行數據庫相關的開發,但是更改腳本也是很難管理和生成。
數據庫作為項目成果物的一部分,在這種情況下,是動態、變化的:
(1)對於數據庫對象的變化,很難跟蹤;
(2)對於開發過程中廢棄的數據庫對象,很難標識;
(3)由於測試數據的存在,很難將修改部署到不同的數據庫副本;
(4)很難快速獲取一個“空”的初始數據庫;
(5)容易掩蓋一些開發過程中引入的錯誤。
以上幾點都是網上大家討論總結出來的,對於我們公司來講,由於一些初級程序員也涉及到數據庫方面的更改和測試,有些技術方面需要關注和管理的知識是非常欠缺的(我們目前還沒有專職DBA,窘~~),這時候我們只能是由有經驗的程序員給予幫助和開發數據庫的本地部署,相當浪費時間。
拿我們公司的問題出來做個說明,大家來看看,相信大家都遇到過類似的問題
(1)表結構和存儲過程沒有版本控制,無法確認修改者,無法跟蹤業務邏輯變化。
(2)已經沒用的表和存儲過程殘留在數據庫里,但無法確認能不能刪除。
(3)開發數據庫上的修改,在不影響數據的情況下,同步到測試數據庫很麻煩
(4)在開發中途需要給客戶演示,於是要先把測試數據刪除(但又要保留某些系統初始數據),獲得一個“空”的初始數據庫給客戶安裝。
(5)由於開發時的高權限造成了數據庫對象依賴關系的錯誤,備份-恢復的部署方法是發現不了的。
網上有同僚說道:與其維護主數據庫,還不如維護可在任何時間創建數據庫的腳本,算是偶得——這與代碼管理的概念同出一轍:
- 確保所有數據庫使用相同的對象
- 總能從零開始創建一個數據庫的副本
- 可以捕獲不再有效的對象
- 可以使用源代碼控制來管理腳本
- 可以將數據庫的創建工作集成到項目生成過程中以便快速捕獲錯誤(可以是測試數據庫)
- 可以編寫腳本將所需數據添加到數據庫中,比如元數據
- 可以編寫用於單元測試的測試數據腳本
個人對數據庫項目的定義:可用於持續集成的置於源代碼控制下的數據庫對象腳本集合。
檢驗方式:如程序源碼一樣,能夠快速創建某個時間點的數據庫。
近來頗有一些免費、付費的工具能夠幫助數據庫項目的開發,暫時不展開,有興趣的朋友可自行搜索。