數(shù)據(jù)庫(kù)系統(tǒng)概論(第五版)——數(shù)據(jù)庫(kù)原理

0 前言

數(shù)據(jù)庫(kù)是大數(shù)據(jù)領(lǐng)域非常重要的一個(gè)部分,并且隨著數(shù)據(jù)量不斷增大和數(shù)據(jù)結(jié)構(gòu)更加復(fù)雜,數(shù)據(jù)庫(kù)技術(shù)將變得日益重要。筆者本科時(shí)修過(guò)數(shù)據(jù)庫(kù)原理的課程,但當(dāng)時(shí)僅從應(yīng)用的角度去看,甚至都不能算有角度,只能說(shuō)學(xué)了一點(diǎn)sql語(yǔ)句,甚是淺顯,說(shuō)一無(wú)所知都不過(guò)分。目前筆者處在研究生階段,研究方向?yàn)榇髷?shù)據(jù)與數(shù)據(jù)挖掘,經(jīng)過(guò)學(xué)習(xí)和探索,筆者認(rèn)為數(shù)據(jù)庫(kù)是本領(lǐng)域最重要的三項(xiàng)技術(shù)之一,其他兩項(xiàng)分別為數(shù)據(jù)挖掘算法和云計(jì)算技術(shù),有機(jī)會(huì)也會(huì)進(jìn)行探討與分享。本系列內(nèi)容將是我在重讀王珊、薩師煊編著,高等教育出版社出版的《數(shù)據(jù)庫(kù)系統(tǒng)概論(第5版)》的過(guò)程中的筆記和思考,筆者將從數(shù)據(jù)庫(kù)原理、數(shù)據(jù)庫(kù)設(shè)計(jì)關(guān)系數(shù)據(jù)庫(kù)原理和數(shù)據(jù)庫(kù)技術(shù)的應(yīng)用四個(gè)方面進(jìn)行梳理。

數(shù)據(jù)庫(kù)原理

1.1 數(shù)據(jù)庫(kù)概述

數(shù)據(jù)庫(kù)是數(shù)據(jù)管理的有效技術(shù),是計(jì)算機(jī)科學(xué)的重要分支。

1. 數(shù)據(jù)庫(kù)的四個(gè)基本概念:數(shù)據(jù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)。 數(shù)據(jù)是數(shù)據(jù)庫(kù)中存儲(chǔ)的幾本對(duì)象。描述事物的符號(hào)記錄稱為數(shù)據(jù)。數(shù)據(jù)的含義稱為數(shù)據(jù)的語(yǔ)義。數(shù)據(jù)庫(kù)是存放數(shù)據(jù)的倉(cāng)庫(kù)。數(shù)據(jù)庫(kù)是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織的、可共享的大量數(shù)據(jù)的集合。數(shù)據(jù)庫(kù)數(shù)據(jù)具有永久存儲(chǔ)、有組織和可共享三個(gè)基本特點(diǎn)。數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件。DBMS的主要功能有數(shù)據(jù)定義、數(shù)據(jù)組織存儲(chǔ)管理、數(shù)據(jù)操縱、數(shù)據(jù)庫(kù)的事務(wù)管理和運(yùn)行管理、數(shù)據(jù)庫(kù)的建立和維護(hù)、其他(通信、數(shù)據(jù)轉(zhuǎn)換)等。數(shù)據(jù)庫(kù)系統(tǒng)(DBS)是由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)、應(yīng)用程序和數(shù)據(jù)庫(kù)管理員組成的存儲(chǔ)、管理、處理和維護(hù)數(shù)據(jù)的系統(tǒng)。

2. 數(shù)據(jù)管理技術(shù)的三個(gè)階段: 人工管理階段——>文件系統(tǒng)階段——(避免數(shù)據(jù)冗余,解決多用戶、多應(yīng)用共享數(shù)據(jù)問(wèn)題)——>數(shù)據(jù)庫(kù)系統(tǒng)階段。

3. 數(shù)據(jù)庫(kù)系統(tǒng)的特點(diǎn): ①數(shù)據(jù)結(jié)構(gòu)化。②數(shù)據(jù)的共享性高、冗余度低且易擴(kuò)充。避免數(shù)據(jù)之間的不相同性和不一致性。(不一致性是指同一數(shù)據(jù)不同副本的值不一樣)③數(shù)據(jù)獨(dú)立性高。物理獨(dú)立性是指用戶的應(yīng)用程序與數(shù)據(jù)庫(kù)中數(shù)據(jù)的物理存儲(chǔ)是相互獨(dú)立的。邏輯獨(dú)立性是指用戶的應(yīng)用程序與數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)是相互獨(dú)立的。④數(shù)據(jù)由數(shù)據(jù)庫(kù)管理系統(tǒng)統(tǒng)一管理和控制。DBMS提供的數(shù)據(jù)控制功能包括數(shù)據(jù)的安全性保護(hù)、數(shù)據(jù)的完整性檢查、并發(fā)控制和數(shù)據(jù)庫(kù)恢復(fù)。

4. 數(shù)據(jù)模型:數(shù)據(jù)模型是一種模型,它是對(duì)現(xiàn)實(shí)世界數(shù)據(jù)特征的抽象。兩大類:第一類是概念模型,第二類是邏輯模型和物理模型。用戶的觀點(diǎn)—>計(jì)算機(jī)系統(tǒng)的觀點(diǎn)。現(xiàn)實(shí)世界—>信息世界(第一類)—>機(jī)器世界(第二類)。組成要素:數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)操作,數(shù)據(jù)的完整性約束條件。數(shù)據(jù)結(jié)構(gòu)描述數(shù)據(jù)庫(kù)的組成對(duì)象以及對(duì)象之間的聯(lián)系,是系統(tǒng)的靜態(tài)特性。數(shù)據(jù)操作是指對(duì)數(shù)據(jù)庫(kù)中對(duì)象實(shí)例允許執(zhí)行的操作的集合,主要有查詢和更新(增刪改)兩大類,是對(duì)系統(tǒng)動(dòng)態(tài)特性的描述。數(shù)據(jù)的完整性約束條件是一組完整性規(guī)則,對(duì)數(shù)據(jù)及其聯(lián)系的制約和依存規(guī)則,以保證數(shù)據(jù)的正確、有效和相容。

4.1 概念模型

(1)信息世界的概念:實(shí)體(人,事,物),屬性,碼(唯一標(biāo)識(shí)實(shí)體的屬性集,學(xué)號(hào)),實(shí)體型(實(shí)體名與屬性名集合抽象表示的同類實(shí)體,如學(xué)生(學(xué)號(hào),姓名,性別)),實(shí)體集(同一類實(shí)體的集合,如全體學(xué)生),聯(lián)系(實(shí)體各屬性間,實(shí)體與實(shí)體間,一對(duì)一,一對(duì)多,多對(duì)多)。

(2)表示方法:實(shí)體-聯(lián)系方法。該方法用E-R圖,E-R方法也稱為E-R模型。

4.2 邏輯模型

常見(jiàn)的有層次模型,網(wǎng)狀模型,關(guān)系模型,面向?qū)ο髷?shù)據(jù)模型,對(duì)象關(guān)系數(shù)據(jù)模型,半結(jié)構(gòu)化數(shù)據(jù)模型。層次模型和網(wǎng)狀模型統(tǒng)稱為格式化模型,使用和實(shí)現(xiàn)時(shí)要涉及物理層的復(fù)雜結(jié)構(gòu),因而被關(guān)系模型取代,隨著面向?qū)ο蠓椒ǖ挠绊懀S多關(guān)系數(shù)據(jù)庫(kù)廠商為了支持面向?qū)ο竽P停瑢㈥P(guān)系模型擴(kuò)展為對(duì)象關(guān)系模型。由于Web上信息來(lái)源為半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)源,產(chǎn)生了以XML為代表的半結(jié)構(gòu)化數(shù)據(jù)模型和非結(jié)構(gòu)化數(shù)據(jù)模型。

格式化模型中實(shí)體用記錄表示,實(shí)體的屬性對(duì)應(yīng)記錄的數(shù)據(jù)項(xiàng)或字段,數(shù)據(jù)結(jié)構(gòu)的單位是基本層次聯(lián)系。基本層次聯(lián)系指兩個(gè)記錄及他們之間的一對(duì)多(包括一對(duì)一)的聯(lián)系。一-雙親節(jié)點(diǎn),多-子女節(jié)點(diǎn)。

4.2.1 層次模型

層次數(shù)據(jù)庫(kù)采用層次模型,代表有IMS(Information Management System),IBM,1968。

(1)數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)庫(kù)中滿足兩個(gè)條件的基本層次聯(lián)系的集合為層次模型:1)有且只有一個(gè)節(jié)點(diǎn)沒(méi)有雙親節(jié)點(diǎn),即根節(jié)點(diǎn);2)根節(jié)點(diǎn)以外的其他節(jié)點(diǎn)有且只有一個(gè)雙親節(jié)點(diǎn)。

節(jié)點(diǎn)表示記錄類型,連線表示記錄類型之間的聯(lián)系。記錄類型描述實(shí)體,包含若干個(gè)字段,字段描述實(shí)體的屬性。同一記錄類型中各字段不能同名,每個(gè)記錄類型可以定義一個(gè)排序字段,稱為碼字段,唯一表示一個(gè)記錄值。

(2)數(shù)據(jù)操縱與完整性約束:插入時(shí),無(wú)雙親節(jié)點(diǎn)就不能插入它的子女節(jié)點(diǎn)。刪除時(shí),刪除雙親節(jié)點(diǎn)值相應(yīng)的子女節(jié)點(diǎn)值也將被同時(shí)刪除。

(3)優(yōu)缺點(diǎn):優(yōu)點(diǎn)——簡(jiǎn)單清晰,查詢效率高,性能優(yōu)于關(guān)系數(shù)據(jù)庫(kù),不低于網(wǎng)狀數(shù)據(jù)庫(kù),提供良好的完整性支持。缺點(diǎn)——無(wú)法表示現(xiàn)實(shí)世界中非層次性的聯(lián)系(多對(duì)),對(duì)插入刪除操作的限制多,應(yīng)用程序編寫(xiě)比較復(fù)雜,查詢子女節(jié)點(diǎn)必須通過(guò)雙親節(jié)點(diǎn),結(jié)構(gòu)嚴(yán)密層次命令趨于程序化。

4.2.2 網(wǎng)狀模型

為了處理現(xiàn)實(shí)世界中的非層次關(guān)系,網(wǎng)狀數(shù)據(jù)庫(kù)采用網(wǎng)狀模型,典型代表是DBTG系統(tǒng),數(shù)據(jù)系統(tǒng)語(yǔ)言研究會(huì),20世紀(jì)70年代。

(1)數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)庫(kù)中滿足兩個(gè)條件的基本層次聯(lián)系集合稱為網(wǎng)狀模型:1)允許一個(gè)以上的節(jié)點(diǎn)無(wú)雙親;2)一個(gè)節(jié)點(diǎn)可以有多于一個(gè)的雙親。

(2)數(shù)據(jù)操縱與完整性約束:對(duì)記錄碼的約束,碼唯一表示記錄的數(shù)據(jù)項(xiàng)集合;雙親記錄和子女記錄之間是一對(duì)多的聯(lián)系;插入刪除約束。

(3)優(yōu)缺點(diǎn):優(yōu)點(diǎn)——更直接的描述現(xiàn)實(shí)世界,多對(duì)多的關(guān)聯(lián);良好的性能,存取效率較高。缺點(diǎn)——結(jié)構(gòu)復(fù)雜,不利于用戶掌握;DDL、DML復(fù)雜,用戶不易掌握與使用;用戶必須了解系統(tǒng)結(jié)構(gòu)的細(xì)節(jié),以便在訪問(wèn)數(shù)據(jù)是選擇存取路徑,這加重了應(yīng)用程序的編寫(xiě)負(fù)擔(dān)。

4.2.3 關(guān)系模型

關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)采用關(guān)系模型作為數(shù)據(jù)組織方式。IBM研究員E.F.Codd首次提出了數(shù)據(jù)庫(kù)系統(tǒng)的關(guān)系模型,1970,1981獲圖靈獎(jiǎng)。

