日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

數(shù)據(jù)庫(kù)開(kāi)發(fā)和設(shè)計(jì)

系統(tǒng) 1997 0

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

系列的第一講我們先來(lái)回答下面幾個(gè)問(wèn)題

image

數(shù)據(jù)庫(kù)是大樓的根基

大多數(shù)程序員都很急切,在了解基本需求之后希望很快的進(jìn)入到編碼階段(可能只有產(chǎn)出代碼才能反映工作量),對(duì)于數(shù)據(jù)庫(kù)設(shè)計(jì)思考得比較少。

這給系統(tǒng)留下了許多隱患。許多軟件系統(tǒng)的問(wèn)題,如:輸出錯(cuò)誤的數(shù)據(jù),性能差或后期維護(hù)繁雜等,都與前期數(shù)據(jù)庫(kù)設(shè)計(jì)有著密切的關(guān)系。到了這個(gè)時(shí)候再想修改數(shù)據(jù)庫(kù)設(shè)計(jì)或進(jìn)行優(yōu)化等同于推翻重來(lái)。

我經(jīng)常把軟件開(kāi)發(fā)比作汽車制造。汽車制造會(huì)經(jīng)過(guò)圖紙?jiān)O(shè)計(jì),模型制作,樣車制造,小批量試生產(chǎn),最后是批量生產(chǎn)等步驟。整個(gè)過(guò)程環(huán)環(huán)相扣,后一過(guò)程是建立在前一過(guò)程正確的前提基礎(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ì)到樣車制造的階段重來(lái),越到后面發(fā)現(xiàn)設(shè)計(jì)上的問(wèn)題,所付出的代價(jià)越大,修改的難度也越大。

數(shù)據(jù)庫(kù)是整個(gè)應(yīng)用的根基,沒(méi)有堅(jiān)實(shí)的根基,整個(gè)應(yīng)用也就岌岌可危了。

強(qiáng)大的數(shù)據(jù)庫(kù)面對(duì)不良設(shè)計(jì)也無(wú)能為力

現(xiàn)代數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)提供了方便的圖形化界面工具,通過(guò)這些工具可以很方便的創(chuàng)建表、定義列,但我們?cè)O(shè)計(jì)出的結(jié)構(gòu)好嗎?

關(guān)系數(shù)據(jù)庫(kù)有許多非常好的特性,但設(shè)計(jì)不當(dāng)會(huì)使這些特性部分或完全的喪失。

我們來(lái)看看以下幾個(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)提示刪除成功。隨后問(wèn)題就來(lái)了,客服人員發(fā)現(xiàn)該地區(qū)的歷史訂單頁(yè)面一打開(kāi)就出錯(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)打開(kāi)當(dāng)前庫(kù)存頁(yè)面變得非常慢,而且整個(gè)趨勢(shì)是越來(lái)越慢。

上面這些場(chǎng)景都是由于數(shù)據(jù)庫(kù)設(shè)計(jì)不當(dāng)造成的,根源包括:設(shè)計(jì)時(shí)引入了冗余字段,沒(méi)有設(shè)計(jì)合理的約束,對(duì)性能沒(méi)有進(jìn)行充足設(shè)計(jì)等,上面的例子也只是滄海一粟。

image

數(shù)據(jù)庫(kù)平臺(tái)無(wú)關(guān)性

我在這個(gè)系列博客里討論的數(shù)據(jù)庫(kù)設(shè)計(jì)不針對(duì)任何一個(gè)關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品。無(wú)論你使用的是Oracle,SQL Server,Sybase,亦或是開(kāi)源數(shù)據(jù)庫(kù)如:MySQL,SQLite等,都可以用來(lái)實(shí)踐我們這里討論的設(shè)計(jì)方法和設(shè)計(jì)理念,設(shè)計(jì)是這個(gè)系列博文的核心和靈魂。

