av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

一步一步設(shè)計(jì)你的數(shù)據(jù)庫(kù)之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)的重要性

引言:一直在從事數(shù)據(jù)庫(kù)開發(fā)和設(shè)計(jì)工作,也看了一些書籍,算是略有心得。很久之前就想針對(duì)關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)進(jìn)行整理、總結(jié),但因?yàn)榉N種原因遲遲沒有動(dòng)手,主要還是惰性使然。今天也算是痛下決心開始這項(xiàng)卓絕又令我興奮的工作。這將是一個(gè)系列的文章,我將以講座式的口吻展開討論(個(gè)人偷懶,這里的總結(jié)直接拿去公司培訓(xùn)新人用)。

系列的第一講我們先來回答下面幾個(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ì)等,上面的例子也只是滄海一粟。

#p#

數(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語(yǔ)句。

#p#

在我們一頭扎進(jìn)數(shù)據(jù)庫(kù)設(shè)計(jì)之前,我們先了解一下除了關(guān)系型數(shù)據(jù)庫(kù)之外的數(shù)據(jù)存儲(chǔ)方式。

平面文件(Flat File)

包括以.txt和.ini結(jié)尾的文件。

eg: 一個(gè).ini文件的內(nèi)容:

 
 
 
 
  1. [WebSites]  
  2. MyBlog=http://www.cnblogs.com/DBFocus  
  3.  
  4. [Directorys]  
  5. Image=E:\DBFocus Project\Img  
  6. Text=E:\DBFocus Project\Documents  
  7. Data=E:\DBFocus Project\DB 

優(yōu)點(diǎn):

文件的存儲(chǔ)形式非常簡(jiǎn)單,普通的編輯器都能對(duì)其進(jìn)行打開、修改

缺點(diǎn):

無法支持復(fù)雜的查詢

沒有任何驗(yàn)證功能

對(duì)平面文件中間的內(nèi)容進(jìn)行插入、刪除操作其實(shí)是重新生成了一個(gè)新文件

適用場(chǎng)景:

存放小量,修改不頻繁的數(shù)據(jù),如應(yīng)用配置信息

Windows注冊(cè)表

錯(cuò)誤的修改Windows注冊(cè)表會(huì)引起系統(tǒng)的紊亂,故不建議把很多數(shù)據(jù)存放在注冊(cè)表中。

Windows注冊(cè)表為樹形結(jié)構(gòu),存放著一些系統(tǒng)配置信息和應(yīng)用配置信息。

通過把不同的配置存放在注冊(cè)表的不同分支上,使得應(yīng)用程序公共配置信息與用戶個(gè)人配置信息分離。

eg:某文檔版本管理系統(tǒng),能通過配置與本主機(jī)上安裝的文件比較器建立關(guān)聯(lián)進(jìn)行文檔比較。這是一個(gè)公共配置信息,文件比較器路徑可以存放在注冊(cè)表的HKEY_LOCAL_MACHINE\SOFTWARE分支下。

同時(shí)該文檔版本管理系統(tǒng)能記錄用戶最近打開的10個(gè)文檔路徑。這是用戶個(gè)人配置信息,對(duì)于不同的Windows用戶最近打開的10個(gè)文檔可以不同,這些配置信息可存放在注冊(cè)表的HKEY_CURRENT_USER\Software分支下。

Excel表單(Spreadsheets)

優(yōu)點(diǎn):

Excel 非常普及,用戶對(duì)于Spreadsheet的表現(xiàn)形式非常熟悉

可以進(jìn)行簡(jiǎn)單統(tǒng)計(jì),方便出各種圖表

缺點(diǎn):

不適用于許多Spreadsheet之間關(guān)系復(fù)雜的情況

無法應(yīng)對(duì)復(fù)雜查詢

數(shù)據(jù)驗(yàn)證功能弱

適用場(chǎng)景:

數(shù)據(jù)量不是非常大的辦公自動(dòng)化環(huán)境

XML

XML是一種半結(jié)構(gòu)化的數(shù)據(jù)。相比于超文本標(biāo)記語(yǔ)言(HTML),其標(biāo)簽是可以自行定義的,即可擴(kuò)展的。

eg:一個(gè)XML文件內(nèi)容

-----------------------------------------------------

 
 
 
 
  1.  
  2.  
  3.  
  4.  
  5.       
  6.  
  7.           Richard Storm 
  8.  
  9.            
  10.  
  11.                 
  12.  
  13.                      Ben 
  14.  
  15.                      Breaker 
  16.  
  17.                 
  18.  
  19.                 
  20.  
  21.                      Carol 
  22.  
  23.                      Enflame 
  24.  
  25.                      Candy 
  26.  
  27.            
  28.  
  29.       
  30.  
  31.  

-----------------------------------------------------

XML文件有幾個(gè)特點(diǎn)。

首先,XML標(biāo)簽要求嚴(yán)格對(duì)應(yīng),且不能出現(xiàn)交錯(cuò)的現(xiàn)象。

其次,XML文件必須有一個(gè)根節(jié)點(diǎn),該節(jié)點(diǎn)包含所有其他元素。

第三,同級(jí)別的不同節(jié)點(diǎn)內(nèi)不必包含相同的元素,如上例中第二個(gè)學(xué)生Carol有一個(gè)特別的節(jié)點(diǎn)NickName。這個(gè)特性使得在某些場(chǎng)景中XML比關(guān)系數(shù)據(jù)庫(kù)更能應(yīng)對(duì)變化。

優(yōu)點(diǎn):

  1. 自然的層次型結(jié)構(gòu)
  2. 文本內(nèi)容通過標(biāo)簽是自解釋的
  3. 通過XSD(XML Schema語(yǔ)言)可以驗(yàn)證XML的結(jié)構(gòu)
  4. 有許多輔助型技術(shù)如:XPath, XQuery, XSL, XSLT等
  5. 一些商業(yè)數(shù)據(jù)庫(kù)(如Oracle,SQL Server)已支持XML數(shù)據(jù)的存儲(chǔ)與操作

缺點(diǎn):

  1. 數(shù)據(jù)的冗余信息較多
  2. 無法支持復(fù)雜的查詢
  3. 驗(yàn)證功能有限
  4. 對(duì)XML中間的內(nèi)容進(jìn)行插入、刪除操作其實(shí)是重新生成一個(gè)新文件

適用場(chǎng)景:

適合存放數(shù)據(jù)量不大,具有層次型結(jié)構(gòu)的數(shù)據(jù),如樹形配置信息

NoSQL數(shù)據(jù)庫(kù)

非關(guān)系型數(shù)據(jù)庫(kù)我接觸的不是很多,除了給出一些產(chǎn)品名稱之外不做很多展開。園子里已有一些文章,本文最后也給出了鏈接供大家學(xué)習(xí)、研究。

1. Key-Value數(shù)據(jù)庫(kù)

Redis, Tokyo Cabinet, Flare

2. 面向文檔的數(shù)據(jù)庫(kù)

MongoDB, CouchDB

3. 面向分布式計(jì)算的數(shù)據(jù)庫(kù)

Cassandra, Voldemort

這幾年NoSQL非常熱。我認(rèn)為NoSQL并不是“銀彈”,在某些SNS應(yīng)用場(chǎng)景中NoSQL顯示了其優(yōu)越性,但在如金融行業(yè)等對(duì)數(shù)據(jù)的一致性、完整性、可用性、事務(wù)性高要求的場(chǎng)景下,現(xiàn)在的NoSQL就未必適用。我們應(yīng)充分分析應(yīng)用的需求,非常謹(jǐn)慎地選擇技術(shù)和產(chǎn)品。

#p#

主要內(nèi)容回顧

1.數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)于軟件項(xiàng)目成功的關(guān)鍵作用

2.本課程與數(shù)據(jù)庫(kù)產(chǎn)品無關(guān),核心是設(shè)計(jì)的理念和方法

3.各種數(shù)據(jù)存儲(chǔ)所適用的場(chǎng)景

參考資料

1. Oracle Database 10g Express Edition

2. SQL Server 2008 R2 Express – Overview

3. SQLite Home Page

4. NoSQL數(shù)據(jù)庫(kù)筆談

原文鏈接:http://www.cnblogs.com/DBFocus/archive/2011/03/27/1996655.html

【編輯推薦】

  1. SQLite做為本地緩存應(yīng)注意的幾大方面
  2. C#中數(shù)據(jù)本地存儲(chǔ)方案之SQLite
  3. 淺析SQLite數(shù)據(jù)庫(kù)開發(fā)常用管理工具
  4. Widget開發(fā)心得 解決跳轉(zhuǎn)頁(yè)面和SQLite類問題
  5. 為自己做一個(gè)簡(jiǎn)單記賬簿

網(wǎng)頁(yè)名稱:一步一步設(shè)計(jì)你的數(shù)據(jù)庫(kù)之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)的重要性
網(wǎng)站地址:http://uogjgqi.cn/article/ccodhih.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流