(1)數(shù)據(jù)結(jié)構(gòu):關(guān)系模型由一組關(guān)系組成,關(guān)系的數(shù)據(jù)結(jié)構(gòu)是一張規(guī)范化的二維表。表中的一行是一個(gè)元組,表中的一列是一個(gè)屬性。表中唯一確定一個(gè)元組的的屬性是,屬性值的范圍稱為,元組中的一個(gè)屬性值稱為一個(gè)分量。關(guān)系的每個(gè)分量必須是一個(gè)不可分的數(shù)據(jù)項(xiàng),即不允許表中有表。

(2)數(shù)據(jù)操縱與完整性約束:數(shù)據(jù)操縱包括增刪改查,需滿足關(guān)系的完整性約束條件,包括三類,實(shí)體完整性,參照完整性和用戶定義的完整性。關(guān)系模型中的數(shù)據(jù)操作是集合操作,關(guān)系模型把存取路徑對(duì)用戶隱蔽,提高了數(shù)據(jù)的獨(dú)立性。

(3)優(yōu)缺點(diǎn):優(yōu)點(diǎn)——建立在嚴(yán)格的數(shù)學(xué)概念的基礎(chǔ)上,實(shí)體和實(shí)體之間的聯(lián)系均為關(guān)系,數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單,清晰,易懂,易用,存取路徑對(duì)用戶透明,數(shù)據(jù)獨(dú)立性高,安全保密性好,簡(jiǎn)化了程序員的工作。缺點(diǎn)——查詢效率不如格式化模型,需要對(duì)用戶的查詢請(qǐng)求進(jìn)行數(shù)學(xué)上的優(yōu)化,開(kāi)發(fā)數(shù)據(jù)庫(kù)管理系統(tǒng)的難度較大。

5. 數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu):從數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員角度看,數(shù)據(jù)庫(kù)系統(tǒng)通常采用三級(jí)模式結(jié)構(gòu)(數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)部的系統(tǒng)結(jié)構(gòu))。從數(shù)據(jù)庫(kù)最終用戶的角度看,數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)分為單用戶結(jié)構(gòu),主從式結(jié)構(gòu),分布式結(jié)構(gòu),客戶-服務(wù)器,瀏覽器-應(yīng)用服務(wù)器/數(shù)據(jù)庫(kù)服務(wù)器多層結(jié)構(gòu)等(數(shù)據(jù)庫(kù)系統(tǒng)外部的體系結(jié)構(gòu))。

5.1 數(shù)據(jù)庫(kù)系統(tǒng)模式的概念

(1)型和值:型是指對(duì)某一類數(shù)據(jù)的結(jié)構(gòu)和屬性的說(shuō)明,值是型的一個(gè)具體賦值。

(2)模式和實(shí)例:模式是對(duì)數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,僅僅描述型,不涉及具體的值,模式的一個(gè)具體的值稱為一個(gè)實(shí)例。模式相對(duì)穩(wěn)定,實(shí)例相對(duì)變動(dòng)。模式反映數(shù)據(jù)的結(jié)構(gòu)和聯(lián)系,實(shí)例反映數(shù)據(jù)庫(kù)某一時(shí)刻的狀態(tài)。

5.2 數(shù)據(jù)庫(kù)系統(tǒng)的三級(jí)模式結(jié)構(gòu)

數(shù)據(jù)庫(kù)系統(tǒng)的三級(jí)模式結(jié)構(gòu)是指數(shù)據(jù)庫(kù)系統(tǒng)是由外模式、模式和內(nèi)模式三級(jí)結(jié)構(gòu)。

(1)模式:也稱邏輯模式,是數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是所有用戶的公共數(shù)據(jù)視圖,是數(shù)據(jù)庫(kù)系統(tǒng)模式結(jié)構(gòu)的中間層。一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)模式。數(shù)據(jù)庫(kù)模式以某一種數(shù)據(jù)模型為基礎(chǔ),將所有用戶的需求結(jié)合成一個(gè)邏輯整體。數(shù)據(jù)庫(kù)管理系統(tǒng)提供模式數(shù)據(jù)定義語(yǔ)言(模式DDL)來(lái)嚴(yán)格定義模式。

(2)外模式:也稱子模式或用戶模式,是數(shù)據(jù)用戶看到和使用的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫(kù)用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。外模式通常是模式的子集,一個(gè)數(shù)據(jù)庫(kù)可以有多個(gè)外模式。對(duì)于模式中同一數(shù)據(jù),不同用戶在外模式中結(jié)構(gòu)、類型、長(zhǎng)度、保密級(jí)別等都可以不同。一個(gè)外模式可以被一個(gè)用戶的多個(gè)應(yīng)用系統(tǒng)使用,但一個(gè)應(yīng)用程序只能使用一個(gè)外模式。外模式是保證數(shù)據(jù)庫(kù)安全性的一個(gè)有力措施。數(shù)據(jù)庫(kù)管理系統(tǒng)提供外模式數(shù)據(jù)定義語(yǔ)言(外模式DDL)來(lái)嚴(yán)格定義外模式。

(3)內(nèi)模式:也稱存儲(chǔ)模式,一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)內(nèi)模式,是數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)部的組織方式。例如,記錄的存儲(chǔ)方式是堆存儲(chǔ),還是升降序存儲(chǔ),還是聚簇存儲(chǔ),索引按照什么方式組織,是B+樹(shù)還是hash索引,數(shù)據(jù)是否壓縮,是否加密等。

5.3 數(shù)據(jù)庫(kù)的二級(jí)映像功能與數(shù)據(jù)獨(dú)立性

為了能夠在系統(tǒng)內(nèi)部實(shí)現(xiàn)這三個(gè)抽象層次的聯(lián)系和轉(zhuǎn)換,數(shù)據(jù)庫(kù)管理系統(tǒng)在這三級(jí)模式之間提供兩層映像:外模式/模式映像和模式/內(nèi)模式映像。

(1)外模式/模式映像:全局邏輯結(jié)構(gòu)到局部邏輯結(jié)構(gòu)的映像。同一個(gè)模式對(duì)應(yīng)任意多個(gè)外模式,對(duì)每一個(gè)外模式,數(shù)據(jù)庫(kù)系統(tǒng)都有一個(gè)外模式/模式映像,映像定義在外模式的描述中。模式改變時(shí)(增加新的關(guān)系、屬性、改變屬性和數(shù)據(jù)類型等),由數(shù)據(jù)庫(kù)管理員對(duì)各個(gè)外模式/模式的映像作相應(yīng)改變,可以使外模式保持不變。應(yīng)用程序依據(jù)數(shù)據(jù)的外模式編寫(xiě),從而應(yīng)用程序不必修改,保證了數(shù)據(jù)與程序的邏輯獨(dú)立性。

(2)模式/內(nèi)模式映像:該映像是唯一的,它定義了數(shù)據(jù)全局邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu)之間的對(duì)應(yīng)關(guān)系。映像定義包含在模式描述中,存儲(chǔ)結(jié)構(gòu)改變時(shí),數(shù)據(jù)庫(kù)管理員對(duì)模式/內(nèi)模式映像作相應(yīng)改變,可以使模式保持不變,從而應(yīng)用程序也不必改變,保證了數(shù)據(jù)與程序的物理獨(dú)立性

數(shù)據(jù)庫(kù)模式即全局邏輯結(jié)構(gòu)是數(shù)據(jù)庫(kù)的中心與關(guān)鍵,它獨(dú)立于數(shù)據(jù)庫(kù)的其他層次。內(nèi)模式依賴于模式,但獨(dú)立于數(shù)據(jù)的用戶視圖(外模式),也獨(dú)立于具體的存儲(chǔ)設(shè)備。外模式面向具體的應(yīng)用程序,定義在邏輯模式之上,但獨(dú)立于存儲(chǔ)模式和存儲(chǔ)設(shè)備,應(yīng)具有可擴(kuò)充性。

數(shù)據(jù)與程序之間的獨(dú)立性使得數(shù)據(jù)的定義和描述可以從應(yīng)用程序中分離出去,數(shù)據(jù)的存取?由數(shù)據(jù)庫(kù)管理系統(tǒng)管理,簡(jiǎn)化了應(yīng)用程序的編制,減少了應(yīng)用程序的維護(hù)與修改。

6. 數(shù)據(jù)庫(kù)系統(tǒng)的組成

數(shù)據(jù)庫(kù)系統(tǒng)一般由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)(及其應(yīng)用開(kāi)發(fā)工具)、應(yīng)用程序和數(shù)據(jù)庫(kù)管理員構(gòu)成。

(1)硬件平臺(tái)及數(shù)據(jù)庫(kù):數(shù)據(jù)量很大,數(shù)據(jù)庫(kù)管理系統(tǒng)豐富的功能使其自身規(guī)模很大,因此需要1)有足夠大的內(nèi)存;2)足夠大的磁盤(pán)或磁盤(pán)陣列等設(shè)備存放數(shù)據(jù)庫(kù);3)有較高的通道能力,以提高數(shù)據(jù)傳送率。

(2)軟件:數(shù)據(jù)庫(kù)系統(tǒng)的軟件主要包括數(shù)據(jù)庫(kù)管理系統(tǒng)、支持?jǐn)?shù)據(jù)庫(kù)管理系統(tǒng)運(yùn)行的操作系統(tǒng)、具有與數(shù)據(jù)庫(kù)接口的高級(jí)語(yǔ)言及其編譯系統(tǒng)、以數(shù)據(jù)庫(kù)管理系統(tǒng)為核心的應(yīng)用開(kāi)發(fā)工具、為特定應(yīng)用環(huán)境開(kāi)發(fā)的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)。

(3)人員:開(kāi)發(fā)、管理和使用數(shù)據(jù)庫(kù)系統(tǒng)的人員主要包括數(shù)據(jù)庫(kù)管理員、系統(tǒng)分析員和數(shù)據(jù)庫(kù)設(shè)計(jì)人員、應(yīng)用程序員和最終用戶。不同的人員涉及不同的數(shù)據(jù)抽象級(jí)別,具有不同的數(shù)據(jù)視圖。

數(shù)據(jù)庫(kù)管理員監(jiān)督和管理數(shù)據(jù)庫(kù)的兩類共享資源,包括數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)軟件,決定數(shù)據(jù)庫(kù)中的信息內(nèi)容和結(jié)構(gòu),決定數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)和存取策略,定義數(shù)據(jù)的安全性要求和完整性約束條件,監(jiān)控?cái)?shù)據(jù)庫(kù)的使用和運(yùn)行,數(shù)據(jù)庫(kù)的改進(jìn)和重組、重構(gòu)。系統(tǒng)分析員負(fù)責(zé)應(yīng)用系統(tǒng)的需求分析和規(guī)范說(shuō)明,確定系統(tǒng)的硬件軟件配置,參與數(shù)據(jù)庫(kù)系統(tǒng)的概要設(shè)計(jì)。數(shù)據(jù)庫(kù)設(shè)計(jì)人員負(fù)責(zé)數(shù)據(jù)庫(kù)中數(shù)據(jù)的確定及數(shù)據(jù)庫(kù)各級(jí)模式的設(shè)計(jì)。應(yīng)用程序員負(fù)責(zé)設(shè)計(jì)和編寫(xiě)應(yīng)用系統(tǒng)的程序模塊,并進(jìn)行調(diào)試和安裝。用戶(指最終用戶)通過(guò)應(yīng)用系統(tǒng)的用戶接口使用數(shù)據(jù)庫(kù),常用的接口方式有瀏覽器、菜單驅(qū)動(dòng)、表格操作、圖形顯示、報(bào)表書(shū)寫(xiě)等。最終用戶分為偶然用戶、簡(jiǎn)單用戶和復(fù)雜用戶。

1.2 數(shù)據(jù)庫(kù)安全性

數(shù)據(jù)庫(kù)的特點(diǎn)之一是由數(shù)據(jù)庫(kù)管理系統(tǒng)提供統(tǒng)一的數(shù)據(jù)保護(hù)功能來(lái)保證數(shù)據(jù)的安全可靠和正確有效。數(shù)據(jù)庫(kù)的數(shù)據(jù)保護(hù)主要包括數(shù)據(jù)的安全性和完整性。本章主要介紹數(shù)據(jù)庫(kù)的安全性。

1. 數(shù)據(jù)庫(kù)安全性概述

數(shù)據(jù)的安全性是指保護(hù)數(shù)據(jù)庫(kù)以防止不合法使用所造成的數(shù)據(jù)泄露、更改或破壞。

