第十一章
一、數(shù)據(jù)庫(kù)技術(shù)發(fā)展階段(一)第一代數(shù)據(jù)庫(kù)系統(tǒng)
第一代數(shù)據(jù)庫(kù)系統(tǒng)指層次模型數(shù)據(jù)庫(kù)系統(tǒng)和網(wǎng)狀模型數(shù)據(jù)庫(kù)系統(tǒng)。層次模型中,數(shù)據(jù)用記錄的集合表示,記錄組織成樹(shù)型結(jié)構(gòu)。
層次模型數(shù)據(jù)庫(kù)的數(shù)據(jù)操縱語(yǔ)言由嵌入宿主語(yǔ)言的命令組成。通過(guò)使用命令,程序員可以根據(jù)給定字段的值從數(shù)據(jù)庫(kù)中選取記錄,并通過(guò)重復(fù)取下一記錄的命令取出滿足條件的所有記錄,還可以使用命令去找出某棵樹(shù)的根的所有子女記錄,也可以通過(guò)命令去更新數(shù)據(jù)庫(kù)。網(wǎng)狀模型中,數(shù)據(jù)用記錄的集合表示,記錄組織成有向圖結(jié)構(gòu)。
層次模型和網(wǎng)狀模型數(shù)據(jù)庫(kù)的數(shù)據(jù)操縱語(yǔ)言都是一次一個(gè)記錄的導(dǎo)航式的過(guò)程化語(yǔ)言。使用導(dǎo)航式的語(yǔ)言,用戶不僅要指定“做什么”,而且要說(shuō)明“怎樣做”。而且導(dǎo)航式語(yǔ)言通常是嵌入到某種高級(jí)語(yǔ)言,導(dǎo)航式的數(shù)據(jù)操縱語(yǔ)言的優(yōu)點(diǎn)是存取效率高,對(duì)數(shù)據(jù)庫(kù)內(nèi)部結(jié)構(gòu)有清楚了解的應(yīng)用程序員可以選取一條高效率的存取路徑對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)。導(dǎo)航式語(yǔ)言的缺點(diǎn)是編程復(fù)雜,對(duì)應(yīng)用程序員要求高,并且應(yīng)用程序的可移植性也較差。
(二)第二代數(shù)據(jù)庫(kù)系統(tǒng)
第二代數(shù)據(jù)庫(kù)系統(tǒng)指支持關(guān)系模型的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。
E.F.Codd于1970年提出了數(shù)據(jù)庫(kù)的關(guān)系模型,開(kāi)創(chuàng)了數(shù)據(jù)庫(kù)關(guān)系方法和關(guān)系數(shù)據(jù)理論的研究,為關(guān)系數(shù)據(jù)庫(kù)技術(shù)奠定了理論基礎(chǔ)。關(guān)系模型建立在嚴(yán)格的數(shù)學(xué)概念基礎(chǔ)上,概念簡(jiǎn)單、清晰、易于用戶理解和使用,大大減輕了用戶的負(fù)擔(dān),因此受到廣大用戶的歡迎。
(三)第三代數(shù)據(jù)庫(kù)系統(tǒng)
面向?qū)ο蠹夹g(shù)與數(shù)據(jù)庫(kù)技術(shù)相結(jié)合的系統(tǒng)稱做第三代數(shù)據(jù)庫(kù)系統(tǒng),或新一代數(shù)據(jù)庫(kù)系統(tǒng)。第三代數(shù)據(jù)庫(kù)系統(tǒng)的3條原則是:支持更加豐富的對(duì)象結(jié)構(gòu)和規(guī)則;包含第二代DBMS;對(duì)其他子系統(tǒng)(例如工具和多數(shù)據(jù)庫(kù)中間件產(chǎn)品)開(kāi)放。
二、數(shù)據(jù)庫(kù)系統(tǒng)體系結(jié)構(gòu)(一)集中式數(shù)據(jù)庫(kù)系統(tǒng)
集中式系統(tǒng)是運(yùn)行在一臺(tái)計(jì)算機(jī)上,不與其他計(jì)算機(jī)系統(tǒng)交互的數(shù)據(jù)庫(kù)系統(tǒng)。這樣的系統(tǒng)范圍很廣,既包括運(yùn)行在個(gè)人計(jì)算機(jī)上的小型數(shù)據(jù)庫(kù)系統(tǒng),也包括運(yùn)行在大型主機(jī)上的高性能數(shù)據(jù)庫(kù)系統(tǒng)。
(二)客戶/服務(wù)器數(shù)據(jù)庫(kù)系統(tǒng)
數(shù)據(jù)庫(kù)功能可以大致地分為兩個(gè)部分:前端和后端,后端負(fù)責(zé)存取結(jié)構(gòu)、查詢計(jì)算和優(yōu)化、并發(fā)控制以及故障恢復(fù)。數(shù)據(jù)庫(kù)系統(tǒng)的前端包括表格生成工具、報(bào)表書(shū)寫(xiě)工具、圖形用戶界面工具等。前端與后端之間通過(guò)SQL或應(yīng)用程序來(lái)接口??蛻?服務(wù)器體系結(jié)構(gòu)能夠在前端和后端之間進(jìn)行功能劃分。由于圖形用戶界面代碼具有更多的處理需求,也由于個(gè)人計(jì)算機(jī)的能力越來(lái)越強(qiáng),所以前端的功能由個(gè)人計(jì)算機(jī)來(lái)支持。個(gè)人計(jì)算機(jī)作為服務(wù)器系統(tǒng)的客戶,服務(wù)器中存儲(chǔ)大量的數(shù)據(jù),并提供后端的功能??蛻魧⑹聞?wù)送給服務(wù)器系統(tǒng),由服務(wù)器系統(tǒng)來(lái)執(zhí)行事務(wù)并把結(jié)果送回給客戶,由客戶負(fù)責(zé)數(shù)據(jù)的顯示。
(三)并行數(shù)據(jù)庫(kù)系統(tǒng)
并行數(shù)據(jù)庫(kù)的研究主要包括以下3個(gè)方面:
1.并行數(shù)據(jù)庫(kù)物理存儲(chǔ)結(jié)構(gòu)的研究
研究如何對(duì)數(shù)據(jù)庫(kù)中的關(guān)系進(jìn)行劃分,并把它們分布到多個(gè)處理器或多個(gè)磁盤(pán),以使查詢處理時(shí)間最小化。常用的劃分技術(shù)有以下3種:(假定數(shù)據(jù)分布到n個(gè)磁盤(pán),D 0, D 1 ,…,D n-1 上)
(1)輪轉(zhuǎn)法。
(2)散列分布。
(3)范圍轉(zhuǎn)分布。
2.并行數(shù)據(jù)操作算法的設(shè)計(jì)與實(shí)現(xiàn)
研究如何實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的并行操作。
3.并行數(shù)據(jù)庫(kù)的查詢優(yōu)化
并行查詢計(jì)算的優(yōu)化器比串行查詢計(jì)算的優(yōu)化器更為復(fù)雜,要考慮劃分的代價(jià),如何并行地計(jì)算一個(gè)查詢等問(wèn)題。
(四)分布式數(shù)據(jù)庫(kù)系統(tǒng)
分布式數(shù)據(jù)庫(kù)的基本原理如下:對(duì)于用戶來(lái)講,分布式系統(tǒng)必須看起來(lái)完全像一個(gè)非分布式系統(tǒng)。換句話說(shuō),分布式系統(tǒng)的用戶的操作與非分布式系統(tǒng)是完全相同的。分布式系統(tǒng)的所有問(wèn)題是(或應(yīng)當(dāng)是)內(nèi)部的、實(shí)現(xiàn)級(jí)別的問(wèn)題,而不是外部的、用戶級(jí)別的問(wèn)題。分布式數(shù)據(jù)庫(kù)系統(tǒng)所研究的主要問(wèn)題包括查詢處理、目錄管理、更新的傳播、并發(fā)控制、故障恢復(fù)等。
三、面向?qū)ο蠹夹g(shù)與數(shù)據(jù)庫(kù)技術(shù)結(jié)合(一)新的數(shù)據(jù)庫(kù)應(yīng)用
(1)計(jì)算機(jī)輔助設(shè)計(jì)(CAD)。CAD數(shù)據(jù)庫(kù)存儲(chǔ)了與一個(gè)工程設(shè)計(jì)相關(guān)的數(shù)據(jù),包括所設(shè)計(jì)物品的各個(gè)組件、這些組件之間的相互關(guān)系以及設(shè)計(jì)的各個(gè)先前版本。
(2)計(jì)算機(jī)輔助軟件工程(CASE)。CASE數(shù)據(jù)庫(kù)存儲(chǔ)了用于輔助軟件開(kāi)發(fā)的一些數(shù)據(jù)。
(3)多媒體數(shù)據(jù)庫(kù)。多媒體數(shù)據(jù)庫(kù)包含圖像、空間數(shù)據(jù)、音頻數(shù)據(jù)、{mod}數(shù)據(jù)以及其他類似的數(shù)據(jù)。
(4)辦公信息系統(tǒng)(OIS)。辦公自動(dòng)化包括基于工作臺(tái)的文檔生成和檢索工具、維護(hù)日程安排的工具,等等。
(5)超文本數(shù)據(jù)庫(kù)。超文本是經(jīng)過(guò)增強(qiáng)的文本,它帶有指向其他文檔的鏈。
(二)面向?qū)ο蠡靖拍?BR> 面向?qū)ο蠓椒ǖ幕舅枷胧?從現(xiàn)實(shí)世界中客觀存在的事物(對(duì)象)出發(fā),以盡可能接近人類思維的方式建立模型,對(duì)客觀事物進(jìn)行結(jié)構(gòu)模擬和行為模擬。
面向?qū)ο蟮幕靖拍畎▽?duì)象、屬性、方法、消息、封裝、類、繼承、多繼承等。
1.對(duì)象結(jié)構(gòu)與封裝性
一個(gè)對(duì)象由一組屬性和對(duì)這組屬性進(jìn)行操作的一組方法構(gòu)成。屬性是用來(lái)描述對(duì)象靜態(tài)特征的一個(gè)數(shù)據(jù)項(xiàng)。方法是用來(lái)描述對(duì)象動(dòng)態(tài)特征的一個(gè)操作序列。消息是用來(lái)描述對(duì)象執(zhí)行某一操作或回答某些信息的要求。封裝是一種信息隱蔽技術(shù)。對(duì)象本身就是一種封裝,把一組屬性和對(duì)這組屬性進(jìn)行的操作結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。
2.對(duì)象類
是具有相同屬性和方法的一組對(duì)象的集合,它為屬于該類的全部對(duì)象提供了統(tǒng)一的抽象描述。在系統(tǒng)中通常有很多相似的對(duì)象,它們具有相同名稱和類型的屬性,響應(yīng)相同的消息,使用相同的方法。對(duì)每個(gè)這樣的對(duì)象單獨(dú)進(jìn)行定義是很浪費(fèi)的,因此,我們將相似的對(duì)象分組形成一個(gè)類,每個(gè)這樣的對(duì)象被稱為類的一個(gè)實(shí)例,一個(gè)類中的所有對(duì)象共享一個(gè)公共的定義,盡管它們對(duì)屬性所賦予的值不同。
3.繼承
類構(gòu)成特殊化層次(ISA聯(lián)系)。ISA聯(lián)系中子類的對(duì)象擁有其超類的對(duì)象的全部屬性和方法,稱做子類對(duì)超類的繼承。一個(gè)類可以從多個(gè)超類中繼承屬性和方法,這稱做多繼承。在多繼承的情況下,類與子類的關(guān)系可以用一個(gè)有向無(wú)環(huán)圖來(lái)表示,其中一個(gè)類可以有多于一個(gè)的超類。
一、數(shù)據(jù)庫(kù)技術(shù)發(fā)展階段(一)第一代數(shù)據(jù)庫(kù)系統(tǒng)
第一代數(shù)據(jù)庫(kù)系統(tǒng)指層次模型數(shù)據(jù)庫(kù)系統(tǒng)和網(wǎng)狀模型數(shù)據(jù)庫(kù)系統(tǒng)。層次模型中,數(shù)據(jù)用記錄的集合表示,記錄組織成樹(shù)型結(jié)構(gòu)。
層次模型數(shù)據(jù)庫(kù)的數(shù)據(jù)操縱語(yǔ)言由嵌入宿主語(yǔ)言的命令組成。通過(guò)使用命令,程序員可以根據(jù)給定字段的值從數(shù)據(jù)庫(kù)中選取記錄,并通過(guò)重復(fù)取下一記錄的命令取出滿足條件的所有記錄,還可以使用命令去找出某棵樹(shù)的根的所有子女記錄,也可以通過(guò)命令去更新數(shù)據(jù)庫(kù)。網(wǎng)狀模型中,數(shù)據(jù)用記錄的集合表示,記錄組織成有向圖結(jié)構(gòu)。
層次模型和網(wǎng)狀模型數(shù)據(jù)庫(kù)的數(shù)據(jù)操縱語(yǔ)言都是一次一個(gè)記錄的導(dǎo)航式的過(guò)程化語(yǔ)言。使用導(dǎo)航式的語(yǔ)言,用戶不僅要指定“做什么”,而且要說(shuō)明“怎樣做”。而且導(dǎo)航式語(yǔ)言通常是嵌入到某種高級(jí)語(yǔ)言,導(dǎo)航式的數(shù)據(jù)操縱語(yǔ)言的優(yōu)點(diǎn)是存取效率高,對(duì)數(shù)據(jù)庫(kù)內(nèi)部結(jié)構(gòu)有清楚了解的應(yīng)用程序員可以選取一條高效率的存取路徑對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)。導(dǎo)航式語(yǔ)言的缺點(diǎn)是編程復(fù)雜,對(duì)應(yīng)用程序員要求高,并且應(yīng)用程序的可移植性也較差。
(二)第二代數(shù)據(jù)庫(kù)系統(tǒng)
第二代數(shù)據(jù)庫(kù)系統(tǒng)指支持關(guān)系模型的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。
E.F.Codd于1970年提出了數(shù)據(jù)庫(kù)的關(guān)系模型,開(kāi)創(chuàng)了數(shù)據(jù)庫(kù)關(guān)系方法和關(guān)系數(shù)據(jù)理論的研究,為關(guān)系數(shù)據(jù)庫(kù)技術(shù)奠定了理論基礎(chǔ)。關(guān)系模型建立在嚴(yán)格的數(shù)學(xué)概念基礎(chǔ)上,概念簡(jiǎn)單、清晰、易于用戶理解和使用,大大減輕了用戶的負(fù)擔(dān),因此受到廣大用戶的歡迎。
(三)第三代數(shù)據(jù)庫(kù)系統(tǒng)
面向?qū)ο蠹夹g(shù)與數(shù)據(jù)庫(kù)技術(shù)相結(jié)合的系統(tǒng)稱做第三代數(shù)據(jù)庫(kù)系統(tǒng),或新一代數(shù)據(jù)庫(kù)系統(tǒng)。第三代數(shù)據(jù)庫(kù)系統(tǒng)的3條原則是:支持更加豐富的對(duì)象結(jié)構(gòu)和規(guī)則;包含第二代DBMS;對(duì)其他子系統(tǒng)(例如工具和多數(shù)據(jù)庫(kù)中間件產(chǎn)品)開(kāi)放。
二、數(shù)據(jù)庫(kù)系統(tǒng)體系結(jié)構(gòu)(一)集中式數(shù)據(jù)庫(kù)系統(tǒng)
集中式系統(tǒng)是運(yùn)行在一臺(tái)計(jì)算機(jī)上,不與其他計(jì)算機(jī)系統(tǒng)交互的數(shù)據(jù)庫(kù)系統(tǒng)。這樣的系統(tǒng)范圍很廣,既包括運(yùn)行在個(gè)人計(jì)算機(jī)上的小型數(shù)據(jù)庫(kù)系統(tǒng),也包括運(yùn)行在大型主機(jī)上的高性能數(shù)據(jù)庫(kù)系統(tǒng)。
(二)客戶/服務(wù)器數(shù)據(jù)庫(kù)系統(tǒng)
數(shù)據(jù)庫(kù)功能可以大致地分為兩個(gè)部分:前端和后端,后端負(fù)責(zé)存取結(jié)構(gòu)、查詢計(jì)算和優(yōu)化、并發(fā)控制以及故障恢復(fù)。數(shù)據(jù)庫(kù)系統(tǒng)的前端包括表格生成工具、報(bào)表書(shū)寫(xiě)工具、圖形用戶界面工具等。前端與后端之間通過(guò)SQL或應(yīng)用程序來(lái)接口??蛻?服務(wù)器體系結(jié)構(gòu)能夠在前端和后端之間進(jìn)行功能劃分。由于圖形用戶界面代碼具有更多的處理需求,也由于個(gè)人計(jì)算機(jī)的能力越來(lái)越強(qiáng),所以前端的功能由個(gè)人計(jì)算機(jī)來(lái)支持。個(gè)人計(jì)算機(jī)作為服務(wù)器系統(tǒng)的客戶,服務(wù)器中存儲(chǔ)大量的數(shù)據(jù),并提供后端的功能??蛻魧⑹聞?wù)送給服務(wù)器系統(tǒng),由服務(wù)器系統(tǒng)來(lái)執(zhí)行事務(wù)并把結(jié)果送回給客戶,由客戶負(fù)責(zé)數(shù)據(jù)的顯示。
(三)并行數(shù)據(jù)庫(kù)系統(tǒng)
并行數(shù)據(jù)庫(kù)的研究主要包括以下3個(gè)方面:
1.并行數(shù)據(jù)庫(kù)物理存儲(chǔ)結(jié)構(gòu)的研究
研究如何對(duì)數(shù)據(jù)庫(kù)中的關(guān)系進(jìn)行劃分,并把它們分布到多個(gè)處理器或多個(gè)磁盤(pán),以使查詢處理時(shí)間最小化。常用的劃分技術(shù)有以下3種:(假定數(shù)據(jù)分布到n個(gè)磁盤(pán),D 0, D 1 ,…,D n-1 上)
(1)輪轉(zhuǎn)法。
(2)散列分布。
(3)范圍轉(zhuǎn)分布。
2.并行數(shù)據(jù)操作算法的設(shè)計(jì)與實(shí)現(xiàn)
研究如何實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的并行操作。
3.并行數(shù)據(jù)庫(kù)的查詢優(yōu)化
并行查詢計(jì)算的優(yōu)化器比串行查詢計(jì)算的優(yōu)化器更為復(fù)雜,要考慮劃分的代價(jià),如何并行地計(jì)算一個(gè)查詢等問(wèn)題。
(四)分布式數(shù)據(jù)庫(kù)系統(tǒng)
分布式數(shù)據(jù)庫(kù)的基本原理如下:對(duì)于用戶來(lái)講,分布式系統(tǒng)必須看起來(lái)完全像一個(gè)非分布式系統(tǒng)。換句話說(shuō),分布式系統(tǒng)的用戶的操作與非分布式系統(tǒng)是完全相同的。分布式系統(tǒng)的所有問(wèn)題是(或應(yīng)當(dāng)是)內(nèi)部的、實(shí)現(xiàn)級(jí)別的問(wèn)題,而不是外部的、用戶級(jí)別的問(wèn)題。分布式數(shù)據(jù)庫(kù)系統(tǒng)所研究的主要問(wèn)題包括查詢處理、目錄管理、更新的傳播、并發(fā)控制、故障恢復(fù)等。
三、面向?qū)ο蠹夹g(shù)與數(shù)據(jù)庫(kù)技術(shù)結(jié)合(一)新的數(shù)據(jù)庫(kù)應(yīng)用
(1)計(jì)算機(jī)輔助設(shè)計(jì)(CAD)。CAD數(shù)據(jù)庫(kù)存儲(chǔ)了與一個(gè)工程設(shè)計(jì)相關(guān)的數(shù)據(jù),包括所設(shè)計(jì)物品的各個(gè)組件、這些組件之間的相互關(guān)系以及設(shè)計(jì)的各個(gè)先前版本。
(2)計(jì)算機(jī)輔助軟件工程(CASE)。CASE數(shù)據(jù)庫(kù)存儲(chǔ)了用于輔助軟件開(kāi)發(fā)的一些數(shù)據(jù)。
(3)多媒體數(shù)據(jù)庫(kù)。多媒體數(shù)據(jù)庫(kù)包含圖像、空間數(shù)據(jù)、音頻數(shù)據(jù)、{mod}數(shù)據(jù)以及其他類似的數(shù)據(jù)。
(4)辦公信息系統(tǒng)(OIS)。辦公自動(dòng)化包括基于工作臺(tái)的文檔生成和檢索工具、維護(hù)日程安排的工具,等等。
(5)超文本數(shù)據(jù)庫(kù)。超文本是經(jīng)過(guò)增強(qiáng)的文本,它帶有指向其他文檔的鏈。
(二)面向?qū)ο蠡靖拍?BR> 面向?qū)ο蠓椒ǖ幕舅枷胧?從現(xiàn)實(shí)世界中客觀存在的事物(對(duì)象)出發(fā),以盡可能接近人類思維的方式建立模型,對(duì)客觀事物進(jìn)行結(jié)構(gòu)模擬和行為模擬。
面向?qū)ο蟮幕靖拍畎▽?duì)象、屬性、方法、消息、封裝、類、繼承、多繼承等。
1.對(duì)象結(jié)構(gòu)與封裝性
一個(gè)對(duì)象由一組屬性和對(duì)這組屬性進(jìn)行操作的一組方法構(gòu)成。屬性是用來(lái)描述對(duì)象靜態(tài)特征的一個(gè)數(shù)據(jù)項(xiàng)。方法是用來(lái)描述對(duì)象動(dòng)態(tài)特征的一個(gè)操作序列。消息是用來(lái)描述對(duì)象執(zhí)行某一操作或回答某些信息的要求。封裝是一種信息隱蔽技術(shù)。對(duì)象本身就是一種封裝,把一組屬性和對(duì)這組屬性進(jìn)行的操作結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。
2.對(duì)象類
是具有相同屬性和方法的一組對(duì)象的集合,它為屬于該類的全部對(duì)象提供了統(tǒng)一的抽象描述。在系統(tǒng)中通常有很多相似的對(duì)象,它們具有相同名稱和類型的屬性,響應(yīng)相同的消息,使用相同的方法。對(duì)每個(gè)這樣的對(duì)象單獨(dú)進(jìn)行定義是很浪費(fèi)的,因此,我們將相似的對(duì)象分組形成一個(gè)類,每個(gè)這樣的對(duì)象被稱為類的一個(gè)實(shí)例,一個(gè)類中的所有對(duì)象共享一個(gè)公共的定義,盡管它們對(duì)屬性所賦予的值不同。
3.繼承
類構(gòu)成特殊化層次(ISA聯(lián)系)。ISA聯(lián)系中子類的對(duì)象擁有其超類的對(duì)象的全部屬性和方法,稱做子類對(duì)超類的繼承。一個(gè)類可以從多個(gè)超類中繼承屬性和方法,這稱做多繼承。在多繼承的情況下,類與子類的關(guān)系可以用一個(gè)有向無(wú)環(huán)圖來(lái)表示,其中一個(gè)類可以有多于一個(gè)的超類。