最近在讀一本《資料庫系統 設計、實現與管理》的書,其中的資料庫設計部分寫的挺好的,另外在本書中也講到了資料庫生命週期的概念,我覺得有所收益,特寫下此博文!
在軟體開發中,我們經常會提到軟體系統開發的生命週期,大致分為:計劃、分析、設計、實現、運維幾個階段,整體流程和動作如下圖所示:
而針對資料庫建模和資料庫應用開發來說,也有其自己的“資料庫生命週期”,database life cycle,簡稱DBLC。DBLC大致上分為6個階段:資料庫初始研究,資料庫設計,實現和裝載,測試和評價,執行,維護和演化。其對於的生命週期圖為:
也許作為一個資料庫模型設計人員或者開發人員來說,只關心參與3個階段,但是其實每個階段都應該參與其中,畢竟這6個階段是不斷迭代的過程。
下面我們來分別說明一下這6個階段。
1.資料庫初步研究
簡單的說就是前期的需求調研階段,只不過軟體開發中的需求調研是站在軟體的角度,而資料庫設計人員則應該站在資料庫的角度分析使用者的需求,主要做到以下目標:
- 分析公司的狀況。
- 定義問題和約束。
- 定義目標。
- 定義範圍和邊界。
2.資料庫設計
這是資料庫生命週期中最重要的環節,也是最燒腦細胞的環節。這個環節工作的好壞直接關係到最終軟體是否滿足使用者和系統的需求。資料庫設計又進一步劃分為幾個階段:概念設計、DBMS的選擇、邏輯設計、物理設計。
概念設計
概念設計階段需要根據使用者和系統的需求,設計出實體關係模型ERM,所以這個階段的產出是一個ERM。至於怎麼分析使用者需求後定義實體,定義關係,定義屬性,正規化化與反正規化化,以及對概念模型的驗證,那都是很深的學問,都可以單獨寫一本書了。我在之前的部落格中粗略的講解了如何進行概念模型的設計,可以參考:http://www.cnblogs.com/studyzy/category/466850.html
尤其是其中一篇(分析與設計資料庫模型的簡單過程)把ERM的建模過程演示了一遍。
而對概念模型的驗證,一方面需要檢查使用者需求中的物件和屬性是否都在概念模型中,其次,檢查CRUD在模型上的操作是否會造成異常,另外也需要從報表的角度考慮,是否能夠寫出對應的報表的查詢,查詢效率是否可接受。在整個模型驗證過程中,可能把一些屬性獨立出來成新的實體,也可能把關係從一對多改為多對多,也可能出於效能上的考慮,對一些表進行反正規化化處理。對概念模型的驗證一般以模組為單位進行驗證,而且概念模型的定義是獨立於硬體和軟體的,保證了模型的簡潔。
DBMS的選擇
目前市面上的DBMS可選擇性並不是很大,企業級DBMS就是Oracle,IBM DB2和SQL Server,這些DBMS功能強大完備,但是價格昂貴,而免費開源的有MySQL,PostgreSQL,這都是很流行的開源資料庫,而如果系統小而簡單的話,還可以考慮Sqlite,Access等單機資料庫。這前面說的都是RDBMS,也就是關係型的資料庫,還有其他物件資料庫,文件資料庫,層次資料庫如果需要也可進行選擇,尤其是隨著網際網路的興起,現在NoSQL非常火,也增加了DBMS的選擇範圍。
不管怎麼說,DBMS的選擇主要還是考慮以下幾個方面:
- 開銷/預算。這裡除了軟體和硬體本身的採購價格,還需要包括學習成本,運維開銷,轉換成本等。
- DBMS的特徵和工具。如關注系統的可用性,安全性,擴充套件性等。
- 基礎模型。是關係型的還是物件型的,或者文件型。
- 便利性。DBMS可以便利的在不同平臺,系統,語言之間進行移植。
- 硬體要求。
邏輯設計
邏輯模型就是將概念模型轉換為特定DBMS支援的模型,所以邏輯模型是與軟體相關的。邏輯模型中的表、外來鍵是可以通過概念模型的實體、關係轉換而來,但是對於檢視、儲存過程、函式、使用者等,都需要在邏輯模型中設計。
物理設計
物理模型是與具體的物理硬體相關,可以通過邏輯模型轉換而來。在物理設計中,需要考慮具體的資料儲存,資料分佈等,在物理模型中要求設計師充分了解軟體和硬體環境,充分發揮軟體和硬體的特性。
3.實現和裝載
常用的資料庫建模工具如PowerDesigner或者ERWin都可以將物理模型生成對應的SQL語句,然後我們在DBMS中執行SQL,便可實現我們設計的資料庫模型。在實現了資料庫模型後,我們還需要進一步研究其效能,安全,備份與恢復,以及完整性和公司標準。這些一般都是由DBMS提供的工具支援的。
4.測試和評價
資料一旦裝載到資料庫後,DBA就要對資料庫的效能,完整性,併發訪問和安全約束進行測試和優化。這個測試和評價階段是與軟體開發並行進行的。如果測試和評價結果不滿足要求,就需要對系統和模型進行調整。其中包括:
調整DBMS的配置引數,修改物理設計(比如索引和分割槽的修改),修改邏輯設計(比如增加冗餘欄位),更新或者更換DBMS的軟硬體平臺。
5.執行
資料庫通過了評測階段,就認為是可執行的了。在實際生產環境的執行過程中,產生了真實的資料,一些在測試階段無法預見的問題可能會被遇到,比如查詢緩慢,資料不一致,死鎖等問題都可能遇到。棘手的問題需要緊急補丁,而一些小Bug則可能在下一個版本中修正,而這些在執行中對資料庫的補丁和修改,就是一個維護和演化的過程。
6.維護和演化
資料庫的日常維護工作包括備份與恢復,使用者許可權分配,系統監控,系統定期安全審計等。對於系統補丁和新版本開發,則是對模型的演化,需要在更新生產系統資料庫時對資料庫模型進行同步的更新,這便進入了資料庫生命週期的迭代過程。