(1)數(shù)據(jù)庫(kù)的不安全因素:非授權(quán)用戶對(duì)數(shù)據(jù)庫(kù)的惡意存取和破壞(黑客),DBMS提供的安全措施包括用戶身份鑒別、存取控制和視圖等技術(shù);數(shù)據(jù)庫(kù)中重要或敏感的數(shù)據(jù)被泄漏,DBMS提供的主要技術(shù)有強(qiáng)制存取控制、數(shù)據(jù)加密存儲(chǔ)和加密傳輸?shù)?,?duì)安全性要求較高的部門提供審計(jì)功能,分析審計(jì)日志可以對(duì)潛在啊的威脅提前采取措施加以防范,對(duì)非授權(quán)用戶的入侵行為及信息破壞情況進(jìn)行跟蹤;安全環(huán)境的脆弱性,數(shù)據(jù)庫(kù)的安全性與計(jì)算及系統(tǒng)的安全性緊密相關(guān),包括硬件、操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等的安全性,因此發(fā)展建立了一套可信計(jì)算機(jī)系統(tǒng)的概念和標(biāo)準(zhǔn),即安全標(biāo)準(zhǔn),用以規(guī)范和指導(dǎo)安全生產(chǎn)。

(2)安全標(biāo)準(zhǔn):計(jì)算機(jī)以及信息安全技術(shù)方面有一系列的安全標(biāo)準(zhǔn),最有影響的當(dāng)推TCSEC(1985,美國(guó)國(guó)防部DoD)和CC(通用準(zhǔn)則,1999被ISO采用國(guó)際標(biāo)準(zhǔn),2001被我國(guó)采用為國(guó)家標(biāo)準(zhǔn))。

? ? ? ? TCSEC:又稱桔皮書(shū),1991,美國(guó)國(guó)家計(jì)算機(jī)安全中心(NCSC)頒布TCSEC/TDI,即紫皮書(shū),將TCSEC擴(kuò)展到數(shù)據(jù)庫(kù)管理系統(tǒng)。從四個(gè)方面描述安全性級(jí)別劃分的指標(biāo),即安全策略、責(zé)任、保證和文檔。根據(jù)計(jì)算機(jī)系統(tǒng)對(duì)各項(xiàng)指標(biāo)的支持情況,TCSEC/TDI將系統(tǒng)劃分為4組7個(gè)等級(jí),依次是D、C(C1,C2)、B(B1,B2,B3)、A(A1),按系統(tǒng)的可信程度逐漸增高。D級(jí):最低級(jí)別。具備基本功能,幾乎無(wú)專門的安全性保護(hù)機(jī)制。DOS是操作系統(tǒng)安全標(biāo)準(zhǔn)為D級(jí)的典型例子。 C1級(jí):自主安全保護(hù)。實(shí)現(xiàn)用戶與數(shù)據(jù)的分離,進(jìn)行自主存取控制(DAC),保護(hù)或限制用戶權(quán)限的傳播。C2級(jí):安全產(chǎn)品的最低檔,提供受控的存取保護(hù)。個(gè)人身份注冊(cè),實(shí)施審計(jì)和資源隔離。例如Win2000和Oracle7。B1級(jí):標(biāo)記安全保護(hù)。對(duì)系統(tǒng)數(shù)據(jù)加以標(biāo)記,對(duì)標(biāo)記的主體和客體進(jìn)行強(qiáng)制存取控制(MAC)和審計(jì)。該級(jí)別的產(chǎn)品被認(rèn)為是真正意義上的安全產(chǎn)品。B2級(jí):結(jié)構(gòu)化保護(hù)。對(duì)系統(tǒng)內(nèi)的所有主體和客體實(shí)施DAC和MAC。B3級(jí):安全域。該級(jí)的TCB(Trusted Computing Base)必須滿足訪問(wèn)監(jiān)控器的要求,審計(jì)跟蹤能力更強(qiáng),提供系統(tǒng)恢復(fù)過(guò)程。A1級(jí):驗(yàn)證設(shè)計(jì)。提供B3級(jí)保護(hù)的同時(shí)給出系統(tǒng)的形式化設(shè)計(jì)說(shuō)明和驗(yàn)證。

? ? ? ? CC:信息技術(shù)安全性的結(jié)構(gòu),即把對(duì)信息產(chǎn)品的安全要求分為安全功能要求安全保證要求。安全功能要求用以規(guī)范產(chǎn)品和系統(tǒng)的安全行為,安全保證要求解決如何正確有效地實(shí)施這些功能。有7級(jí)評(píng)估保證級(jí)

2. 數(shù)據(jù)庫(kù)安全性控制

數(shù)據(jù)庫(kù)的安全性控制主要包括用戶身份鑒別、多層存取控制、審計(jì)、視圖和數(shù)據(jù)加密

2.1 用戶身份鑒別:是DBMS提供的最外層安全保護(hù)措施,用戶標(biāo)識(shí)(用戶名和標(biāo)識(shí)號(hào))——系統(tǒng)核對(duì)——權(quán)限使用。常見(jiàn)的用戶身份鑒別方法有靜態(tài)口令鑒別(即密碼,存儲(chǔ)和傳輸時(shí)加密)、動(dòng)態(tài)口令鑒別(短信密碼和動(dòng)態(tài)令牌)、生物特征鑒別(生物特征唯一且穩(wěn)定,指紋、虹膜和掌紋)和智能卡鑒別(不可復(fù)制,硬件加密功能,存在安全隱患,個(gè)人身份識(shí)別碼PIN和智能卡相結(jié)合)。

2.2 存取控制:確保只授權(quán)給有資格的用戶訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限(用戶對(duì)某一數(shù)據(jù)對(duì)象的操作權(quán)力,令所有未授權(quán)的人員無(wú)法接近數(shù)據(jù)。存取控制機(jī)制主要包括定義用戶權(quán)限合法權(quán)限檢查。DBMS需提供適當(dāng)?shù)恼Z(yǔ)言來(lái)定義用戶權(quán)限,這些定義經(jīng)過(guò)編譯存儲(chǔ)在數(shù)據(jù)字典中,被稱作安全規(guī)則或授權(quán)規(guī)則。用戶發(fā)出存取數(shù)據(jù)庫(kù)的操作請(qǐng)求(包括操作類型、操作對(duì)象和操作用戶等信息)后,DBMS查找數(shù)據(jù)字典,根據(jù)安全規(guī)則進(jìn)行合法權(quán)限檢查,超出權(quán)限則拒絕。C2級(jí)提供自主存取控制(DAC),B1級(jí)提供強(qiáng)制存取控制(MAC)。

(1)自主存取控制方法:同一用戶對(duì)不同對(duì)象權(quán)限不同,不同用戶對(duì)同一對(duì)象權(quán)限也不同。用戶可將其權(quán)限轉(zhuǎn)授其他用戶。大型DBMS都支持自主存取控制,SQL標(biāo)準(zhǔn)通過(guò)GRANT語(yǔ)句REVOKE語(yǔ)句來(lái)實(shí)現(xiàn)。用戶權(quán)限由數(shù)據(jù)庫(kù)對(duì)象操作類型兩個(gè)要素組成。定義存取權(quán)限(授權(quán))是定義用戶可以在哪些數(shù)據(jù)庫(kù)對(duì)象上進(jìn)行哪些類型的操作。非關(guān)系系統(tǒng)中,存取控制的數(shù)據(jù)庫(kù)對(duì)象僅限于數(shù)據(jù)本身,關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中,存取控制的數(shù)據(jù)對(duì)象包括數(shù)據(jù)本身(基本表中的數(shù)據(jù)、屬性列上的數(shù)據(jù))和數(shù)據(jù)庫(kù)模式(數(shù)據(jù)庫(kù)、基本表、視圖和索引等)。關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中的操作類型包括對(duì)數(shù)據(jù)本身的增刪改查和對(duì)數(shù)據(jù)庫(kù)模式的創(chuàng)建和更新。

? ? ? 權(quán)限的授予與收回:SQL中GRANT語(yǔ)句向用戶授予權(quán)限,REVOKE語(yǔ)句收回已經(jīng)授予用戶的權(quán)限。GRANT 權(quán)限 ON 對(duì)象類型 對(duì)象名 TO 用戶 WITH GRANT OPTION;意為對(duì)指定操作對(duì)象的指定操作權(quán)限授予指定的用戶。發(fā)出者可以是數(shù)據(jù)庫(kù)管理員、數(shù)據(jù)庫(kù)對(duì)象創(chuàng)建者和已經(jīng)擁有該權(quán)限的用戶。接受者可以是一個(gè)或多個(gè)具體的用戶,也可以是public全體用戶。如果指定了WITH GRANT OPTION子句,則獲得該權(quán)限的用戶還可以把該權(quán)限授予其他用戶,否則不可。REVOKE 權(quán)限 ON 對(duì)象類型 對(duì)象名 FROM 用戶 CASCADE(或RESTRICT);意為收回指定用戶對(duì)指定操作的指定的權(quán)限。CASCADE為級(jí)聯(lián),即對(duì)該用戶授予其他用戶的該項(xiàng)權(quán)限一并收回。用戶可以“自主”地決定將數(shù)據(jù)的存取權(quán)限授予何人、決定是否也將“授權(quán)”的權(quán)限授予別人,因此稱這樣的存取控制是自主存取控制。

? ? ? 創(chuàng)建數(shù)據(jù)庫(kù)模式的權(quán)限:創(chuàng)建用戶語(yǔ)句 CREATE USER 用戶名 權(quán)限;,三種權(quán)限是CONNECT權(quán)限、RESOURCE權(quán)限和DBA權(quán)限。CONNECT是默認(rèn)權(quán)限,用戶只能登錄數(shù)據(jù)庫(kù);RESOURCE權(quán)限允許用戶創(chuàng)建基本表和視圖,不能創(chuàng)建模式和用戶;擁有DBA權(quán)限的用戶是系統(tǒng)中的超級(jí)用戶,可以創(chuàng)建新的用戶、模式、基本表和視圖等,擁有對(duì)所有數(shù)據(jù)庫(kù)對(duì)象的存取權(quán)限,還可授予一般用戶。

? ? ? 數(shù)據(jù)庫(kù)角色:是被命名的一組與數(shù)據(jù)庫(kù)操作相關(guān)的權(quán)限,是權(quán)限的集合。存在的意義是簡(jiǎn)化授權(quán)的過(guò)程。創(chuàng)建角色的SQL語(yǔ)句 CREATE ROLE 角色名;用GRANT語(yǔ)句給角色授權(quán)和將角色授予用戶(若授權(quán)時(shí)使用WITH ADMIN OPTION則獲得權(quán)限的角色或用戶可以把該權(quán)限授予其他角色),用REVOKE語(yǔ)句收回授權(quán)角色的權(quán)限。

(2)強(qiáng)制存取控制方法:數(shù)據(jù)庫(kù)對(duì)象被標(biāo)以一定的密級(jí),每個(gè)用戶被授予一個(gè)級(jí)別的許可證。對(duì)于任意一個(gè)對(duì)象,只有具有合法許可證的用戶才可以存取。(實(shí)質(zhì)上是對(duì)數(shù)據(jù)的存取權(quán)限數(shù)據(jù)本身都進(jìn)行安全控制)在強(qiáng)制存取控制中,數(shù)據(jù)庫(kù)管理系統(tǒng)所管理的全部實(shí)體被分為主體客體兩大類。主體包括數(shù)據(jù)庫(kù)中的實(shí)際用戶和用戶進(jìn)程,客體包括文件、基本表、索引、視圖等。DBMS給主體和客體的每個(gè)實(shí)例指派一個(gè)敏感度標(biāo)記,分為絕密(TS)、機(jī)密(S)、可信(C)、公開(kāi)(P)等級(jí)別。主體的敏感度標(biāo)記稱為許可證級(jí)別,客體的敏感度標(biāo)記稱為密級(jí)。強(qiáng)制存取控制機(jī)制通過(guò)對(duì)比主體的敏感度標(biāo)記和客體的敏感度標(biāo)記,最終確定主體是否能夠存取客體。

? ? ? 存取規(guī)則:1)許可證級(jí)別>=密級(jí)時(shí),主體可讀取客體;2)許可證級(jí)別<=密級(jí)時(shí),主體可寫(xiě)客體。(規(guī)則2的解釋:用戶可以為寫(xiě)入的數(shù)據(jù)對(duì)象賦予高于自己的許可證級(jí)別的密級(jí),不可低于,一旦寫(xiě)入,該用戶自己不能讀取,否則可以把數(shù)據(jù)惡意降為低密級(jí),從而造成泄漏)

(3)DAC+MAC安全檢查:SQL語(yǔ)法分析&語(yǔ)義檢查——>DAC檢查——>MAC檢查——>繼續(xù)語(yǔ)義檢查