注:在文中我會(huì)選用一個(gè)數(shù)據(jù)庫(kù)產(chǎn)品來(lái)進(jìn)行演示,大家可以選用自己熟悉的數(shù)據(jù)庫(kù)產(chǎn)品來(lái)實(shí)驗(yàn)。本文最后會(huì)給出一些免費(fèi)數(shù)據(jù)庫(kù)產(chǎn)品的鏈接,大家可以下載學(xué)習(xí)。

一起學(xué)習(xí)共同進(jìn)步

無(wú)論你是數(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è)過(guò)程。從需求分析開(kāi)始,到數(shù)據(jù)庫(kù)建模(概念數(shù)據(jù)建模),進(jìn)行范式化,直至轉(zhuǎn)化為SQL語(yǔ)句。

image

在我們一頭扎進(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)容:

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

[WebSites]

MyBlog=http://www.cnblogs.com/DBFocus

[Directorys]

Image=E:\DBFocus Project\Img

Text=E:\DBFocus Project\Documents

Data=E:\DBFocus Project\DB

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

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

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

缺點(diǎn):

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

沒(méi)有任何驗(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è)表為樹(shù)形結(jié)構(gòu),存放著一些系統(tǒng)配置信息和應(yīng)用配置信息。

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

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

同時(shí)該文檔版本管理系統(tǒng)能記錄用戶最近打開(kāi)的10個(gè)文檔路徑。這是用戶個(gè)人配置信息,對(duì)于不同的Windows用戶最近打開(kāi)的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ù)雜的情況

無(wú)法應(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)容

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

<?xml version=”1.0” encoding=”UTF-8” ?>

<ClassSchedule>

???? <Class Name=“Psychology” Room=”Field 3”>

????????? <Instructor>Richard Storm</Instructor>

????????? <Students>

?????????????? <Student>

???????????????????? <FirstName>Ben</FirstName>

???????????????????? <LastName>Breaker</LastName>

?????????????? </Student>

?????????????? <Student>

???????????????????? <FirstName>Carol</FirstName>

???????????????????? <LastName>Enflame</LastName>

???????????????????? <NickName>Candy</NichName>

????????? </Students>

???? </Class>

</ClassSchedule>

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

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):

自然的層次型結(jié)構(gòu)

文本內(nèi)容通過(guò)標(biāo)簽是自解釋的

通過(guò)XSD(XML Schema語(yǔ)言)可以驗(yàn)證XML的結(jié)構(gòu)

有許多輔助型技術(shù)如:XPath, XQuery, XSL, XSLT等

一些商業(yè)數(shù)據(jù)庫(kù)(如Oracle,SQL Server)已支持XML數(shù)據(jù)的存儲(chǔ)與操作

缺點(diǎn):

數(shù)據(jù)的冗余信息較多

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

驗(yàn)證功能有限

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

適用場(chǎng)景:

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

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

非關(guān)系型數(shù)據(jù)庫(kù)我接觸的不是很多,除了給出一些產(chǎn)品名稱之外不做很多展開(kāi)。園子里已有一些文章,本文最后也給出了鏈接供大家學(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)品。

image

主要內(nèi)容回顧

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

2.本課程與數(shù)據(jù)庫(kù)產(chǎn)品無(wú)關(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

數(shù)據(jù)庫(kù)開(kāi)發(fā)和設(shè)計(jì)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 宜兰县| 武威市| 鲁山县| 合山市| 武穴市| 尼玛县| 晴隆县| 鄂尔多斯市| 塔城市| 双江| 清原| 綦江县| 平邑县| 新蔡县| 安顺市| 丁青县| 贞丰县| 安陆市| 博白县| 独山县| 四川省| 大悟县| 肇庆市| 文成县| 酉阳| 大冶市| 鄄城县| 宿迁市| 张家界市| 前郭尔| 承德县| 璧山县| 湖南省| 乐东| 长泰县| 平南县| 辛集市| 托克逊县| 沙洋县| 汾西县| 特克斯县|