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