3. 視圖機(jī)制

視圖是用來(lái)對(duì)用戶的權(quán)限進(jìn)行限制的機(jī)制,間接地實(shí)現(xiàn)支持存取謂詞的用戶權(quán)限定義,實(shí)現(xiàn)對(duì)部分?jǐn)?shù)據(jù)的存取權(quán)限。例如,某用戶只能檢索某個(gè)系學(xué)生的信息(對(duì)部分權(quán)限部分?jǐn)?shù)據(jù)的限制)。CREATE VIEW 視圖名 AS SELECT* FROM Student WHERE Sdept=‘CS’;GRANT SELECT ON 視圖名 TO 用戶名;ALL PRIVILEGES 表示所有權(quán)限。

屬性層面的保護(hù)機(jī)制,更靈活的數(shù)據(jù)保護(hù)。

4. 審計(jì)

審計(jì)功能是DBMS達(dá)到C2以上安全級(jí)別必不可少的一項(xiàng)指標(biāo)。審計(jì)功能把用戶對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來(lái)放入審計(jì)日志中。審計(jì)員利用審計(jì)日志監(jiān)控?cái)?shù)據(jù)庫(kù)中的各種行為,重現(xiàn)導(dǎo)致數(shù)據(jù)庫(kù)現(xiàn)有狀況的一系列事件,找出非法存取數(shù)據(jù)的人、時(shí)間和內(nèi)容等,對(duì)潛在的威脅提前采取措施加以防范。;

耗費(fèi)時(shí)間和空間?DBMS允許數(shù)據(jù)庫(kù)管理員根據(jù)具體應(yīng)用對(duì)安全性的要求靈活地打開(kāi)或關(guān)閉審計(jì)功能。

(1)審計(jì)事件:包括四類,服務(wù)器事件、系統(tǒng)權(quán)限、語(yǔ)句事件和模式對(duì)象事件。服務(wù)器事件包括數(shù)據(jù)庫(kù)服務(wù)器的啟動(dòng)、停止、配置文件的重新加載。系統(tǒng)權(quán)限對(duì)系統(tǒng)擁有的結(jié)構(gòu)或模式對(duì)象進(jìn)行操作的審計(jì)。語(yǔ)句事件是對(duì)SQL語(yǔ)言,如DDL(Data Definition Language)、DML(Data Manipulation Language,數(shù)據(jù)操縱語(yǔ)言,對(duì)數(shù)據(jù)的增刪改查)、DQL(Data Query Language)及DCL(Data Control Language)語(yǔ)句的審計(jì)。模式對(duì)象事件對(duì)特定模式對(duì)象上進(jìn)行的SELECT或DML操作的審計(jì),模式對(duì)象包括表、視圖、存儲(chǔ)過(guò)程、函數(shù)等。

(2)審計(jì)功能:審計(jì)查閱方式(基本的、可選的、有限的等)、審計(jì)規(guī)則(DB初始化時(shí)設(shè)定)、審計(jì)分析和報(bào)表功能、審計(jì)日志管理(防止審計(jì)員誤刪,先轉(zhuǎn)儲(chǔ)后刪除,轉(zhuǎn)儲(chǔ)的審計(jì)記錄文件提供完整性和保密性保護(hù),只允許審計(jì)員查閱,不允許任何用戶修改)、DBMS提供查詢審計(jì)設(shè)置及審計(jì)記錄信息的專門時(shí)圖。

(3)設(shè)置和取消審計(jì)功能的語(yǔ)句:AUDIT語(yǔ)句和NOAUDIT語(yǔ)句。審計(jì)分為用戶級(jí)審計(jì)系統(tǒng)級(jí)審計(jì)。用戶級(jí)審計(jì)是指由任何用戶設(shè)置的,針對(duì)用戶自己創(chuàng)建的數(shù)據(jù)庫(kù)表或視圖的審計(jì),記錄所有用戶對(duì)這些表或視圖的訪問(wèn)及操作。系統(tǒng)級(jí)審計(jì)只能由數(shù)據(jù)庫(kù)管理員設(shè)置,用以檢測(cè)登錄要求、授權(quán)和收回操作及其他數(shù)據(jù)庫(kù)級(jí)權(quán)限下的操作。AUDIT 操作 ON 表或視圖;NOAUDIT 操作 ON 表或視圖;審計(jì)設(shè)置與審計(jì)日志一般都存儲(chǔ)在數(shù)據(jù)字典中,在系統(tǒng)表SYS_AUDITTRAIL中查看審計(jì)信息。審計(jì)機(jī)制相當(dāng)于事后檢查,可以約束用戶可能的惡意操作。

5. 數(shù)據(jù)加密

數(shù)據(jù)加密時(shí)防止數(shù)據(jù)庫(kù)數(shù)據(jù)在存儲(chǔ)和傳輸中失密的有效手段,基本思想是將原始數(shù)據(jù)(明文)——>密文(不可直接識(shí)別),不知道解密算法的人無(wú)法獲知數(shù)據(jù)內(nèi)容。數(shù)據(jù)加密主要包括存儲(chǔ)加密和傳輸加密。

(1)存儲(chǔ)加密:包括透明和非透明兩種存儲(chǔ)加密方式。透明存儲(chǔ)加密是內(nèi)核級(jí)加密保護(hù)方式,對(duì)用戶透明,是數(shù)據(jù)在寫(xiě)到磁盤(pán)上時(shí)對(duì)數(shù)據(jù)的加密,應(yīng)用程序不需要修改,只需要?jiǎng)?chuàng)建表語(yǔ)句中說(shuō)明加密的字段,性能好,安全完備性高。非透明的存儲(chǔ)加密時(shí)通過(guò)多個(gè)加密函數(shù)實(shí)現(xiàn)的。

(2)傳輸加密:為保證數(shù)據(jù)庫(kù)用戶與服務(wù)器之間的安全數(shù)據(jù)交換,DBMS提供傳輸加密功能。傳輸信息由報(bào)頭和報(bào)文組成,報(bào)頭是路由選擇信息,報(bào)文是數(shù)據(jù)信息。常用的傳輸加密方式有鏈路加密和端到端加密。鏈路加密是對(duì)數(shù)據(jù)在鏈路層進(jìn)行加密,對(duì)報(bào)頭和報(bào)文均加密。端到端加密對(duì)傳輸數(shù)據(jù)在發(fā)送端加密,接收端解密,只加密報(bào)文,不加密報(bào)頭,中間節(jié)點(diǎn)不需要密碼設(shè)備,但易被非法監(jiān)聽(tīng)者發(fā)現(xiàn)并獲取敏感信息。

? ? ? 基于安全套接層協(xié)議(Security Socket Layer,SSL)的數(shù)據(jù)庫(kù)管理系統(tǒng)可信傳輸方案,采用端到端的傳輸加密方式,對(duì)應(yīng)用程序透明。實(shí)現(xiàn)思路包括:1)確認(rèn)通信雙方端點(diǎn)的可靠性。2)協(xié)商加密算法和密鑰。3)可信數(shù)據(jù)傳輸。

評(píng)價(jià):數(shù)據(jù)庫(kù)加密增加了查詢處理的復(fù)雜性,查詢效率會(huì)受到影響,加密數(shù)據(jù)的密鑰管理和數(shù)據(jù)加密對(duì)應(yīng)用程序的影響也是數(shù)據(jù)加密過(guò)程中需要考慮的問(wèn)題。

6. 其他安全性保護(hù)

本部分介紹除DAC和MAC外的其他三種安全性保護(hù)機(jī)制:推理控制、隱蔽信道和數(shù)據(jù)隱私保護(hù)。

(1)推理控制:用來(lái)避免用戶利用其能夠訪問(wèn)的數(shù)據(jù)推知更高密級(jí)的數(shù)據(jù),例如利用列的函數(shù)依賴關(guān)系,用戶從低安全等級(jí)的信息推導(dǎo)出無(wú)權(quán)訪問(wèn)的高安全等級(jí)信息,進(jìn)而導(dǎo)致信息泄露。常用的方法有基于函數(shù)依賴的推理控制和基于敏感關(guān)聯(lián)的推理控制。

(2)隱蔽通道:解決利用未被強(qiáng)制存取控制的SQL執(zhí)行后的反饋結(jié)果信息進(jìn)行間接的信息傳遞。例如,表的碼值已存在時(shí),插入時(shí)會(huì)報(bào)錯(cuò),若插入值為高安全等級(jí)用戶寫(xiě)入的數(shù)據(jù),則低安全用戶插入時(shí)報(bào)錯(cuò),則導(dǎo)致信息的泄露。

(3)數(shù)據(jù)隱私:是控制不愿被他人知道或他人不便知道的個(gè)人數(shù)據(jù)的能力。涉及數(shù)據(jù)管理中的數(shù)據(jù)收集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理和數(shù)據(jù)發(fā)布等各個(gè)階段。

1.3 數(shù)據(jù)庫(kù)完整性

數(shù)據(jù)庫(kù)的完整性是指數(shù)據(jù)的正確性和相容性。數(shù)據(jù)的正確性是指數(shù)據(jù)是符合現(xiàn)實(shí)世界語(yǔ)義、反映當(dāng)前實(shí)際狀況的;數(shù)據(jù)的相容性是指數(shù)據(jù)庫(kù)同一對(duì)象在不同關(guān)系表中的數(shù)據(jù)是符合邏輯的。數(shù)據(jù)的完整性是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),防止數(shù)據(jù)庫(kù)中存在不正確的數(shù)據(jù)。防的是不合語(yǔ)義的、不正確的數(shù)據(jù)。數(shù)據(jù)的安全性是保護(hù)數(shù)據(jù)庫(kù)防止惡意破壞和非法存取。防的是非法用戶和非法操作及非法存取。

為了維護(hù)數(shù)據(jù)庫(kù)的完整性,DBMS須實(shí)現(xiàn)以下功能:1)提供定義完整性約束條件的機(jī)制。完整性約束條件=完整性規(guī)則=數(shù)據(jù)必須滿足的語(yǔ)義約束條件。SQL標(biāo)準(zhǔn)適用了一系列概念來(lái)描述完整性,包括關(guān)系模型的實(shí)體完整性、參照完整性和用戶定義完整性。2)提供完整性檢查的方法。檢查是否滿足完整性約束條件。一般在增刪改操作和事務(wù)提交時(shí)進(jìn)行檢查。3)進(jìn)行違約處理。拒絕執(zhí)行該操作(NO ACTION)或級(jí)聯(lián)執(zhí)行其他操作(CASCADE)。

關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)使得完整性控制成為其核心支持的功能,從而為所有用戶和應(yīng)用提供一致的數(shù)據(jù)庫(kù)完整性。

1. 實(shí)體完整性:用來(lái)保證數(shù)據(jù)的唯一性。

(1)定義實(shí)體完整性:CREATE TABLE中用PRIMARY KEY定義,定義碼。單屬性碼,定義為列級(jí)約束條件或表級(jí)約束條件。多屬性碼定義為表級(jí)約束條件。列級(jí)約束條件跟在屬性后面定義,例如Sno CHAR(9) PRIMARY KEY;表級(jí)約束條件在所有屬性定義結(jié)束后單獨(dú)定義,例如PRIMARY KEY(Sno,Cno)。

(2)實(shí)體完整性檢查和違約處理:當(dāng)插入記錄對(duì)主碼列進(jìn)行更新操作時(shí),自動(dòng)進(jìn)行實(shí)體完整性檢查。包括檢查主碼是否唯一,不唯一拒絕操作,檢查主碼的各個(gè)屬性是否為空,一個(gè)為空拒絕操作。

? ? ? ? 唯一性檢查的方法:全表掃描和對(duì)主碼建立索引。全表掃描非常耗時(shí)。對(duì)主碼建立的索引,例如B+樹(shù),可以大大提高效率。

2. 參照完整性:用來(lái)保證數(shù)據(jù)庫(kù)各表之間的一致性。

(1)定義參照完整性:CREATE TABLE中用FOREIGN KEY定義,定義外碼,用REFERENCES短語(yǔ)指明外碼參照哪些表的主碼。例如,F(xiàn)OREIGN KEY (Sno) REFERENCES Student(Sno)。

