|
大多數程序員都很急切,在了解基本需求之后希望很快的進入到編碼階段(可能只有產出代碼才能反映工作量),對于數據庫設計思考得比較少。
這給系統留下了許多隱患。許多軟件系統的問題,如:輸出錯誤的數據,性能差或后期維護繁雜等,都與前期數據庫設計有著密切的關系。到了這個時候再想修改數據庫設計或進行優化等同于推翻重來。
我經常把軟件開發比作汽車制造。汽車制造會經過圖紙設計,模型制作,樣車制造,小批量試生產,最后是批量生產等步驟。整個過程環環相扣,后一過程是建立在前一過程正確的前提基礎之上的。如果在圖紙設計階段發現了一個紕漏,我們可以重新進行圖紙設計,如果到了樣車制造階段發現這個錯誤,那么我們就要把從圖紙設計到樣車制造的階段重來,越到后面發現設計上的問題,所付出的代價越大,修改的難度也越大。
數據庫是整個應用的根基,沒有堅實的根基,整個應用也就岌岌可危了。
強大的數據庫面對不良設計也無能為力
現代數據庫管理系統(DBMS)提供了方便的圖形化界面工具,通過這些工具可以很方便的創建表、定義列,但我們設計出的結構好嗎?
關系數據庫有許多非常好的特性,但設計不當會使這些特性部分或完全的喪失。
我們來看看以下幾個數據庫不良設計造成的場景:
1. 數據一致性的喪失
一個訂單管理系統,維護著客戶和客戶下的訂單信息。使用該系統的用戶在接到客戶修改收貨地址的電話后,在系統的客戶信息頁面把該客戶的收貨地址進行了修改,但原先該客戶的訂單還是送錯了地址。
2. 數據完整性的喪失
公司戰略轉移,準備撤出某地區。系統操作人員順手把該地區的配置信息在系統中進行刪除,系統提示刪除成功。隨后問題就來了,客服人員發現該地區的歷史訂單頁面一打開就出錯。
3. 性能的喪失
一個庫存管理系統,倉庫管理員使用該系統記錄每一筆進出貨情況,并能查看當前各貨物的庫存情況。在系統運行幾個月后,倉庫管理員發現打開當前庫存頁面變得非常慢,而且整個趨勢是越來越慢。
上面這些場景都是由于數據庫設計不當造成的,根源包括:設計時引入了冗余字段,沒有設計合理的約束,對性能沒有進行充足設計等,上面的例子也只是滄海一粟。
我在這個系列博客里討論的數據庫設計不針對任何一個關系數據庫產品。無論你使用的是Oracle,SQL Server,Sybase,亦或是開源數據庫如:MySQL,SQLite等,都可以用來實踐我們這里討論的設計方法和設計理念,設計是這個系列博文的核心和靈魂。
注:在文中我會選用一個數據庫產品來進行演示,大家可以選用自己熟悉的數據庫產品來實驗。本文最后會給出一些免費數據庫產品的鏈接,大家可以下載學習。
一起學習共同進步
無論你是數據庫設計師,應用架構師,軟件工程師,數據庫管理員(DBA),軟件項目經理,軟件測試工程師等項目組成員,都能從該系列博文中有所收獲。大家一起討論,共同進步。
內容涉及領域
我對這一系列博文現在的設想是涉及數據庫設計的整個過程。從需求分析開始,到數據庫建模(概念數據建模),進行范式化,直至轉化為SQL語句。
------------------------------------------------------------
[WebSites]
MyBlog=http://www.cnblogs.com/DBFocus
[Directorys]
Image=E:/DBFocus Project/Img
Text=E:/DBFocus Project/Documents
Data=E:/DBFocus Project/DB
------------------------------------------------------------
it知識庫:數據庫設計 Step by Step (1),轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。