自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

數(shù)據(jù)庫
筆者一直在從事數(shù)據(jù)庫開發(fā)和設(shè)計工作,也看了一些書籍,算是略有心得。偷懶許久的筆者終于痛下決心,整理、總結(jié)了這一系列的文章。

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

系列的第一講我們先來回答下面幾個問題:

 

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

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

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

我經(jīng)常把軟件開發(fā)比作汽車制造。汽車制造會經(jīng)過圖紙設(shè)計,模型制作,樣車制造,小批量試生產(chǎn),最后是批量生產(chǎn)等步驟。整個過程環(huán)環(huán)相扣,后一過程是建立在前一過程正確的前提基礎(chǔ)之上的。如果在圖紙設(shè)計階段發(fā)現(xiàn)了一個紕漏,我們可以重新進(jìn)行圖紙設(shè)計,如果到了樣車制造階段發(fā)現(xiàn)這個錯誤,那么我們就要把從圖紙設(shè)計到樣車制造的階段重來,越到后面發(fā)現(xiàn)設(shè)計上的問題,所付出的代價越大,修改的難度也越大。

數(shù)據(jù)庫是整個應(yīng)用的根基,沒有堅實的根基,整個應(yīng)用也就岌岌可危了。

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

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

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

我們來看看以下幾個數(shù)據(jù)庫不良設(shè)計造成的場景

1. 數(shù)據(jù)一致性的喪失

一個訂單管理系統(tǒng),維護(hù)著客戶和客戶下的訂單信息。使用該系統(tǒng)的用戶在接到客戶修改收貨地址的電話后,在系統(tǒng)的客戶信息頁面把該客戶的收貨地址進(jìn)行了修改,但原先該客戶的訂單還是送錯了地址。

2. 數(shù)據(jù)完整性的喪失

公司戰(zhàn)略轉(zhuǎn)移,準(zhǔn)備撤出某地區(qū)。系統(tǒng)操作人員順手把該地區(qū)的配置信息在系統(tǒng)中進(jìn)行刪除,系統(tǒng)提示刪除成功。隨后問題就來了,客服人員發(fā)現(xiàn)該地區(qū)的歷史訂單頁面一打開就出錯。

3. 性能的喪失

一個庫存管理系統(tǒng),倉庫管理員使用該系統(tǒng)記錄每一筆進(jìn)出貨情況,并能查看當(dāng)前各貨物的庫存情況。在系統(tǒng)運行幾個月后,倉庫管理員發(fā)現(xiàn)打開當(dāng)前庫存頁面變得非常慢,而且整個趨勢是越來越慢。

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

#p#

 

數(shù)據(jù)庫平臺無關(guān)性

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

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

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

無論你是數(shù)據(jù)庫設(shè)計師,應(yīng)用架構(gòu)師,軟件工程師,數(shù)據(jù)庫管理員(DBA),軟件項目經(jīng)理,軟件測試工程師等項目組成員,都能從該系列博文中有所收獲。大家一起討論,共同進(jìn)步。

內(nèi)容涉及領(lǐng)域

我對這一系列博文現(xiàn)在的設(shè)想是涉及數(shù)據(jù)庫設(shè)計的整個過程。從需求分析開始,到數(shù)據(jù)庫建模(概念數(shù)據(jù)建模),進(jìn)行范式化,直至轉(zhuǎn)化為SQL語句。

#p#

 

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

平面文件(Flat File)

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

eg: 一個.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)點:

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

缺點:

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

沒有任何驗證功能

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

適用場景:

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

Windows注冊表

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

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

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

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

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

Excel表單(Spreadsheets)

優(yōu)點:

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

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

缺點:

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

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

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

適用場景:

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

XML

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

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

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

  1. <?xml version=”1.0” encoding=”UTF-8” ?> 
  2.  
  3. <ClassSchedule> 
  4.  
  5.      <Class Name=“Psychology” Room=”Field 3”> 
  6.  
  7.           <Instructor>Richard Storm</Instructor> 
  8.  
  9.           <Students> 
  10.  
  11.                <Student> 
  12.  
  13.                      <FirstName>Ben</FirstName> 
  14.  
  15.                      <LastName>Breaker</LastName> 
  16.  
  17.                </Student> 
  18.  
  19.                <Student> 
  20.  
  21.                      <FirstName>Carol</FirstName> 
  22.  
  23.                      <LastName>Enflame</LastName> 
  24.  
  25.                      <NickName>Candy</NichName> 
  26.  
  27.           </Students> 
  28.  
  29.      </Class> 
  30.  
  31. </ClassSchedule> 

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

XML文件有幾個特點。

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

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

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

優(yōu)點:

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

缺點:

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

適用場景:

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

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

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

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

Redis, Tokyo Cabinet, Flare

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

MongoDB, CouchDB

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

Cassandra, Voldemort

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

#p#

 

主要內(nèi)容回顧

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

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

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

參考資料

1. Oracle Database 10g Express Edition

2. SQL Server 2008 R2 Express – Overview

3. SQLite Home Page

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

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

 

【編輯推薦】

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

 

責(zé)任編輯:艾婧 來源: 博客園
相關(guān)推薦

2011-10-13 10:18:50

設(shè)計數(shù)據(jù)庫

2011-05-10 09:19:55

數(shù)據(jù)庫設(shè)計

2011-06-09 15:16:54

數(shù)據(jù)庫設(shè)計

2011-04-25 15:22:26

數(shù)據(jù)庫設(shè)計

2011-05-30 14:07:36

2011-04-11 14:51:25

數(shù)據(jù)庫設(shè)計

2023-09-05 07:52:43

2020-02-02 19:53:57

數(shù)據(jù)庫數(shù)據(jù)庫優(yōu)化SQL優(yōu)化

2015-10-08 11:25:55

2021-03-17 07:07:21

系統(tǒng)程序員SDI

2014-12-30 10:13:21

數(shù)據(jù)庫盤2014盤點云數(shù)據(jù)庫AWS

2024-01-01 16:16:26

2013-03-18 16:09:27

JavaEEOpenfire

2022-08-29 15:19:09

CSS煙花動畫

2009-07-06 19:29:37

云計算私有云服務(wù)器虛擬化

2023-08-01 08:47:54

索引數(shù)據(jù)庫MongoDB

2012-03-22 10:33:33

思杰XenDesktop

2022-09-30 15:37:19

Web網(wǎng)站服務(wù)器

2017-06-16 21:56:43

MySQL數(shù)據(jù)庫安全

2010-10-26 11:14:07

Oracle數(shù)據(jù)庫備份
點贊
收藏

51CTO技術(shù)棧公眾號