(2)參照完整性檢查和違約處理:對(duì)被參照表和參照表進(jìn)行增刪改操作時(shí)進(jìn)行檢查,確保兩個(gè)表的相容性。不一致發(fā)生時(shí),處理策略有拒絕執(zhí)行、級(jí)聯(lián)操作(當(dāng)刪除或修改被參照表的一個(gè)元組導(dǎo)致與參照表的不一致時(shí),刪除或修改參照表中的所有導(dǎo)致不一致的元組)、設(shè)置為空值。關(guān)于外碼能否為空值的問(wèn)題:若表a的外碼為表a的主碼時(shí),必須定義為非空,否則可以為空值。對(duì)不同的操作采用不同的違約處理,例如,F(xiàn)OREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE NO ACTION ON UPDATE CASCADE

3. 用戶定義的完整性:針對(duì)某一具體應(yīng)用的數(shù)據(jù)必須滿足的語(yǔ)義要求。

(1)屬性上的約束條件:(定義)創(chuàng)建表定義屬性時(shí),可以根據(jù)要求定義對(duì)屬性的約束條件,即屬性值限制,包括列值非空(Sno CHAR(9) NOT NULL)、列值唯一(Dname CHAR(9) UNIQUE)、檢查列值是否滿足一個(gè)條件表達(dá)式(Ssex CHAR(2) CHECK (Ssex IN('男','女')))。(違約處理)插入元組或修改屬性值時(shí)檢查,不滿足則拒絕執(zhí)行操作。

(2)元組上的約束條件:(定義)創(chuàng)建表時(shí)用CHECK短語(yǔ)定義元組上的約束條件,即元組級(jí)的限制。可以設(shè)置不同屬性之間的取值的相互約束條件。例,CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')意思為性別為女性的元組能通過(guò)檢查,若性別是男性時(shí),需要檢查名字不能以Ms.開(kāi)頭。(違約處理)插入元組或修改屬性值時(shí)檢查,不滿足則拒絕執(zhí)行操作。

4. 其它完整性控制機(jī)制:包括完整性約束條件的命名與修改,域的完整性限制,斷言和觸發(fā)器。

(1)完整性約束命名子句:(功能)通過(guò)對(duì)完整性約束條件命名,可靈活地增加、刪除一個(gè)完整性約束條件。(命名語(yǔ)句)CONSTRAINT <完整性約束條件名><完整性約束條件>(e.g. CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999) 即將“學(xué)號(hào)在90000~99999之間”的約束條件命名為C1),完整性約束條件包括NOT NULL,UNIQUE,PRIMARY KEY,F(xiàn)OREIGN KEY,CHECK短語(yǔ)等。(刪除約束條件)ALTER TABLE STUDENT? ? DROP CONSTRAINT C1;(添加約束條件)ALTER TABLE STUDENT? ? ADD CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999) ; 若修改某個(gè)約束條件,則可先將其刪除后添加一個(gè)新的約束條件。

(2)域中的完整性限制:(域的定義)域是一組具有相同數(shù)據(jù)類型的值的集合,通過(guò)CREATE DOMAIN語(yǔ)句建立一個(gè)域。(域的功能)域可以用來(lái)定義屬性,通過(guò)對(duì)域的完整性約束實(shí)現(xiàn)對(duì)屬性的完整性約束,這樣的優(yōu)點(diǎn)是,數(shù)據(jù)庫(kù)中不同的屬性可以來(lái)自同一個(gè)域,當(dāng)域上的完整性約束條件改變時(shí)只需修改域的定義即可,不必一一修改域上的各個(gè)屬性。(e.g. 建立一個(gè)性別域,并聲明性別域的取值范圍:CREATE DOMAIN GenderDomain CHAR(2)? ? CHECK(VALUE IN('男','女')); 則在建表時(shí)對(duì)Ssex的說(shuō)明可以由Ssex CHAR(2)? ? CONSTRAINT C4 CHECK(Ssex IN ('男','女'))改寫(xiě)為Ssex GenderDomain

域的完整性約束條件也可通過(guò)(1)中的完整性約束命名子句進(jìn)行命名和操作。

(3)斷言:通過(guò)聲明斷言來(lái)指定更具一般性的約束和定義涉及多個(gè)表或聚集操作的比較復(fù)雜的完整性約束。斷言創(chuàng)建后,任何對(duì)斷言中所涉及關(guān)系的操作都會(huì)觸發(fā)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)斷言的檢查,任何使斷言不為真值的操作都會(huì)被拒絕執(zhí)行。(創(chuàng)建語(yǔ)句)CREATE ASSERTION<斷言名><CHECK 子句>, e.g. 限制數(shù)據(jù)庫(kù)課程最多60名學(xué)生選修:CREATE ASSERTION ASSE_SC_DB_NUM? CHECK(60>=(SELECT count(*) FROM Course,SC WHERE SC.CNO=COURSE.CNO AND COURSE.CNAME='數(shù)據(jù)庫(kù)')).(刪除語(yǔ)句)DROP ASSERTION <斷言名>

(4)觸發(fā)器:是用戶定義在關(guān)系表上的一類由事件驅(qū)動(dòng)的特殊過(guò)程,一旦定義,觸發(fā)器將被保存在數(shù)據(jù)庫(kù)服務(wù)器中,任何用戶對(duì)表的增刪改查操作均由服務(wù)器自動(dòng)激活相應(yīng)的觸發(fā)器,在核心層進(jìn)行集中的完整性控制。觸發(fā)器類似于約束,但是比約束更靈活,可以實(shí)施更為復(fù)雜的檢查和操作,具有更精細(xì)和更強(qiáng)大的數(shù)據(jù)控制能力。

(定義)觸發(fā)器又叫事件-條件-動(dòng)作規(guī)則,即當(dāng)特定的系統(tǒng)事件(如表的增刪改操作,事務(wù)的結(jié)束等)發(fā)生時(shí),對(duì)規(guī)則的條件進(jìn)行檢查,若條件成立,則執(zhí)行動(dòng)作,否則不執(zhí)行,規(guī)則中的動(dòng)作體可以很復(fù)雜,可以設(shè)計(jì)其他表和其他數(shù)據(jù)庫(kù)對(duì)象,通常是一段SQL存儲(chǔ)過(guò)程。觸發(fā)器的定義語(yǔ)言格式如下:CREATE TRIGGER <觸發(fā)器名> {BEFORE|AFTER} <觸發(fā)事件> ON <表名> REFERENCING NEW|OLD ROW AS<變量> FOR EACH{ROW|STATEMENT} [WHEN<觸發(fā)條件>] <觸發(fā)動(dòng)作體> (說(shuō)明:只有表的擁有者才可以在表上創(chuàng)建觸發(fā)器,并且一個(gè)表上創(chuàng)建的觸發(fā)器數(shù)目有限,具體數(shù)量取決于具體的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的設(shè)計(jì);觸發(fā)器名可以包含模式名,也可不含,同一模式下,觸發(fā)器名唯一,出發(fā)起名和表名在同一模式下;觸發(fā)器只能定義在基本表(也稱為觸發(fā)器的目標(biāo)表)上,不能定義在視圖上;觸發(fā)事件可以是INSERT、DELETE或UPDATE,也可以是幾個(gè)事件的組合,如INSERT OR DELETE,還可以是UPDATE OF <觸發(fā)列,...>,即進(jìn)一步指明修改哪些列時(shí)激活觸發(fā)器,AFTER/BEFORE 是觸發(fā)的時(shí)機(jī),即事件之前觸發(fā)還是事件之后觸發(fā);觸發(fā)器按照所觸發(fā)動(dòng)作的間隔尺寸可以分為行級(jí)觸發(fā)器(FOR EACH ROW)和語(yǔ)句級(jí)觸發(fā)器(FOR EACH STATEMENT);只有當(dāng)觸發(fā)條件為真時(shí)觸發(fā)動(dòng)作體才執(zhí)行,否則觸發(fā)動(dòng)作體不執(zhí)行,如果省略WHEN觸發(fā)條件,則觸發(fā)動(dòng)作體在觸發(fā)器激活后立即執(zhí)行;觸發(fā)動(dòng)作體可以是匿名的PL/SQL過(guò)程塊,也可以是對(duì)已創(chuàng)建存儲(chǔ)過(guò)程的調(diào)用,若觸發(fā)動(dòng)作體執(zhí)行失敗,觸發(fā)器事件終止執(zhí)行,目標(biāo)表或?qū)ο蟛话l(fā)生任何變化。)

【例】當(dāng)對(duì)表SC的Grade屬性進(jìn)行修改時(shí),若分?jǐn)?shù)增加了10%,則將此次操作記錄到另一個(gè)表SC_U (Sno、Cno、Oldgrade、Newgrade)中,其中Oldgrade是修改前的分?jǐn)?shù),Newgrade是修改后的分?jǐn)?shù)。

? ? CREATE TRIGGER SC_T? ? /*SC_T是觸發(fā)器的名字*/

? ? AFTER UPDATE OF Grade ON SC? ? ? /*UPDATE OF Grade ON SC 是觸發(fā)事件,AFTER是觸發(fā)時(shí)機(jī),表示當(dāng)對(duì)SC的Grade屬性修改完后再觸發(fā)下面的規(guī)則*/

? ? REFERENCING

? ? ? ? ? ? OLDROW AS OldTuple, NEWROW AS NewTuple

? ? FOR EACH ROW? ? ? ? /*行級(jí)觸發(fā)器,即每次執(zhí)行一次Grade更新,下面的規(guī)則就執(zhí)行一次*/

? ? WHEN (NewTuple.Grade>=1.1*OldTuple.Grade)? ? /*觸發(fā)條件,只有該條件為真時(shí)才執(zhí)行下面的操作*/

? ? ? ? ? ? INSERT INTO SC_U (Sno,Cno,OldGrade,NewGrade)

? ? ? ? ? ? VALUES (OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)

(執(zhí)行原則)一個(gè)數(shù)據(jù)表上可能定義了多個(gè)觸發(fā)器,如多個(gè)BEFORE觸發(fā)器,多個(gè)AFTER觸發(fā)器等,同一個(gè)表上的多個(gè)觸發(fā)器激活時(shí)遵循如下的執(zhí)行順序:1)執(zhí)行該表上的BEFORE觸發(fā)器;2)激活觸發(fā)器的SQL語(yǔ)句;3)執(zhí)行該表上的AFTER觸發(fā)器。多個(gè)BEFORE(AFTER)觸發(fā)器,遵循“誰(shuí)先創(chuàng)建誰(shuí)先執(zhí)行”的原則,按照觸發(fā)器創(chuàng)建的時(shí)間先后順序執(zhí)行。

(刪除)DROP TRIGGER <觸發(fā)器名> ON <表名>; 觸發(fā)器必須是一個(gè)已創(chuàng)建的觸發(fā)器,并且只能由具有相應(yīng)權(quán)限的用戶刪除。

1.4 數(shù)據(jù)恢復(fù)技術(shù)

事務(wù)是一系列的數(shù)據(jù)庫(kù)操作,是數(shù)據(jù)庫(kù)應(yīng)用程序的基本邏輯單元。事務(wù)處理技術(shù)主要包括數(shù)據(jù)庫(kù)恢復(fù)技術(shù)并發(fā)控制技術(shù)。

1. 事務(wù)的基本概念

(1)事務(wù):是用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,是一個(gè)不可分割的工作單位。

(2)事務(wù)與程序:一般地講,一個(gè)程序包含多個(gè)事務(wù)。

(3)事務(wù)定義語(yǔ)句:BEGAIN TRANSACTION(開(kāi)始);COMMIT(提交,即提交事務(wù)的所有操作,將事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新寫(xiě)回到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中去);ROLLBACK(回滾,即發(fā)生故障,事務(wù)終止,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)已完成的操作全部撤銷,回滾到事務(wù)開(kāi)始時(shí)的狀態(tài));

(4)事務(wù)的ACID特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持續(xù)性(Durability)。原子性是指事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位;一致性是指數(shù)據(jù)庫(kù)必須從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài);隔離性是指一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾,事務(wù)內(nèi)部操作及使用的數(shù)據(jù)與其他并發(fā)執(zhí)行的事務(wù)互不干擾;持續(xù)性也成永久性,是指一旦提交,永久修改。

(5)破壞事務(wù)ACID特性的因素:1)多個(gè)事務(wù)并行運(yùn)行時(shí),不同事務(wù)的操作交叉執(zhí)行;2)事務(wù)在運(yùn)行過(guò)程中被強(qiáng)行停止。數(shù)據(jù)恢復(fù)技術(shù)通過(guò)把數(shù)據(jù)庫(kù)從錯(cuò)誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)(一致?tīng)顟B(tài)或完整狀態(tài))從而保障事務(wù)的ACID特性不被破壞。

2. 故障的種類

(1)事務(wù)內(nèi)部的故障:分為可預(yù)期的和非預(yù)期的??深A(yù)期的故障可以通過(guò)條件語(yǔ)句進(jìn)行回滾,非預(yù)期的不能由應(yīng)用程序處理,如運(yùn)算溢出、并發(fā)事務(wù)發(fā)生死鎖而被選中撤銷該事務(wù)等。對(duì)待此類故障采用事務(wù)撤銷操作,即撤銷該事務(wù)已經(jīng)作出的任何對(duì)數(shù)據(jù)庫(kù)的修改,使得該事務(wù)好像根本沒(méi)有啟動(dòng)一樣。

(2)系統(tǒng)故障(軟故障):是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)的任何事件,使得系統(tǒng)要重啟,例如硬件錯(cuò)誤、操作系統(tǒng)故障、系統(tǒng)斷電等。內(nèi)存中內(nèi)容丟失,運(yùn)行事務(wù)非正常終止,為保證數(shù)據(jù)一致性,需要清除這些事務(wù)對(duì)數(shù)據(jù)庫(kù)的所有修改,重做所有已提交的事務(wù)。

(3)介質(zhì)故障(硬故障):指外存故障,如磁盤(pán)損壞、磁頭碰撞,瞬時(shí)強(qiáng)磁場(chǎng)干擾等。

(4)計(jì)算機(jī)病毒:是數(shù)據(jù)庫(kù)系統(tǒng)的主要威脅。

各類故障對(duì)數(shù)據(jù)庫(kù)的影響總結(jié)為兩種:一是數(shù)據(jù)庫(kù)本身被破壞;二是數(shù)據(jù)本身被破壞可能不正確。

數(shù)據(jù)庫(kù)恢復(fù)的基本原理是冗余,數(shù)據(jù)庫(kù)中任何一部分被破壞或不正確的數(shù)據(jù)可以根據(jù)存儲(chǔ)在系統(tǒng)別處的冗余數(shù)據(jù)來(lái)重建。

3. 恢復(fù)的實(shí)現(xiàn)技術(shù)

兩個(gè)關(guān)鍵問(wèn)題:如何建立冗余數(shù)據(jù)如何利用冗余數(shù)據(jù)實(shí)施數(shù)據(jù)庫(kù)恢復(fù)。建立冗余數(shù)據(jù)最常用的技術(shù)是數(shù)據(jù)轉(zhuǎn)儲(chǔ)和登記日志文件。

(1)數(shù)據(jù)轉(zhuǎn)儲(chǔ):數(shù)據(jù)庫(kù)管理員定期將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到磁帶、磁盤(pán)或其他存儲(chǔ)介質(zhì)上保存起來(lái)的過(guò)程。備用數(shù)據(jù)被稱為后備副本或后援副本。當(dāng)數(shù)據(jù)庫(kù)遭到破壞后,可以將后備副本重新裝入。重裝后備副本后數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài),要想恢復(fù)到故障發(fā)生時(shí)的狀態(tài),必須重新運(yùn)行自轉(zhuǎn)儲(chǔ)后的所有新事務(wù)。

轉(zhuǎn)儲(chǔ)可分為靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)。靜態(tài)轉(zhuǎn)儲(chǔ)是在系統(tǒng)中無(wú)運(yùn)行事務(wù)時(shí)進(jìn)行轉(zhuǎn)儲(chǔ)操作。靜態(tài)轉(zhuǎn)儲(chǔ)得到的一定是一個(gè)數(shù)據(jù)一致性的副本。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)時(shí)指轉(zhuǎn)儲(chǔ)期間允許對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取或修改,轉(zhuǎn)儲(chǔ)和用戶事務(wù)可以并發(fā)執(zhí)行。轉(zhuǎn)儲(chǔ)結(jié)束時(shí)后援副本上的數(shù)據(jù)并不能保證正確有效。

為了避免動(dòng)態(tài)轉(zhuǎn)儲(chǔ)過(guò)程中發(fā)生一致性錯(cuò)誤,必須把轉(zhuǎn)儲(chǔ)期間各事務(wù)對(duì)數(shù)據(jù)庫(kù)的修改活動(dòng)等記下來(lái),建立日志文件。

數(shù)據(jù)轉(zhuǎn)儲(chǔ)有兩種方式(海量和增量),分別在兩種狀態(tài)(動(dòng)態(tài)和靜態(tài))下進(jìn)行,因此數(shù)據(jù)轉(zhuǎn)儲(chǔ)方法可以分為4類:動(dòng)態(tài)海量轉(zhuǎn)儲(chǔ)、動(dòng)態(tài)增量轉(zhuǎn)儲(chǔ)、靜態(tài)海量轉(zhuǎn)儲(chǔ)、靜態(tài)增量轉(zhuǎn)儲(chǔ)。

(2)登記日志文件

a.定義:日志文件是用來(lái)記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文件。

b.格式:以記錄為單位的日志文件和以數(shù)據(jù)塊為單位的日志文件。

c.內(nèi)容:(以記錄為單位的日志文件)登記各個(gè)事務(wù)的開(kāi)始標(biāo)記、結(jié)束標(biāo)記、所有更新操作,記錄事務(wù)標(biāo)識(shí)、操作類型、操作對(duì)象、更新前數(shù)據(jù)的舊值、更新后數(shù)據(jù)的新值。(以數(shù)據(jù)塊為單位的日志文件)記錄事務(wù)標(biāo)識(shí)和被更新的數(shù)據(jù)塊,將更新前的整個(gè)塊和更新后的整個(gè)塊都放入日志文件中。

d.作用:1)事務(wù)故障恢復(fù)和系統(tǒng)故障恢復(fù);2)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)中建立日志文件,后備副本和日志文件結(jié)合起來(lái)才能有效地恢復(fù)數(shù)據(jù)庫(kù);3)靜態(tài)轉(zhuǎn)儲(chǔ)中建立日志文件,當(dāng)數(shù)據(jù)庫(kù)毀壞后可重新裝入后援副本把數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的正確狀態(tài),利用日志文件把已完成的事務(wù)進(jìn)行重做,對(duì)故障發(fā)生時(shí)尚未完成的事務(wù)進(jìn)行撤銷處理。

e.登記原則:1)登記的次序嚴(yán)格按并發(fā)事務(wù)執(zhí)行的時(shí)間次序;2)必須先寫(xiě)日志文件,后寫(xiě)數(shù)據(jù)庫(kù)。

4. 恢復(fù)策略

目標(biāo):當(dāng)系統(tǒng)運(yùn)行過(guò)程中發(fā)生故障時(shí),利用數(shù)據(jù)庫(kù)后備副本和日志文件將數(shù)據(jù)庫(kù)恢復(fù)到故障前的某個(gè)一致性狀態(tài)。

(1)事務(wù)故障的恢復(fù):恢復(fù)子系統(tǒng)利用日志文件撤銷某發(fā)生故障的事務(wù)已對(duì)數(shù)據(jù)庫(kù)進(jìn)行的修改。由系統(tǒng)自動(dòng)完成,對(duì)用戶透明。恢復(fù)步驟是:反向掃描日志文件,查找該事務(wù)的更新操作,對(duì)該事務(wù)的更新操作執(zhí)行逆操作,繼續(xù)反向掃描日志文件,對(duì)該事務(wù)的其他操作執(zhí)行逆操作,直至讀到此事務(wù)的開(kāi)始標(biāo)記,事務(wù)故障恢復(fù)完成。

(2)系統(tǒng)故障的恢復(fù):恢復(fù)操作撤銷故障發(fā)生時(shí)未完成的事務(wù),重做已完成的事務(wù)。由系統(tǒng)在重啟時(shí)自動(dòng)完成,不需要用戶干預(yù)。恢復(fù)步驟是:正向掃描日志文件,找出在故障發(fā)生前已經(jīng)提交的事務(wù),加入重做隊(duì)列,同時(shí)找出故障發(fā)生時(shí)尚未完成的事務(wù),加入撤銷隊(duì)列;對(duì)撤銷隊(duì)列中的各事務(wù)進(jìn)行撤銷處理,即反向掃描日志文件,對(duì)更新操作執(zhí)行逆操作;對(duì)重做隊(duì)列中的各事務(wù)重做處理,即正向掃描日志文件,重新執(zhí)行每個(gè)更新操作。

(3)介質(zhì)故障的恢復(fù):恢復(fù)方法是重裝數(shù)據(jù)庫(kù),然后重做已完成的事務(wù)。需要數(shù)據(jù)庫(kù)管理員介入,數(shù)據(jù)庫(kù)管理員需要重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)副本和有關(guān)的各日志文件副本,執(zhí)行恢復(fù)命令,具體的恢復(fù)操作由數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)執(zhí)行。恢復(fù)步驟是:裝入最新的后備副本,是數(shù)據(jù)庫(kù)恢復(fù)到最近一次轉(zhuǎn)儲(chǔ)時(shí)的一致性狀態(tài);裝入相應(yīng)的日志文件副本,即轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的日志文件副本,重做已完成的事務(wù)。

5. 具有檢查點(diǎn)的恢復(fù)技術(shù)

(1)恢復(fù)子系統(tǒng)在搜索檢查日志文件時(shí)面臨的兩個(gè)問(wèn)題,一是搜索整個(gè)日志將耗費(fèi)大量的時(shí)間,二是很多需要重做處理的事務(wù)實(shí)際上已經(jīng)將更新操作結(jié)果寫(xiě)入數(shù)據(jù)庫(kù),恢復(fù)子系統(tǒng)重復(fù)執(zhí)行浪費(fèi)時(shí)間。

(2)解決辦法:在日志文件中添加一類記錄——檢查點(diǎn)記錄,記錄建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)以及每個(gè)事務(wù)對(duì)應(yīng)的最新的日志記錄地址。創(chuàng)建一個(gè)“重新開(kāi)始文件”存放每個(gè)日志文件中檢查點(diǎn)記錄的地址。

(3)動(dòng)態(tài)維護(hù)日志文件的方法是:周期性地執(zhí)行建立檢查點(diǎn)、保存數(shù)據(jù)庫(kù)狀態(tài)的操作。具體步驟是:寫(xiě)日志緩沖區(qū)的日志記錄入磁盤(pán)的日志文件,然后寫(xiě)入一個(gè)檢查點(diǎn)記錄,寫(xiě)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)記錄入磁盤(pán)的數(shù)據(jù)庫(kù),然后寫(xiě)檢查點(diǎn)記錄在日志文件中的地址入一個(gè)重新開(kāi)始文件。

----檢查點(diǎn)可以預(yù)定時(shí)間間隔建立,也可以按照某種規(guī)則建立,例如日志文件寫(xiě)滿一半建立一個(gè)檢查點(diǎn)。

(4)具有檢查點(diǎn)的恢復(fù)策略:將事務(wù)按照檢查點(diǎn)進(jìn)行分類,對(duì)不同類別的事務(wù)采用不同的處理方式。 對(duì)于在故障發(fā)生時(shí)還未完成的事務(wù)予以撤銷;對(duì)于在檢查點(diǎn)之后完成提交的事務(wù)進(jìn)行重做(可能未寫(xiě)入數(shù)據(jù)庫(kù));對(duì)于檢查點(diǎn)前完成提交的事務(wù)不必重做。

(5)系統(tǒng)使用檢查點(diǎn)方法進(jìn)行恢復(fù)的步驟是:從重新開(kāi)始文件中找到最后一個(gè)檢查點(diǎn)記錄在日志文件中的地址,然后在日志文件中找到該檢查點(diǎn)記錄;然后由該檢查點(diǎn)記錄得到檢查點(diǎn)建立時(shí)刻所有正在執(zhí)行的事務(wù)清單,建立UNDO-LIST(撤銷清單,所有事務(wù)放入此清單)和REDO-LIST(重做清單,初始為空);從檢查點(diǎn)開(kāi)始正向掃描日志文件,對(duì)新開(kāi)始的事務(wù)暫時(shí)放入撤銷清單,對(duì)提交的事務(wù)從撤銷清單移入重做清單;對(duì)撤銷清單的事務(wù)執(zhí)行UNDO操作,對(duì)重做清單的事務(wù)執(zhí)行REDO操作。

6. 數(shù)據(jù)庫(kù)鏡像

數(shù)據(jù)庫(kù)鏡像可以根據(jù)數(shù)據(jù)庫(kù)管理員的要求,自動(dòng)把整個(gè)數(shù)據(jù)庫(kù)或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個(gè)磁盤(pán)上,每當(dāng)數(shù)據(jù)更新時(shí),數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)把更新后的數(shù)據(jù)復(fù)制過(guò)去,由數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)保證鏡像數(shù)據(jù)與數(shù)據(jù)庫(kù)的一致性。

好處:1)出現(xiàn)數(shù)據(jù)庫(kù)介質(zhì)故障時(shí)不需關(guān)閉系統(tǒng)和重裝副本,可由鏡像磁盤(pán)提供繼續(xù)使用和恢復(fù);2)無(wú)故障時(shí)也可支撐并發(fā)操作,例如當(dāng)一個(gè)用戶對(duì)數(shù)據(jù)加排他鎖進(jìn)行數(shù)據(jù)修改時(shí),其他用戶可以通過(guò)鏡像數(shù)據(jù)庫(kù)進(jìn)行讀數(shù)據(jù)操作,無(wú)需等待該用戶釋放鎖。

注:實(shí)際應(yīng)用中,為避免頻繁的數(shù)據(jù)復(fù)制造成系統(tǒng)運(yùn)行效率低的問(wèn)題,用戶往往只選擇對(duì)關(guān)鍵數(shù)據(jù)和日志文件進(jìn)行鏡像,而非整個(gè)數(shù)據(jù)庫(kù)。

1.5 并發(fā)控制

1. 并發(fā)執(zhí)行的作用:由于事務(wù)執(zhí)行過(guò)程中可能需要不同的資源,因此并發(fā)執(zhí)行可以充分利用系統(tǒng)資源,發(fā)揮數(shù)據(jù)庫(kù)共享資源的特點(diǎn)。

2. 并發(fā)方式:交叉并發(fā)和同時(shí)并發(fā)。交叉并發(fā)方式是指在單處理機(jī)系統(tǒng)中事務(wù)的并行操作輪流交叉運(yùn)行,同時(shí)并發(fā)方式是指在多處理機(jī)系統(tǒng)中,每個(gè)處理機(jī)運(yùn)行一個(gè)事務(wù),多個(gè)處理機(jī)可以同時(shí)運(yùn)行多個(gè)事務(wù),實(shí)現(xiàn)多個(gè)事務(wù)真正的并行運(yùn)行。(本書(shū)討論的并發(fā)控制是基于單處理機(jī)系統(tǒng)的,也可以推廣至多處理機(jī)的情況)

3. 并發(fā)控制:當(dāng)多個(gè)用戶并發(fā)地存取數(shù)據(jù)庫(kù)時(shí)就會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況,并發(fā)控制就是控制多用戶的并發(fā)操作不會(huì)破壞事務(wù)的一致性和數(shù)據(jù)庫(kù)的一致性。

4. 并發(fā)操作造成數(shù)據(jù)不一致性的三種情況:丟失修改、不可重復(fù)讀、讀臟數(shù)據(jù)。

(1)丟失修改:兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)并修改,T2提交的結(jié)果破壞(覆蓋)了T1提交的結(jié)果,導(dǎo)致T1的修改無(wú)效(丟失)。

(2)不可重復(fù)讀:事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2對(duì)數(shù)據(jù)更新,使T1無(wú)法再讀出與前一次讀取相同的結(jié)果,包括值不同、部分?jǐn)?shù)據(jù)被刪、有部分新數(shù)據(jù)。

(3)讀臟數(shù)據(jù):事務(wù)T1對(duì)數(shù)據(jù)進(jìn)行了操作后事務(wù)T2讀數(shù),T1由于某種原因被撤銷,數(shù)據(jù)恢復(fù)原值,T2讀到的就是臟數(shù)據(jù),即不正確的數(shù)據(jù)。? ?

5. 數(shù)據(jù)不一致的主要原因:并發(fā)操作破壞了事務(wù)的隔離性。

6. 并發(fā)控制的主要技術(shù):封鎖、時(shí)間戳、樂(lè)觀控制法、多版本并發(fā)控制等。

7. 封鎖:事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求對(duì)其加鎖,在事務(wù)T釋放鎖之前,其他事務(wù)不能更新此數(shù)據(jù)對(duì)象?;镜姆怄i類型有兩種:排他鎖(exclusive locks, 簡(jiǎn)稱X鎖)和共享鎖(share locks, 簡(jiǎn)稱S鎖)。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改A,其他事務(wù)不能對(duì)A加任何類型的鎖,從而不能對(duì)A進(jìn)行任何操作。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則事務(wù)T可以讀A但不能修改A,其他事務(wù)只能再對(duì)A加S鎖,而不能加X(jué)鎖,保證其他事務(wù)可以讀A,但不可以修改。

8. 封鎖協(xié)議:在運(yùn)用X鎖和S鎖進(jìn)行加鎖時(shí),約定的一些規(guī)則,例如加鎖申請(qǐng)時(shí)間、持鎖時(shí)間、釋放時(shí)間等。

(1)一級(jí)封鎖協(xié)議:事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。如果僅僅是讀數(shù)據(jù)而不對(duì)其進(jìn)行修改,是不需要加鎖的,因此無(wú)法保證可重復(fù)讀和不讀臟數(shù)據(jù)。

(2)二級(jí)封鎖協(xié)議:在一級(jí)封鎖協(xié)議的基礎(chǔ)上增加事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完即可釋放S鎖。由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復(fù)讀。

(3)三級(jí)封鎖協(xié)議:在一級(jí)封鎖協(xié)議的基礎(chǔ)上增加事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。可以實(shí)現(xiàn)可重復(fù)讀。

9. 活鎖與死鎖:

活鎖是指某一事務(wù)由于與其他事務(wù)的封鎖申請(qǐng)沖突而不斷等待。處理方法是采用先來(lái)先服務(wù)的策略。

死鎖是指兩個(gè)事務(wù)在互相等待對(duì)方釋放鎖,從而兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖。處理方法有兩類:預(yù)防死鎖的發(fā)生和檢測(cè)并解除死鎖。

(1)死鎖的預(yù)防:一次封鎖法,即要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則不能繼續(xù)執(zhí)行。問(wèn)題:擴(kuò)大了封鎖的范圍,降低了系統(tǒng)的并發(fā)度;由于數(shù)據(jù)庫(kù)中的數(shù)據(jù)不斷變化,導(dǎo)致封鎖對(duì)象可能需要擴(kuò)大,因此難以精確確定每個(gè)事務(wù)要封鎖的對(duì)象。順序封鎖法,即要求所有事務(wù)按照一個(gè)固定的順序?qū)?shù)據(jù)對(duì)象進(jìn)行封鎖。問(wèn)題:數(shù)據(jù)庫(kù)只能夠數(shù)據(jù)對(duì)象極多且不斷變化,要維護(hù)封鎖順序非常困難;事務(wù)的封鎖請(qǐng)求隨著事務(wù)的執(zhí)行動(dòng)態(tài)決定,很難事先確定要封鎖的對(duì)象,更無(wú)順序可言。

(2)死鎖的診斷:超時(shí)法,即如果一個(gè)事務(wù)的等待時(shí)間超過(guò)了規(guī)定的時(shí)限,則認(rèn)為發(fā)生死鎖。問(wèn)題:容易誤判;不能及時(shí)發(fā)現(xiàn)死鎖的發(fā)生。等待圖法,即將事務(wù)及其之間的等待關(guān)系用有向圖表示,在有向圖中出現(xiàn)回路的表明出現(xiàn)了死鎖。

(3)死鎖的接觸:選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤銷,釋放此事務(wù)持有的所有鎖,使其他事務(wù)得以繼續(xù)運(yùn)行下去。對(duì)撤銷的事務(wù)所執(zhí)行的數(shù)據(jù)修改操作必須加以恢復(fù)。

10. 并發(fā)調(diào)度:在不出現(xiàn)數(shù)據(jù)一致性問(wèn)題的情況下,對(duì)于并發(fā)事務(wù)的諸多操作,采用不同的執(zhí)行順序會(huì)產(chǎn)生不同的結(jié)果,并發(fā)事務(wù)操作的執(zhí)行序列被稱為并發(fā)調(diào)度。為了評(píng)價(jià)不同并發(fā)調(diào)度的正確性,數(shù)據(jù)庫(kù)系統(tǒng)采用多事務(wù)串行執(zhí)行的結(jié)果作為標(biāo)準(zhǔn),認(rèn)為執(zhí)行結(jié)果等價(jià)于串行執(zhí)行的并發(fā)調(diào)度是正確的,這樣的并發(fā)調(diào)度也被稱為可串行化調(diào)度。

(1)可串行化調(diào)度:多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行這些事務(wù)時(shí)的結(jié)果相同。

(2)可串行性(serializability)是并發(fā)事務(wù)正確調(diào)度的準(zhǔn)則。

(3)沖突操作:不同事務(wù)對(duì)同一數(shù)據(jù)的讀寫(xiě)操作和寫(xiě)寫(xiě)操作被稱為是沖突操作。沖突的地方在于二者順序交換會(huì)產(chǎn)生不同的執(zhí)行結(jié)果。沖突操作之外的其他操作被稱為不沖突操作。交換兩個(gè)不沖突操作不會(huì)影響執(zhí)行結(jié)果。

(4)沖突可串行化:一個(gè)調(diào)度在保證沖突操作的次序不變的情況下,通過(guò)交換兩個(gè)事務(wù)不沖突操作的次序得到一個(gè)串行調(diào)度,則稱該調(diào)度為沖突可串行化的調(diào)度。若一個(gè)調(diào)度是沖突可串行化的,則一定是可串行化的調(diào)度。(可串行化的調(diào)度不全是沖突可串行化的調(diào)度)

(5)兩段鎖協(xié)議:為保證并發(fā)調(diào)度的可串行化,數(shù)據(jù)庫(kù)管理系統(tǒng)采用兩段鎖(TwoPhase Locking, 簡(jiǎn)稱2PL)協(xié)議。兩段鎖是指一個(gè)事務(wù)的執(zhí)行階段分為兩個(gè)階段,第一個(gè)階段只封鎖,第二個(gè)階段只釋放封鎖。例如,遵循兩段鎖協(xié)議的封鎖順序是Slock A, Slock B, Xlock C, Unlock B, Unlock A, Unlock C. 不遵循兩段鎖協(xié)議的封鎖順序是Slock A, Unlock A, Slock B, Xlock C, Unlock C, Unlock B.

——兩段鎖協(xié)議與可串行化調(diào)度:事務(wù)遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件,而不是必要條件。即遵守兩段鎖協(xié)議的事務(wù)其并發(fā)調(diào)度都是可串行化的,但可串行化的并發(fā)調(diào)度不一定所有事務(wù)都符合兩段鎖協(xié)議。

——兩段鎖協(xié)議與預(yù)防死鎖的一次封鎖法:一次封鎖法要求每個(gè)事務(wù)必須一次性對(duì)所有數(shù)據(jù)加鎖,中間不能執(zhí)行其他操作,而兩段鎖協(xié)議并不要求一次將所有數(shù)據(jù)加鎖。一次封鎖法遵守兩段鎖協(xié)議,但是遵守兩段鎖協(xié)議的事務(wù)可能發(fā)生死鎖。

11. 封鎖的粒度:封鎖對(duì)象的大小。可以是邏輯單元:屬性值、屬性值集合、元組、關(guān)系、索引項(xiàng)、整個(gè)索引、整個(gè)數(shù)據(jù)庫(kù);也可以是物理單元:頁(yè)、物理記錄等。

(1)(評(píng)價(jià)方法)封鎖粒度的選擇應(yīng)該考慮兩個(gè)因素:封鎖開(kāi)銷和并發(fā)度。封鎖開(kāi)銷指加鎖和釋放的次數(shù),并發(fā)度是指并發(fā)的事務(wù)數(shù)。

(2)多粒度封鎖:采用樹(shù)結(jié)構(gòu)(稱為多粒度樹(shù))管理數(shù)據(jù)庫(kù)中封鎖對(duì)象的包含關(guān)系,對(duì)數(shù)據(jù)對(duì)象進(jìn)行封鎖時(shí),自上而下的加鎖,對(duì)一個(gè)結(jié)點(diǎn)加鎖意味著這個(gè)結(jié)點(diǎn)的所有后裔結(jié)點(diǎn)也被加同樣的鎖。多粒度封鎖中一個(gè)數(shù)據(jù)對(duì)象可能以兩種方式被封鎖:1)顯示封鎖,即直接加到數(shù)據(jù)對(duì)象上的鎖;2)隱式封鎖,即由于其上級(jí)結(jié)點(diǎn)加鎖而使該數(shù)據(jù)對(duì)象加上了鎖。系統(tǒng)在檢查封鎖沖突時(shí)需要上下搜索,即搜索其從根節(jié)點(diǎn)開(kāi)始的所有上級(jí)結(jié)點(diǎn)、當(dāng)前結(jié)點(diǎn)及其所有下級(jí)結(jié)點(diǎn),若其中某個(gè)數(shù)據(jù)對(duì)象已經(jīng)加了不相容的鎖,則必須等待。

(3)意向鎖:為了提高多粒度封鎖的效率,提出采用意向鎖對(duì)被加鎖結(jié)點(diǎn)的上級(jí)結(jié)點(diǎn)加鎖,即對(duì)結(jié)點(diǎn)進(jìn)行加鎖時(shí),必須先對(duì)它的上層結(jié)點(diǎn)加意向鎖。三種常用的意向鎖:意向共享鎖(Intent Share Lock,IS鎖);意向排他鎖(Intent Exclusive Lock,IX鎖);共享意向排他鎖(Share Intent Exclusive Lock,SIX鎖)。

——IS鎖:如果一個(gè)數(shù)據(jù)對(duì)象加了IS鎖,說(shuō)明它的后裔結(jié)點(diǎn)將要或已經(jīng)加了S鎖。

——IX鎖:如果一個(gè)數(shù)據(jù)對(duì)象加了IX鎖,說(shuō)明它的后裔結(jié)點(diǎn)將要或已經(jīng)加了X鎖。

——SIX鎖:如果一個(gè)數(shù)據(jù)對(duì)象加了SIX鎖,說(shuō)明它自身加了S鎖,且它的后裔結(jié)點(diǎn)將要或已經(jīng)加了X鎖,即對(duì)它加S鎖再加IX鎖。

12. 其他并發(fā)控制方法:時(shí)間戳方法、樂(lè)觀控制法、多版本并發(fā)控制等。

版本是指數(shù)據(jù)庫(kù)中數(shù)據(jù)對(duì)象的一個(gè)快照,記錄了數(shù)據(jù)對(duì)象某個(gè)時(shí)刻的狀態(tài)。多版本并發(fā)控制通過(guò)產(chǎn)生多個(gè)數(shù)據(jù)庫(kù)對(duì)象版本,實(shí)現(xiàn)寫(xiě)數(shù)據(jù)事務(wù)和多個(gè)讀數(shù)據(jù)事務(wù)的并發(fā)。

1.6 數(shù)據(jù)庫(kù)管理系統(tǒng)

1. 數(shù)據(jù)庫(kù)管理系統(tǒng)的基本功能

數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)主要是是實(shí)現(xiàn)對(duì)共享數(shù)據(jù)有效的組織、存儲(chǔ)、管理和存取。

(1)數(shù)據(jù)庫(kù)定義和創(chuàng)建:用數(shù)據(jù)定義語(yǔ)言定義和創(chuàng)建數(shù)據(jù)庫(kù)模式、外模式、內(nèi)模式等數(shù)據(jù)庫(kù)對(duì)象。例如關(guān)系數(shù)據(jù)庫(kù)中建立數(shù)據(jù)庫(kù)、表、視圖、索引等。

(2)數(shù)據(jù)組織、存儲(chǔ)和管理:數(shù)據(jù)包括數(shù)據(jù)字典、用戶數(shù)據(jù)、存取路徑等。要確定數(shù)據(jù)的文件結(jié)構(gòu)和存取方式,實(shí)現(xiàn)數(shù)據(jù)之間的聯(lián)系?;灸繕?biāo)是提高存儲(chǔ)空間利用率和方便存取,提供多種存取方法(如索引查找、hash查找、順序查找等)以提高存取效率。

(3)數(shù)據(jù)存?。?/b>提供用戶對(duì)數(shù)據(jù)的操作功能,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的檢索、插入、修改和刪除。提供功能強(qiáng)且易學(xué)易用的數(shù)據(jù)操縱語(yǔ)言、方便的操作方式和較高的數(shù)據(jù)存取效率。

(4)數(shù)據(jù)庫(kù)事務(wù)管理和運(yùn)行管理:運(yùn)行控制和管理功能,包括多用戶環(huán)境下的事務(wù)管理功能和安全性、完整性控制功能,數(shù)據(jù)庫(kù)恢復(fù)、并發(fā)控制和死鎖檢測(cè)、安全性檢查和存取控制等。

(5)數(shù)據(jù)庫(kù)的建立和維護(hù):數(shù)據(jù)庫(kù)的初始建立、數(shù)據(jù)的轉(zhuǎn)換、數(shù)據(jù)庫(kù)的轉(zhuǎn)儲(chǔ)和恢復(fù)、數(shù)據(jù)庫(kù)的重組和重構(gòu)以及性能監(jiān)測(cè)分析等。

(6)其他功能:通信功能,數(shù)據(jù)轉(zhuǎn)換功能等。

2. 數(shù)據(jù)庫(kù)管理系統(tǒng)的系統(tǒng)結(jié)構(gòu)

——層次結(jié)構(gòu):應(yīng)用層、語(yǔ)言處理層、數(shù)據(jù)存取層、數(shù)據(jù)存儲(chǔ)層。

3. 語(yǔ)言處理層

(1)任務(wù):是把用戶在各種方式下提交給關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)庫(kù)語(yǔ)句轉(zhuǎn)換成對(duì)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)內(nèi)層可執(zhí)行的基本存取模塊的調(diào)用序列。

(2)數(shù)據(jù)庫(kù)語(yǔ)言:數(shù)據(jù)定義語(yǔ)言、數(shù)據(jù)操縱語(yǔ)言和數(shù)據(jù)控制語(yǔ)言。

——對(duì)數(shù)據(jù)定義語(yǔ)言的處理:語(yǔ)法分析、翻譯成內(nèi)部表示、存儲(chǔ)在系統(tǒng)的數(shù)據(jù)字典中。

——對(duì)數(shù)據(jù)操縱語(yǔ)言的處理:詞法分析和語(yǔ)法分析、把外部關(guān)系名、屬性名轉(zhuǎn)換為內(nèi)部名、查詢檢查(存取權(quán)限和完整性檢查)、對(duì)查詢進(jìn)行優(yōu)化(兩類:代數(shù)優(yōu)化和存取路徑優(yōu)化)。將數(shù)據(jù)庫(kù)數(shù)據(jù)操縱語(yǔ)句轉(zhuǎn)換成一串可執(zhí)行的存取動(dòng)作這一過(guò)程稱為一個(gè)逐步束縛過(guò)程。兩種翻譯方法:解釋方法和預(yù)編譯方法。①解釋方法是指數(shù)據(jù)操縱語(yǔ)句以原始字符串的形式保存,只有需要執(zhí)行時(shí),利用解釋程序去完成解釋予以執(zhí)行。②預(yù)編譯方法是在用戶提交數(shù)據(jù)操縱語(yǔ)句后對(duì)其進(jìn)行翻譯處理,保存產(chǎn)生好的可執(zhí)行代碼。③重編譯方法即當(dāng)數(shù)據(jù)庫(kù)中因某些成分的改變而使一些程序的編譯結(jié)果無(wú)效時(shí),再對(duì)其執(zhí)行一次編譯。較好的重編譯方法是將受影響的編譯結(jié)果置“無(wú)效”標(biāo)志,在其被執(zhí)行時(shí)才進(jìn)行自動(dòng)重編譯。

4. 數(shù)據(jù)存取層

向上為語(yǔ)言處理層提供單個(gè)元組的存取接口,向下與數(shù)據(jù)存儲(chǔ)層通過(guò)系統(tǒng)緩沖區(qū)的存儲(chǔ)接口相連。數(shù)據(jù)存取層包括事務(wù)管理子系統(tǒng)、控制信息管理模塊、排序合并子系統(tǒng)、存取路徑維護(hù)子系統(tǒng)、封鎖子系統(tǒng)、日志登記子系統(tǒng)。

5. 緩沖區(qū)管理

數(shù)據(jù)存儲(chǔ)層的主要功能是存儲(chǔ)管理,包括緩沖區(qū)管理、內(nèi)外存交換、外存管理等,其中緩沖區(qū)管理十分重要,數(shù)據(jù)存儲(chǔ)層向數(shù)據(jù)存取層提供的接口就是由定長(zhǎng)頁(yè)面組成的系統(tǒng)緩沖區(qū)。

系統(tǒng)緩沖區(qū)設(shè)立的原因:一是它把數(shù)據(jù)存儲(chǔ)層以上各系統(tǒng)成分和實(shí)際的外存設(shè)備隔離,外存設(shè)備的變更不會(huì)影響其他系統(tǒng)成分,使關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)具有設(shè)備獨(dú)立性;二是提高存取效率。

緩沖區(qū)管理中主要算法是淘汰算法查找算法,操作系統(tǒng)中有許多淘汰算法可以借鑒,如FIFO(先進(jìn)先出算法)、LRU(最近最少使用的先淘汰算法)以及它們的各種改進(jìn)算法。查找算法用來(lái)確定所請(qǐng)求的頁(yè)是否在內(nèi)存,可采用順序掃描、折半查找、hash查找算法等。

6. 數(shù)據(jù)庫(kù)的物理組織

問(wèn)題:數(shù)據(jù)庫(kù)是大量數(shù)據(jù)的有結(jié)構(gòu)的綜合性集合,如何將這樣一個(gè)龐大的數(shù)據(jù)集合以最優(yōu)的形式組織起來(lái)存放在外存上?

評(píng)價(jià)標(biāo)準(zhǔn):一是存儲(chǔ)效率高,節(jié)省存儲(chǔ)空間;二是存取效率高,速度快,代價(jià)小。

核心問(wèn)題:數(shù)據(jù)庫(kù)實(shí)現(xiàn)的基礎(chǔ)是文件,對(duì)數(shù)據(jù)庫(kù)的任何操作最終要轉(zhuǎn)化為對(duì)文件的操作,所以在數(shù)據(jù)庫(kù)的物理組織中,基本問(wèn)題是如何設(shè)計(jì)文件組織或者利用操作系統(tǒng)提供的基本的文件組織方法?

數(shù)據(jù)庫(kù)中需要存儲(chǔ)的4類數(shù)據(jù):數(shù)據(jù)描述(包括數(shù)據(jù)外模式、模式、內(nèi)模式),數(shù)據(jù)本身,數(shù)據(jù)之間的聯(lián)系,存取路徑。

數(shù)據(jù)庫(kù)三種數(shù)據(jù)組織:

(1)數(shù)據(jù)字典的組織:有關(guān)數(shù)據(jù)的描述存儲(chǔ)在數(shù)據(jù)庫(kù)的數(shù)據(jù)字典中,其數(shù)據(jù)量小、使用頻繁。數(shù)據(jù)字典按不同的內(nèi)容在邏輯上組織為若干張表,在物理上可以將一個(gè)字典表對(duì)應(yīng)一個(gè)物理文件,由操作系統(tǒng)負(fù)責(zé)存儲(chǔ)管理,也可以將若干字典表對(duì)應(yīng)一個(gè)物理文件,由關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)負(fù)責(zé)存儲(chǔ)組織和管理。

(2)數(shù)據(jù)及數(shù)據(jù)聯(lián)系的組織:操作系統(tǒng)提供的常用文件結(jié)構(gòu)有順序文件、索引文件、索引順序文件、hash文件和B樹(shù)類文件等。數(shù)據(jù)庫(kù)中要求數(shù)據(jù)的組織和存儲(chǔ)必須直接或間接、顯示或隱含地體現(xiàn)數(shù)據(jù)之間的聯(lián)系。在關(guān)系數(shù)據(jù)庫(kù)中,實(shí)體及實(shí)體之間的聯(lián)系都用一種數(shù)據(jù)結(jié)構(gòu)——“表”來(lái)表示。

(3)存取路徑的組織:在關(guān)系數(shù)據(jù)庫(kù)中存取路徑和數(shù)據(jù)是分離的,對(duì)用戶是隱蔽的,存取路徑可以動(dòng)態(tài)建立,十分靈活。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,196評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,688評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,654評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,456評(píng)論 6 406
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,955評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,195評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,725評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,608評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,802評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,048評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,422評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,673評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,424評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,762評(píng)論 2 372