單元5 數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)_第1頁(yè)
單元5 數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)_第2頁(yè)
單元5 數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)_第3頁(yè)
單元5 數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)_第4頁(yè)
單元5 數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1單元

5數(shù)據(jù)庫(kù)技術(shù)基礎(chǔ)數(shù)據(jù)庫(kù)技術(shù)是研究數(shù)據(jù)庫(kù)的結(jié)構(gòu)、存儲(chǔ)、設(shè)計(jì)、管理和使用的一門軟件學(xué)科,數(shù)據(jù)庫(kù)技術(shù)是在操作系統(tǒng)的文件系統(tǒng)基礎(chǔ)上發(fā)展起來的,而且數(shù)據(jù)庫(kù)管理系統(tǒng)本身要在操作系統(tǒng)支持下才能工作。隨著計(jì)算機(jī)技術(shù)和相應(yīng)技術(shù)領(lǐng)域的發(fā)展,數(shù)據(jù)庫(kù)技術(shù)得到了極大的發(fā)展。軟件是新一代信息技術(shù)(InformationTechnology,IT)的靈魂,是數(shù)字經(jīng)濟(jì)發(fā)展的基礎(chǔ),而數(shù)據(jù)庫(kù)作為十分復(fù)雜、跨技術(shù)領(lǐng)域很多的關(guān)鍵基礎(chǔ)軟件,一般應(yīng)用軟件的數(shù)據(jù)處理都要與其進(jìn)行數(shù)據(jù)交互,所以數(shù)據(jù)庫(kù)對(duì)于計(jì)算產(chǎn)業(yè)的重要性不言而喻。22數(shù)據(jù)庫(kù)技術(shù)概述5.1數(shù)據(jù)庫(kù)系統(tǒng)5.25.35.45.55.65.7目錄數(shù)據(jù)庫(kù)管理系統(tǒng)關(guān)系數(shù)據(jù)庫(kù)結(jié)構(gòu)查詢語言非關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)設(shè)計(jì)基礎(chǔ)5.

1數(shù)據(jù)庫(kù)技術(shù)概述數(shù)據(jù)庫(kù)技術(shù)就是存儲(chǔ)、處理、管理數(shù)據(jù)的一門計(jì)算機(jī)技術(shù),是計(jì)算機(jī)信息系統(tǒng)的重要技術(shù)基礎(chǔ)和支柱。數(shù)據(jù)庫(kù)技術(shù)涉及許多基本概念,主要包括信息、數(shù)據(jù)、數(shù)據(jù)處理、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)以及數(shù)據(jù)庫(kù)系統(tǒng)等。35.1.1數(shù)據(jù)庫(kù)技術(shù)的相關(guān)概念1.?dāng)?shù)據(jù)描述事物的符號(hào)可稱為數(shù)據(jù),數(shù)據(jù)是數(shù)據(jù)庫(kù)中存儲(chǔ)的基本對(duì)象。例如,新生入學(xué)時(shí),一般要填寫入學(xué)登記,把自己的基本情況寫下來,例如:姓名為張三,性別是男,身高為170cm。那么,張三、男、170cm就可以稱為數(shù)據(jù)。數(shù)據(jù)表示了登記者的一種特征或特性。數(shù)據(jù)種類可以是數(shù)字、文字、圖形、圖像、聲音、語言等。2.?dāng)?shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織的、可共享的大量相關(guān)數(shù)據(jù)的集合。數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和存儲(chǔ)。數(shù)據(jù)庫(kù)具有較小冗余度、數(shù)據(jù)間聯(lián)系緊密而又有較高的數(shù)據(jù)獨(dú)立性等特點(diǎn)。數(shù)據(jù)庫(kù)有以下兩個(gè)比較典型的特點(diǎn)。①把在特定的環(huán)境中與某應(yīng)用程序相關(guān)的數(shù)據(jù)及其關(guān)系集中在一起,并按照一定的結(jié)構(gòu)形式進(jìn)行存儲(chǔ),即集成性。②數(shù)據(jù)庫(kù)中的數(shù)據(jù)能被多個(gè)應(yīng)用程序所使用,即共享性。3.?dāng)?shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)管理系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng)的核心組成部分,是對(duì)數(shù)據(jù)進(jìn)行管理的大型系統(tǒng)軟件,用戶在數(shù)據(jù)庫(kù)系統(tǒng)中的一些操作都是由數(shù)據(jù)庫(kù)管理系統(tǒng)來實(shí)現(xiàn)的。數(shù)據(jù)庫(kù)管理系統(tǒng)的功能主要包括數(shù)據(jù)庫(kù)的定義和操作、運(yùn)行和管理、建立和維護(hù)等。數(shù)據(jù)庫(kù)管理系統(tǒng)有以下特點(diǎn)。①采用復(fù)雜的數(shù)據(jù)模型表示數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)冗余小,易擴(kuò)充,實(shí)現(xiàn)了數(shù)據(jù)共享。②具有較高的數(shù)據(jù)和程序獨(dú)立性,數(shù)據(jù)庫(kù)的獨(dú)立性有物理獨(dú)立性和邏輯獨(dú)立性。③提供了方便的用戶接口。④提供了4個(gè)方面的數(shù)據(jù)控制功能,分別是并發(fā)控制、恢復(fù)、完整性和安全性。數(shù)據(jù)庫(kù)中各個(gè)應(yīng)用程序所使用的數(shù)據(jù)由數(shù)據(jù)庫(kù)管理系統(tǒng)統(tǒng)一規(guī)定,按照一定的數(shù)據(jù)模型組織和建立,由系統(tǒng)統(tǒng)一管理和集中控制。⑤增加了系統(tǒng)的靈活性。4.?dāng)?shù)據(jù)庫(kù)應(yīng)用系統(tǒng)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)(DatabaseApplicationSystem,DBAS)是在數(shù)據(jù)庫(kù)管理系統(tǒng)支持下建立的計(jì)算機(jī)應(yīng)用系統(tǒng)。數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)包括數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)、數(shù)據(jù)庫(kù)應(yīng)用程序、數(shù)據(jù)庫(kù)管理員、普通用戶、硬件,例如,以數(shù)據(jù)庫(kù)為基礎(chǔ)的財(cái)務(wù)管理系統(tǒng)、人事管理系統(tǒng)、圖書管理系統(tǒng)等。無論是面向內(nèi)部業(yè)務(wù)和管理的管理信息系統(tǒng),還是面向外部提供信息服務(wù)的開放式信息系統(tǒng),從實(shí)現(xiàn)技術(shù)角度而言,都是以數(shù)據(jù)庫(kù)為基礎(chǔ)和核心的計(jì)算機(jī)應(yīng)用系統(tǒng)。4數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)有以下特點(diǎn)。①結(jié)構(gòu)特性:與數(shù)據(jù)庫(kù)狀態(tài)有關(guān),即與數(shù)據(jù)模型所反映的實(shí)體及實(shí)體間的聯(lián)系的靜態(tài)特性有關(guān)。結(jié)構(gòu)設(shè)計(jì)就是設(shè)計(jì)各級(jí)數(shù)據(jù)庫(kù)模式,決定數(shù)據(jù)庫(kù)系統(tǒng)的信息內(nèi)容,由數(shù)據(jù)庫(kù)設(shè)計(jì)來實(shí)現(xiàn)。②行為特性:與數(shù)據(jù)庫(kù)狀態(tài)轉(zhuǎn)換有關(guān),即改變實(shí)體及其特性的操作。它決定數(shù)據(jù)庫(kù)系統(tǒng)的功能,由事務(wù)處理等應(yīng)用程序設(shè)計(jì)來實(shí)現(xiàn)。根據(jù)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的結(jié)構(gòu)和行為兩方面的特性,系統(tǒng)設(shè)計(jì)開發(fā)分為兩個(gè)部分:一部分是作為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)核心和基石的數(shù)據(jù)庫(kù)設(shè)計(jì)開發(fā);另一部分是相應(yīng)的數(shù)據(jù)庫(kù)應(yīng)用軟件的設(shè)計(jì)開發(fā)。這兩部分是緊密相關(guān)、相輔相成的,組成統(tǒng)一的數(shù)據(jù)庫(kù)工程。5.?dāng)?shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)(DatabaseSystem,DBS)是實(shí)現(xiàn)有組織地、動(dòng)態(tài)地存儲(chǔ)大量關(guān)聯(lián)數(shù)據(jù),方便多用戶訪問計(jì)算機(jī)的硬件、軟件和數(shù)據(jù)庫(kù)資源組成的系統(tǒng),即采用數(shù)據(jù)庫(kù)技術(shù)的計(jì)算機(jī)系統(tǒng)。數(shù)據(jù)庫(kù)系統(tǒng)有以下特點(diǎn)。①數(shù)據(jù)結(jié)構(gòu)化,數(shù)據(jù)的共享性、獨(dú)立性好,數(shù)據(jù)存儲(chǔ)粒度小,數(shù)據(jù)庫(kù)管理系統(tǒng)為用戶提供了友好的接口。②數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ)是數(shù)據(jù)模型,現(xiàn)有的數(shù)據(jù)庫(kù)系統(tǒng)均是基于某種數(shù)據(jù)模型的。③數(shù)據(jù)庫(kù)系統(tǒng)的核心是數(shù)據(jù)庫(kù)管理系統(tǒng)。④數(shù)據(jù)庫(kù)系統(tǒng)一般由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)、數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)、數(shù)據(jù)庫(kù)管理員、普通用戶和硬件構(gòu)成。56.?dāng)?shù)據(jù)庫(kù)系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)、數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)三者的區(qū)別與聯(lián)系(1)三者的區(qū)別①本質(zhì)不同。數(shù)據(jù)庫(kù)系統(tǒng)是一種軟件系統(tǒng),是為滿足數(shù)據(jù)處理的需求而發(fā)展起來的一種較為理想的數(shù)據(jù)處理系統(tǒng),也是一個(gè)為實(shí)際可運(yùn)行的存儲(chǔ)、維護(hù)和應(yīng)用系統(tǒng)提供數(shù)據(jù)的軟件系統(tǒng),是存儲(chǔ)介質(zhì)、處理對(duì)象和管理系統(tǒng)的集合體。數(shù)據(jù)庫(kù)管理系統(tǒng)是實(shí)現(xiàn)把用戶抽象的邏輯數(shù)據(jù)處理后,轉(zhuǎn)換成計(jì)算機(jī)中具體的物理數(shù)據(jù)處理的軟件。數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)是在數(shù)據(jù)庫(kù)管理系統(tǒng)的支持下建立的一種計(jì)算機(jī)應(yīng)用系統(tǒng)。②組成不同。數(shù)據(jù)庫(kù)系統(tǒng)通常由軟件、數(shù)據(jù)庫(kù)和數(shù)據(jù)管理員等組成。其軟件主要包括操作系統(tǒng)、各種宿主語言、實(shí)用程序以及數(shù)據(jù)庫(kù)管理系統(tǒng)。數(shù)據(jù)庫(kù)管理系統(tǒng)由數(shù)據(jù)庫(kù)語言和數(shù)據(jù)庫(kù)管理例行程序組成。數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)由數(shù)據(jù)庫(kù)系統(tǒng)、應(yīng)用程序、用戶等組成。(2)三者的聯(lián)系三者都用于管理數(shù)據(jù)庫(kù),其中數(shù)據(jù)庫(kù)系統(tǒng)和數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的組成成分中都包含數(shù)據(jù)庫(kù)管理系統(tǒng),這兩者都是通過數(shù)據(jù)庫(kù)管理系統(tǒng)來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的管理和操控的。65.1.2數(shù)據(jù)管理技術(shù)的發(fā)展數(shù)據(jù)庫(kù)技術(shù)是現(xiàn)代信息科學(xué)與技術(shù)的重要組成部分,是計(jì)算機(jī)數(shù)據(jù)處理與信息管理的核心。數(shù)據(jù)庫(kù)技術(shù)研究和解決了計(jì)算機(jī)信息處理過程中大量數(shù)據(jù)有效組織和存儲(chǔ)的問題,在數(shù)據(jù)庫(kù)系統(tǒng)中實(shí)現(xiàn)減少數(shù)據(jù)存儲(chǔ)冗余、數(shù)據(jù)共享、保障數(shù)據(jù)安全以及高效地檢索數(shù)據(jù)和處理數(shù)據(jù)。數(shù)據(jù)庫(kù)技術(shù)的根本目標(biāo)是解決數(shù)據(jù)的共享問題。數(shù)據(jù)庫(kù)技術(shù)是因數(shù)據(jù)管理任務(wù)的需要而產(chǎn)生的,數(shù)據(jù)管理是指對(duì)數(shù)據(jù)進(jìn)行分類、組織、編碼、存儲(chǔ)、檢索和維護(hù),是數(shù)據(jù)處理的核心問題。數(shù)據(jù)管理技術(shù)的發(fā)展經(jīng)歷了人工管理、文件系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)、高級(jí)數(shù)據(jù)庫(kù)、大數(shù)據(jù)等多個(gè)階段。75.1.3數(shù)據(jù)模型數(shù)據(jù)模型(DataModel)是數(shù)據(jù)特征的抽象,是數(shù)據(jù)庫(kù)系統(tǒng)中用以提供信息表示和操作手段的形式構(gòu)架。數(shù)據(jù)模型包括數(shù)據(jù)庫(kù)數(shù)據(jù)的結(jié)構(gòu)部分、操作部分和約束條件。1.?dāng)?shù)據(jù)模型按應(yīng)用層次分類數(shù)據(jù)模型按應(yīng)用層次分成3種類型,分別是概念數(shù)據(jù)模型、邏輯數(shù)據(jù)模型、物理數(shù)據(jù)模型。8(1)概念數(shù)據(jù)模型概念數(shù)據(jù)模型(ConceptualDataModel)是指按照用戶的觀點(diǎn)來對(duì)數(shù)據(jù)和信息進(jìn)行建模,是一種面向用戶、面向客觀世界的模型,主要用于數(shù)據(jù)庫(kù)設(shè)計(jì),用來描述世界的概念化結(jié)構(gòu)。它幫助數(shù)據(jù)庫(kù)設(shè)計(jì)人員在設(shè)計(jì)的初始階段,擺脫計(jì)算機(jī)系統(tǒng)及數(shù)據(jù)庫(kù)管理系統(tǒng)的具體技術(shù)問題,集中精力分析數(shù)據(jù)與數(shù)據(jù)之間的聯(lián)系等,與具體的數(shù)據(jù)管理系統(tǒng)無關(guān)。概念數(shù)據(jù)模型必須換成邏輯數(shù)據(jù)模型,才能在數(shù)據(jù)庫(kù)管理系統(tǒng)中實(shí)現(xiàn)。在概念數(shù)據(jù)模型中常用的有E-R(Entity-RelationshipApproach)模型(主要用實(shí)體-聯(lián)系方法表示,也稱為實(shí)體-聯(lián)系模型)、擴(kuò)充的E-R模型、面向?qū)ο竽P图爸^詞模型。(2)邏輯數(shù)據(jù)模型邏輯數(shù)據(jù)模型(LogicalDataModel)是一種面向數(shù)據(jù)庫(kù)系統(tǒng)的模型,是具體的數(shù)據(jù)庫(kù)管理系統(tǒng)所支持的數(shù)據(jù)模型,如層次數(shù)據(jù)模型(HierarchicalDataModel)、網(wǎng)狀數(shù)據(jù)模型(NetworkDataModel)等。此模型既面向用戶,又面向系統(tǒng),主要用于數(shù)據(jù)庫(kù)管理系統(tǒng)的實(shí)現(xiàn)。(3)物理數(shù)據(jù)模型物理數(shù)據(jù)模型(PhysicalDataModel)是一種面向計(jì)算機(jī)物理表示的模型,描述了數(shù)據(jù)在存儲(chǔ)介質(zhì)上的組織結(jié)構(gòu),它不但與具體的數(shù)據(jù)庫(kù)管理系統(tǒng)有關(guān),而且還與操作系統(tǒng)和硬件有關(guān)。每一種邏輯數(shù)據(jù)模型在實(shí)現(xiàn)時(shí)都有其對(duì)應(yīng)的物理數(shù)據(jù)模型。為了保證其獨(dú)立性與可移植性,大部分物理數(shù)據(jù)模型的實(shí)現(xiàn)工作由數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)完成,而設(shè)計(jì)者只設(shè)計(jì)索引、聚集等特殊結(jié)構(gòu)。92.基本數(shù)據(jù)模型基本數(shù)據(jù)模型(結(jié)構(gòu)數(shù)據(jù)模型)是指按照計(jì)算機(jī)系統(tǒng)的觀點(diǎn)來對(duì)數(shù)據(jù)和信息進(jìn)行建模,主要用于數(shù)據(jù)庫(kù)管理系統(tǒng)的實(shí)現(xiàn)?;緮?shù)據(jù)模型是數(shù)據(jù)庫(kù)系統(tǒng)的核心和基礎(chǔ),通常由數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和完整性約束3部分組成。其中數(shù)據(jù)結(jié)構(gòu)是對(duì)系統(tǒng)靜態(tài)特性的描述,數(shù)據(jù)操作是對(duì)系統(tǒng)動(dòng)態(tài)特性的描述,完整性約束是一組完整性規(guī)則的集合。數(shù)據(jù)庫(kù)管理系統(tǒng)總是基于某種基本數(shù)據(jù)模型,常用的基本數(shù)據(jù)模型有層次模型、網(wǎng)狀模型、關(guān)系模型和面向?qū)ο竽P?。?)層次模型層次模型是數(shù)據(jù)庫(kù)技術(shù)中發(fā)展較早、技術(shù)上比較成熟的一種數(shù)據(jù)模型。它把數(shù)據(jù)按自然的層次關(guān)系組織起來,以反映數(shù)據(jù)之間的隸屬關(guān)系。將數(shù)據(jù)組織成有向、有序的樹結(jié)構(gòu),也叫樹形結(jié)構(gòu)。用樹形結(jié)構(gòu)表示實(shí)體類型及實(shí)體間的聯(lián)系,采用關(guān)鍵字來訪問每一層次的每一部分。結(jié)構(gòu)中的節(jié)點(diǎn)代表數(shù)據(jù)記錄,連線描述位于不同節(jié)點(diǎn)的數(shù)據(jù)間的隸屬關(guān)系(一對(duì)多的關(guān)系)。層次模型的樹形結(jié)構(gòu)如圖5-8所示。層次模型的優(yōu)點(diǎn)是記錄之間的聯(lián)系通過指針來實(shí)現(xiàn),存取方便且速度快,查詢效率較高,數(shù)據(jù)修改和數(shù)據(jù)庫(kù)擴(kuò)展容易實(shí)現(xiàn),檢索關(guān)鍵屬性十分方便。層次模型的缺點(diǎn)是只能表示一對(duì)多聯(lián)系,雖然有多種輔助手段實(shí)現(xiàn)多對(duì)多聯(lián)系,但比較復(fù)雜,用戶不易掌握。層次順序的嚴(yán)格和復(fù)雜導(dǎo)致數(shù)據(jù)的查詢和更新操作很復(fù)雜,應(yīng)用程序的編寫也比較復(fù)雜。10(2)網(wǎng)狀模型網(wǎng)狀模型通過網(wǎng)狀結(jié)構(gòu)表示數(shù)據(jù)間的聯(lián)系,將數(shù)據(jù)組織成有向圖結(jié)構(gòu),用有向圖表示實(shí)體類型及實(shí)體間的聯(lián)系,用連接指令或指針來確定數(shù)據(jù)間的顯式連接關(guān)系,是具有多對(duì)多類型的數(shù)據(jù)組織方式。網(wǎng)狀模型中的節(jié)點(diǎn)代表數(shù)據(jù)記錄,連線描述位于不同節(jié)點(diǎn)的數(shù)據(jù)間的聯(lián)系,數(shù)據(jù)之間沒有明確的從屬關(guān)系,一個(gè)節(jié)點(diǎn)可與其他多個(gè)節(jié)點(diǎn)建立聯(lián)系,即節(jié)點(diǎn)之間的聯(lián)系是任意的,任何兩個(gè)節(jié)點(diǎn)之間都能發(fā)生聯(lián)系,可表示多對(duì)多的聯(lián)系。網(wǎng)狀模型結(jié)構(gòu)如圖5-9所示,該圖描述了教研室、教師、課程、學(xué)生、任課與選課之間的關(guān)系。網(wǎng)狀模型的優(yōu)點(diǎn)是記錄之間的聯(lián)系通過指針實(shí)現(xiàn),多對(duì)多聯(lián)系也容易實(shí)現(xiàn),查詢效率高,能明確而方便地表示數(shù)據(jù)間的復(fù)雜關(guān)系。其缺點(diǎn)是編寫應(yīng)用程序的過程比較復(fù)雜,程序員必須熟悉數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)。圖5-9網(wǎng)狀模型結(jié)構(gòu)圖5-8層次模型的樹形結(jié)構(gòu)11(3)關(guān)系模型關(guān)系模型用表格結(jié)構(gòu)表達(dá)實(shí)體集,用外鍵表示實(shí)體間的聯(lián)系,可以簡(jiǎn)單、靈活地表示各種實(shí)體及其關(guān)系。以記錄組或數(shù)據(jù)表的形式組織數(shù)據(jù),以便利用各種實(shí)體與屬性之間的關(guān)系進(jìn)行存儲(chǔ)和變換,不分層也無指針,是建立空間數(shù)據(jù)和屬性數(shù)據(jù)之間的關(guān)系的一種非常有效的數(shù)據(jù)組織方法。關(guān)系模型實(shí)體之間的聯(lián)系如圖5-10所示。關(guān)系模型的優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn)單、清晰、靈活,概念(關(guān)系)單一,用戶易懂、易用;滿足所有由布爾邏輯運(yùn)算和數(shù)學(xué)運(yùn)算規(guī)則形成的查詢要求;能搜索、組合和比較不同類型的數(shù)據(jù);增加和刪除數(shù)據(jù)非常方便;存取路徑對(duì)用戶透明,數(shù)據(jù)獨(dú)立性、安全性好,簡(jiǎn)化了數(shù)據(jù)庫(kù)開發(fā)工作。圖5-10關(guān)系模型實(shí)體之間的聯(lián)系12(4)面向?qū)ο竽P兔嫦驅(qū)ο竽P褪怯妹嫦驅(qū)ο蟮挠^點(diǎn)來描述現(xiàn)實(shí)世界實(shí)體的邏輯組織、對(duì)象間限制、聯(lián)系等的模型。面向?qū)ο髷?shù)據(jù)庫(kù)模式是類的集合,面向?qū)ο竽P吞峁┝艘环N類層次結(jié)構(gòu)。在面向?qū)ο髷?shù)據(jù)庫(kù)模式中,一組類可以形成一個(gè)類層次,一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫(kù)可能有多個(gè)類層次。在一個(gè)類層次中,一個(gè)類繼承其所有超類的全部屬性、方法和消息。5.

2數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)是為滿足數(shù)據(jù)處理的需求而發(fā)展起來的一種較為理想的數(shù)據(jù)處理系統(tǒng),也是一個(gè)為實(shí)際可運(yùn)行的存儲(chǔ)、維護(hù)和應(yīng)用系統(tǒng)提供數(shù)據(jù)的軟件系統(tǒng),是存儲(chǔ)介質(zhì)、處理對(duì)象和管理系統(tǒng)的集合體。135.2.1數(shù)據(jù)庫(kù)系統(tǒng)的發(fā)展階段數(shù)據(jù)庫(kù)系統(tǒng)的發(fā)展主要經(jīng)歷了以下3個(gè)階段。①第一代數(shù)據(jù)庫(kù)系統(tǒng)是指層次模型數(shù)據(jù)庫(kù)系統(tǒng)(基于樹形結(jié)構(gòu))和網(wǎng)狀模型數(shù)據(jù)庫(kù)系統(tǒng)(基于有向圖結(jié)構(gòu))。②第二代數(shù)據(jù)庫(kù)系統(tǒng)是指支持關(guān)系模型的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)[最先由埃德加·弗蘭克·科德(E.F.Codd)提出關(guān)系模型]。③面向?qū)ο蟮募夹g(shù)與數(shù)據(jù)庫(kù)技術(shù)相結(jié)合便產(chǎn)生了第三代數(shù)據(jù)庫(kù)系統(tǒng)。5.2.2算法的描述方法通常,一個(gè)完整的數(shù)據(jù)庫(kù)系統(tǒng)由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)、數(shù)據(jù)庫(kù)應(yīng)用程序、數(shù)據(jù)庫(kù)管理員、普通用戶和硬件組成。普通用戶與數(shù)據(jù)庫(kù)應(yīng)用程序交互,數(shù)據(jù)庫(kù)應(yīng)用程序與數(shù)據(jù)庫(kù)管理系統(tǒng)交互,數(shù)據(jù)庫(kù)管理系統(tǒng)訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù)。一個(gè)完整的數(shù)據(jù)庫(kù)系統(tǒng)還應(yīng)包括硬件,數(shù)據(jù)庫(kù)存放在計(jì)算機(jī)的外存中,數(shù)據(jù)庫(kù)應(yīng)用程序、數(shù)據(jù)庫(kù)管理系統(tǒng)等軟件都需要在計(jì)算機(jī)上運(yùn)行,因此,數(shù)據(jù)庫(kù)系統(tǒng)中必然會(huì)包含硬件,但本單元不涉及硬件方面的內(nèi)容。數(shù)據(jù)庫(kù)系統(tǒng)的組成結(jié)構(gòu)如圖5-11所示。14圖5-11數(shù)據(jù)庫(kù)系統(tǒng)的組成結(jié)構(gòu)1.?dāng)?shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)就是一個(gè)長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織的、集成的、可共享的、統(tǒng)一管理的相關(guān)數(shù)據(jù)集。數(shù)據(jù)庫(kù)是一個(gè)有結(jié)構(gòu)的數(shù)據(jù)集,也就是說,數(shù)據(jù)是按一定的數(shù)據(jù)模型來組成的,數(shù)據(jù)模型可用數(shù)據(jù)結(jié)構(gòu)來描述。數(shù)據(jù)模型不同,數(shù)據(jù)的組織結(jié)構(gòu)以及操縱數(shù)據(jù)的方法也就不同?,F(xiàn)在的數(shù)據(jù)庫(kù)大多數(shù)是以關(guān)系模型來組織數(shù)據(jù)的,可以簡(jiǎn)單地把關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)(即關(guān)系)理解為一張二維表。以關(guān)系模型組織起來的數(shù)據(jù)庫(kù)稱為關(guān)系數(shù)據(jù)庫(kù)。在關(guān)系數(shù)據(jù)庫(kù)中,不僅存放著各種用戶數(shù)據(jù),如與圖書有關(guān)的數(shù)據(jù)、與借閱者有關(guān)的數(shù)據(jù)、與借閱圖書有關(guān)的數(shù)據(jù)等,而且還存放著與各個(gè)表結(jié)構(gòu)定義有關(guān)的數(shù)據(jù),這些數(shù)據(jù)通常稱為元數(shù)據(jù)。數(shù)據(jù)庫(kù)具有以下特點(diǎn)。①數(shù)據(jù)庫(kù)是一個(gè)集成的數(shù)據(jù)集,也就是說,數(shù)據(jù)庫(kù)中集中存放著各種各樣的數(shù)據(jù)。②數(shù)據(jù)庫(kù)是一個(gè)為各種用戶共享的數(shù)據(jù)集,也就是說,數(shù)據(jù)庫(kù)中的數(shù)據(jù)可以被不同的用戶使用,每個(gè)用戶可以按自己的需求訪問相同的數(shù)據(jù)庫(kù)。③數(shù)據(jù)庫(kù)是一個(gè)統(tǒng)一管理的數(shù)據(jù)集,也就是說,數(shù)據(jù)庫(kù)由數(shù)據(jù)庫(kù)管理系統(tǒng)統(tǒng)一管理,任何數(shù)據(jù)訪問都是通過數(shù)據(jù)庫(kù)管理系統(tǒng)來完成的。④數(shù)據(jù)庫(kù)具有冗余度較小、數(shù)據(jù)間聯(lián)系緊密、數(shù)據(jù)獨(dú)立性較高等特點(diǎn)。152.?dāng)?shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)管理系統(tǒng)是一種用來管理數(shù)據(jù)庫(kù)的商品化軟件。訪問數(shù)據(jù)庫(kù)的請(qǐng)求都是通過數(shù)據(jù)庫(kù)管理系統(tǒng)來完成的。數(shù)據(jù)庫(kù)管理系統(tǒng)提供了對(duì)數(shù)據(jù)庫(kù)操作的許多命令,這些命令所組成的語言中常用的就是SQL。數(shù)據(jù)庫(kù)管理系統(tǒng)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,它為用戶或應(yīng)用程序提供訪問數(shù)據(jù)庫(kù)的方法,包括數(shù)據(jù)庫(kù)的建立、查詢、更新以及各種數(shù)據(jù)控制。常見的數(shù)據(jù)庫(kù)管理系統(tǒng)有Microsoft公司開發(fā)的SQLServer、Oracle公司開發(fā)的Oracle、Sybase公司開發(fā)的Sybase、IBM公司開發(fā)的DB2等。說明:“數(shù)據(jù)庫(kù)管理系統(tǒng)”這一術(shù)語通常指的是某個(gè)特定廠商的特定數(shù)據(jù)庫(kù)產(chǎn)品,如MySQL、MicrosoftSQLServer、MicrosoftAccess、Oracle等,但有時(shí)人們使用“數(shù)據(jù)庫(kù)”這個(gè)術(shù)語來代指數(shù)據(jù)庫(kù)管理系統(tǒng),這種用法是不恰當(dāng)?shù)?。甚至還有人用“數(shù)據(jù)庫(kù)”這一術(shù)語來代指數(shù)據(jù)庫(kù)系統(tǒng),這種用法就更不恰當(dāng)了。所以對(duì)于數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)、數(shù)據(jù)庫(kù)應(yīng)用程序、數(shù)據(jù)庫(kù)系統(tǒng)等術(shù)語要明確其含義,合理使用這些術(shù)語。163.?dāng)?shù)據(jù)庫(kù)應(yīng)用程序雖然已經(jīng)有了數(shù)據(jù)庫(kù)管理系統(tǒng),但是在很多情況下,數(shù)據(jù)庫(kù)管理系統(tǒng)無法滿足對(duì)數(shù)據(jù)管理的要求。數(shù)據(jù)庫(kù)應(yīng)用程序(DatabaseApplication)的使用可以滿足對(duì)數(shù)據(jù)管理的更高要求,還可以使數(shù)據(jù)管理過程更加直觀和友好。數(shù)據(jù)庫(kù)應(yīng)用程序負(fù)責(zé)與數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行通信、訪問和管理數(shù)據(jù)庫(kù)管理系統(tǒng)中存儲(chǔ)的數(shù)據(jù),允許用戶插入、修改、刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)。數(shù)據(jù)庫(kù)應(yīng)用程序是利用某種程序語言,為實(shí)現(xiàn)某些特定功能而編寫的程序,如查詢程序、報(bào)表程序等。這些程序?yàn)樽罱K用戶提供便于使用的可視化界面,最終用戶通過界面輸入必要的數(shù)據(jù),應(yīng)用程序接收最終用戶輸入的數(shù)據(jù),對(duì)其進(jìn)行加工處理,并將其轉(zhuǎn)換成數(shù)據(jù)庫(kù)管理系統(tǒng)能夠識(shí)別的SQL語句,然后傳給數(shù)據(jù)庫(kù)管理系統(tǒng),由數(shù)據(jù)庫(kù)管理系統(tǒng)執(zhí)行該語句,并負(fù)責(zé)從數(shù)據(jù)庫(kù)若干個(gè)數(shù)據(jù)表中找到符合查詢條件的數(shù)據(jù),再將查詢結(jié)果返回給應(yīng)用程序,應(yīng)用程序?qū)⒌玫降慕Y(jié)果顯示出來。由此可見,應(yīng)用程序?yàn)樽罱K用戶訪問數(shù)據(jù)庫(kù)提供了有效途徑和簡(jiǎn)便方法。4.用戶用戶是使用數(shù)據(jù)庫(kù)的人員,數(shù)據(jù)庫(kù)系統(tǒng)中的用戶一般有以下3類。(1)數(shù)據(jù)庫(kù)管理員(2)應(yīng)用程序員(3)最終用戶175.2.3數(shù)據(jù)庫(kù)系統(tǒng)的三級(jí)模式結(jié)構(gòu)1975年,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)的計(jì)算機(jī)與信息處理委員會(huì)下屬的標(biāo)準(zhǔn)計(jì)劃和需求委員會(huì)(ANSI-SPARC)的數(shù)據(jù)庫(kù)系統(tǒng)研究組為數(shù)據(jù)庫(kù)系統(tǒng)建立了三級(jí)模式結(jié)構(gòu),即將數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)劃分為3個(gè)層次:外模式、概念模式和內(nèi)模式。數(shù)據(jù)庫(kù)系統(tǒng)的層次結(jié)構(gòu)如圖5-12所示。18圖5-12數(shù)據(jù)庫(kù)系統(tǒng)的層次結(jié)構(gòu)1.?dāng)?shù)據(jù)庫(kù)系統(tǒng)結(jié)構(gòu)的3個(gè)層次(1)外模式外模式也稱為用戶模式或子模式,一個(gè)數(shù)據(jù)庫(kù)可以有多個(gè)外模式,但一個(gè)應(yīng)用程序只能使用一個(gè)外模式。外模式主要描述組成用戶視圖的各個(gè)記錄的組成、相互關(guān)系、數(shù)據(jù)項(xiàng)的特征、數(shù)據(jù)的安全性和完整性約束條件等。外模式是數(shù)據(jù)庫(kù)用戶(包括應(yīng)用程序員和最終用戶)能夠看見和使用的那部分?jǐn)?shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫(kù)用戶的數(shù)據(jù)視圖,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。外模式是應(yīng)用程序與數(shù)據(jù)庫(kù)系統(tǒng)之間的接口,是保證數(shù)據(jù)庫(kù)安全性的有效措施。用戶可使用數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)和數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)來定義數(shù)據(jù)庫(kù)的結(jié)構(gòu)和對(duì)數(shù)據(jù)庫(kù)進(jìn)行操縱。用戶可以使用數(shù)據(jù)操作語句或應(yīng)用程序去操作數(shù)據(jù)庫(kù)中的數(shù)據(jù),對(duì)用戶而言,只需要按照所定義的外模式進(jìn)行操作,而無須了解概念模式和內(nèi)模式等的內(nèi)部細(xì)節(jié)。(2)概念模式概念模式也稱為模式、邏輯模式或關(guān)系模式,是所有用戶共享的數(shù)據(jù)庫(kù)數(shù)據(jù)視圖,它構(gòu)建了數(shù)據(jù)項(xiàng)值的框架,每個(gè)數(shù)據(jù)庫(kù)只有一個(gè)概念模式。該模式提供了數(shù)據(jù)庫(kù)的整體邏輯結(jié)構(gòu)和特征的完整描述,主要涵蓋現(xiàn)實(shí)世界實(shí)體及其性質(zhì)與聯(lián)系,概念模式的定義包括記錄、數(shù)據(jù)項(xiàng)、數(shù)據(jù)完整性約束條件、安全性約束,以及記錄之間的聯(lián)系等。概念模式位于數(shù)據(jù)庫(kù)系統(tǒng)模式結(jié)構(gòu)的中間層,不涉及數(shù)據(jù)的物理存儲(chǔ)細(xì)節(jié)和硬件環(huán)境,與具體的數(shù)據(jù)值無關(guān),與具體的應(yīng)用程序、開發(fā)工具及程序設(shè)計(jì)語言也無關(guān)。19(3)內(nèi)模式內(nèi)模式也稱為存儲(chǔ)模式,一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)內(nèi)模式。內(nèi)模式是數(shù)據(jù)庫(kù)內(nèi)部數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)部的表示方式,它定義了數(shù)據(jù)庫(kù)內(nèi)部記錄的類型、存儲(chǔ)域的表示、存儲(chǔ)記錄的物理順序、文件的組織方式以及數(shù)據(jù)控制方面的細(xì)節(jié)等。內(nèi)模式是整個(gè)數(shù)據(jù)庫(kù)的底層表示,不同于物理層,它假設(shè)外存是無限的線性地址空間。概念模式是數(shù)據(jù)庫(kù)的中心與關(guān)鍵。內(nèi)模式、概念模式和外模式之間的關(guān)系如下。①內(nèi)模式依賴于概念模式,獨(dú)立于外模式和存儲(chǔ)設(shè)備。②外模式面向具體的應(yīng)用,獨(dú)立于內(nèi)模式和存儲(chǔ)設(shè)備。③應(yīng)用程序依賴于外模式,獨(dú)立于概念模式和內(nèi)模式。2.?dāng)?shù)據(jù)庫(kù)系統(tǒng)的3級(jí)抽象數(shù)據(jù)庫(kù)系統(tǒng)劃分為3個(gè)抽象級(jí):用戶級(jí)、概念級(jí)、物理級(jí)。(1)用戶級(jí)數(shù)據(jù)庫(kù)用戶級(jí)數(shù)據(jù)庫(kù)對(duì)應(yīng)于外模式,是非常接近用戶的一級(jí)數(shù)據(jù)庫(kù),是用戶可以看到和使用的數(shù)據(jù)庫(kù),又稱為用戶視圖。用戶級(jí)數(shù)據(jù)庫(kù)主要由外部記錄組成,不同的用戶級(jí)數(shù)據(jù)庫(kù)可以互相重疊,用戶的操作都是針對(duì)用戶視圖進(jìn)行的。一個(gè)數(shù)據(jù)庫(kù)可以有多個(gè)不同的用戶級(jí)數(shù)據(jù)庫(kù),每個(gè)用戶級(jí)數(shù)據(jù)庫(kù)由數(shù)據(jù)庫(kù)某一部分的抽象表示所組成。20(2)概念級(jí)數(shù)據(jù)庫(kù)概念級(jí)數(shù)據(jù)庫(kù)對(duì)應(yīng)于概念模式,介于用戶級(jí)數(shù)據(jù)庫(kù)和物理級(jí)數(shù)據(jù)庫(kù)之間,是所有用戶級(jí)數(shù)據(jù)庫(kù)的最小并集,是數(shù)據(jù)庫(kù)管理員可看到和使用的數(shù)據(jù)庫(kù),又稱為DBA視圖。概念級(jí)數(shù)據(jù)庫(kù)由概念記錄組成,一個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)只存在一個(gè)DBA視圖,它把數(shù)據(jù)庫(kù)作為一個(gè)整體的抽象表示。概念級(jí)數(shù)據(jù)庫(kù)把用戶級(jí)數(shù)據(jù)庫(kù)有機(jī)地結(jié)合成一個(gè)整體,綜合平衡考慮所有用戶要求,實(shí)現(xiàn)數(shù)據(jù)的一致性,最大限度降低數(shù)據(jù)冗余,準(zhǔn)確地反映數(shù)據(jù)間的聯(lián)系。(3)物理級(jí)數(shù)據(jù)庫(kù)物理級(jí)數(shù)據(jù)庫(kù)對(duì)應(yīng)于內(nèi)模式,是數(shù)據(jù)庫(kù)的底層表示,它描述數(shù)據(jù)的實(shí)際存儲(chǔ)組織,是非常接近物理存儲(chǔ)的一級(jí)數(shù)據(jù)庫(kù),又稱為內(nèi)部視圖。物理級(jí)數(shù)據(jù)庫(kù)由內(nèi)部記錄組成,物理級(jí)數(shù)據(jù)庫(kù)并不是真正的物理存儲(chǔ),而是非常接近物理存儲(chǔ)。213.?dāng)?shù)據(jù)庫(kù)系統(tǒng)的兩級(jí)獨(dú)立性數(shù)據(jù)庫(kù)系統(tǒng)兩級(jí)獨(dú)立性是指物理獨(dú)立性和邏輯獨(dú)立性,數(shù)據(jù)庫(kù)系統(tǒng)的3個(gè)抽象級(jí)通過兩級(jí)映射(外模式-模式映射,模式-內(nèi)模式映射)進(jìn)行相互轉(zhuǎn)換,形成統(tǒng)一的整體。(1)物理獨(dú)立性物理獨(dú)立性是指用戶的應(yīng)用程序與存儲(chǔ)在磁盤上的數(shù)據(jù)庫(kù)中的數(shù)據(jù)是相互獨(dú)立的。當(dāng)數(shù)據(jù)的物理存儲(chǔ)改變時(shí),應(yīng)用程序不需要改變。物理獨(dú)立性存在于概念模式和內(nèi)模式之間的映射轉(zhuǎn)換,用于說明物理組織發(fā)生變化時(shí)應(yīng)用程序的獨(dú)立程度。(2)邏輯獨(dú)立性邏輯獨(dú)立性是指用戶的應(yīng)用程序與數(shù)據(jù)庫(kù)中的邏輯結(jié)構(gòu)是相互獨(dú)立的。當(dāng)數(shù)據(jù)的邏輯結(jié)構(gòu)改變時(shí),應(yīng)用程序不需要改變。邏輯獨(dú)立性存在于外模式和概念模式之間的映射轉(zhuǎn)換,用于說明概念模式發(fā)生變化時(shí)應(yīng)用程序的獨(dú)立程度。邏輯獨(dú)立性比物理獨(dú)立性更難實(shí)現(xiàn)。225.2.4幾種新型的數(shù)據(jù)庫(kù)系統(tǒng)1.面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)2.并行數(shù)據(jù)庫(kù)系統(tǒng)3.分布式數(shù)據(jù)庫(kù)系統(tǒng)4.多媒體數(shù)據(jù)庫(kù)系統(tǒng)5.演繹數(shù)據(jù)庫(kù)系統(tǒng)6.主動(dòng)數(shù)據(jù)庫(kù)系統(tǒng)7.專家數(shù)據(jù)庫(kù)系統(tǒng)8.空間數(shù)據(jù)庫(kù)系統(tǒng)9.工程數(shù)據(jù)庫(kù)系統(tǒng)10.?dāng)?shù)據(jù)倉(cāng)庫(kù)235.

3數(shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)管理系統(tǒng)是一種操縱和管理數(shù)據(jù)庫(kù)的大型軟件,是一種能夠提供數(shù)據(jù)錄入、修改、查詢的數(shù)據(jù)操作軟件。用戶通過數(shù)據(jù)庫(kù)管理系統(tǒng)訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù),數(shù)據(jù)庫(kù)管理員通過數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行數(shù)據(jù)庫(kù)的維護(hù)工作。245.3.1數(shù)據(jù)庫(kù)管理系統(tǒng)的功能數(shù)據(jù)庫(kù)管理系統(tǒng)用于建立、使用和維護(hù)數(shù)據(jù)庫(kù),它可以支持多個(gè)應(yīng)用程序和用戶用不同的方法在同一時(shí)刻或不同時(shí)刻去建立、修改和詢問數(shù)據(jù)庫(kù)。它對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫(kù)的安全性和完整性。數(shù)據(jù)庫(kù)系統(tǒng)中只有數(shù)據(jù)庫(kù)管理系統(tǒng)才能直接訪問數(shù)據(jù)庫(kù),如MySQL就是一種數(shù)據(jù)庫(kù)管理系統(tǒng),其主要優(yōu)點(diǎn)是跨平臺(tái)、開放源代碼、速度快、成本低,是目前十分流行的開源小型數(shù)據(jù)庫(kù)管理系統(tǒng)。1.?dāng)?shù)據(jù)定義數(shù)據(jù)庫(kù)管理系統(tǒng)提供數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL),DDL主要用于建立、修改數(shù)據(jù)庫(kù)的庫(kù)結(jié)構(gòu),DDL所描述的庫(kù)結(jié)構(gòu)僅僅給出了數(shù)據(jù)庫(kù)的框架,通過DDL可以方便地定義數(shù)據(jù)庫(kù)中的各種對(duì)象。例如,可以使用DDL定義圖書借閱數(shù)據(jù)庫(kù)中的圖書信息數(shù)據(jù)表、借閱者數(shù)據(jù)表、圖書借閱數(shù)據(jù)表的表結(jié)構(gòu)。2.?dāng)?shù)據(jù)操縱數(shù)據(jù)庫(kù)管理系統(tǒng)提供數(shù)據(jù)操縱語言(DataManipulationLanguage,DML),供用戶實(shí)現(xiàn)對(duì)數(shù)據(jù)的追加、刪除、更新、查詢等操作。通過DML可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)進(jìn)行的基本操作,例如,向數(shù)據(jù)表中插入一行數(shù)據(jù)、修改數(shù)據(jù)表中的數(shù)據(jù)、刪除數(shù)據(jù)表中的行、查詢數(shù)據(jù)表中的數(shù)據(jù)等。3.安全控制和并發(fā)控制數(shù)據(jù)庫(kù)管理系統(tǒng)提供數(shù)據(jù)控制語言(DataControlLanguage,DCL)。通過DCL可以控制什么情況下誰可以執(zhí)行什么樣的數(shù)據(jù)操作。另外,由于數(shù)據(jù)庫(kù)是共享的,多個(gè)用戶可以同時(shí)訪問數(shù)據(jù)庫(kù)(并發(fā)操作),這可能會(huì)引起訪問沖突,從而導(dǎo)致數(shù)據(jù)的不一致。數(shù)據(jù)庫(kù)管理系統(tǒng)還提供并發(fā)控制的功能,以避免并發(fā)操作時(shí)可能帶來的數(shù)據(jù)不一致的問題。254.?dāng)?shù)據(jù)庫(kù)的運(yùn)行管理數(shù)據(jù)庫(kù)的運(yùn)行管理包括多用戶環(huán)境下的并發(fā)控制、安全性檢查和存取限制控制、完整性檢查和執(zhí)行、運(yùn)行日志的組織管理、事務(wù)的管理和自動(dòng)恢復(fù)(即保證事務(wù)的原子性)等功能,這些功能保證了數(shù)據(jù)庫(kù)系統(tǒng)的正常運(yùn)行。5.?dāng)?shù)據(jù)組織、存儲(chǔ)與管理數(shù)據(jù)庫(kù)管理系統(tǒng)要分類組織、存儲(chǔ)和管理各種數(shù)據(jù),包括數(shù)據(jù)字典、用戶數(shù)據(jù)、存取路徑等,需要確定以何種文件結(jié)構(gòu)和存取方式在存儲(chǔ)級(jí)上組織這些數(shù)據(jù),如何實(shí)現(xiàn)數(shù)據(jù)之間的聯(lián)系。6.?dāng)?shù)據(jù)庫(kù)的保護(hù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)是信息社會(huì)的戰(zhàn)略資源,所以對(duì)數(shù)據(jù)的保護(hù)至關(guān)重要。數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)數(shù)據(jù)庫(kù)的保護(hù)通過4個(gè)方面來實(shí)現(xiàn):數(shù)據(jù)庫(kù)的恢復(fù)、數(shù)據(jù)庫(kù)的并發(fā)控制、數(shù)據(jù)庫(kù)的完整性控制、數(shù)據(jù)庫(kù)的安全性控制。數(shù)據(jù)庫(kù)管理系統(tǒng)的其他保護(hù)功能還有系統(tǒng)緩沖區(qū)的管理、數(shù)據(jù)存儲(chǔ)的某些自適應(yīng)調(diào)節(jié)等。267.?dāng)?shù)據(jù)庫(kù)的維護(hù)數(shù)據(jù)庫(kù)的維護(hù)包括數(shù)據(jù)庫(kù)的數(shù)據(jù)載入、轉(zhuǎn)換、轉(zhuǎn)儲(chǔ),數(shù)據(jù)庫(kù)的重組和重構(gòu),性能監(jiān)控等功能,這些功能分別由各個(gè)應(yīng)用程序來完成。8.?dāng)?shù)據(jù)庫(kù)事務(wù)管理數(shù)據(jù)庫(kù)中的數(shù)據(jù)是可供多個(gè)用戶同時(shí)使用的共享數(shù)據(jù),為保證數(shù)據(jù)能夠安全、可靠地運(yùn)行,數(shù)據(jù)庫(kù)管理系統(tǒng)提供了事務(wù)管理功能,該功能保證數(shù)據(jù)能夠并發(fā)使用并且不會(huì)產(chǎn)生相互干擾的情況,而且在數(shù)據(jù)庫(kù)發(fā)生故障時(shí)能夠?qū)?shù)據(jù)庫(kù)進(jìn)行正確恢復(fù)。9.?dāng)?shù)據(jù)庫(kù)備份與恢復(fù)數(shù)據(jù)庫(kù)管理系統(tǒng)提供了備份數(shù)據(jù)庫(kù)和恢復(fù)數(shù)據(jù)庫(kù)的功能。10.傳送數(shù)據(jù)與相互通信數(shù)據(jù)庫(kù)管理系統(tǒng)提供負(fù)責(zé)數(shù)據(jù)傳輸?shù)慕涌?,這些接口與操作系統(tǒng)的聯(lián)機(jī)處理、分時(shí)系統(tǒng)以及遠(yuǎn)程作業(yè)輸入相關(guān)。網(wǎng)絡(luò)環(huán)境下的數(shù)據(jù)庫(kù)系統(tǒng)還應(yīng)該具有數(shù)據(jù)庫(kù)管理系統(tǒng)與網(wǎng)絡(luò)中其他軟件系統(tǒng)的通信功能以及數(shù)據(jù)庫(kù)之間的互操作功能。275.3.2常用的數(shù)據(jù)庫(kù)管理系統(tǒng)產(chǎn)品介紹目前常用的數(shù)據(jù)庫(kù)管理系統(tǒng)產(chǎn)品主要是MySQL、SQLServer、Oracle、Sybase、DB2、Access等產(chǎn)品。不同的數(shù)據(jù)庫(kù)管理系統(tǒng),有不同的特點(diǎn),也有相對(duì)獨(dú)立的應(yīng)用領(lǐng)域和用戶支持。1.MySQLMySQL是一種開源小型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),MySQL現(xiàn)隸屬于Oracle公司。MySQL軟件分為社區(qū)版和商業(yè)版,其體積小、速度快、總體擁有成本低,目前被廣泛地應(yīng)用在中小型網(wǎng)站中。2.SQLServerSQLServer是由微軟公司開發(fā)和推廣的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),具有使用方便、可伸縮性好、與相關(guān)軟件集成程度高等優(yōu)點(diǎn)。SQLServer數(shù)據(jù)庫(kù)引擎為關(guān)系型數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)提供了安全、可靠的存儲(chǔ)功能,使用戶可以構(gòu)建和管理用于業(yè)務(wù)的高可用和高性能的數(shù)據(jù)應(yīng)用程序。SQLServer的最初版本適用于中小型企業(yè),但是應(yīng)用范圍在不斷擴(kuò)展。3.OracleOracle是Oracle(甲骨文)公司提供的以分布式數(shù)據(jù)庫(kù)為核心的一組軟件產(chǎn)品,是目前使用最為廣泛的數(shù)據(jù)庫(kù)管理系統(tǒng)之一。Oracle作為一個(gè)通用的數(shù)據(jù)庫(kù)管理系統(tǒng),它具有完整的數(shù)據(jù)管理28理功能;作為一個(gè)關(guān)系數(shù)據(jù)庫(kù),它是一款關(guān)系完備的產(chǎn)品;作為分布式數(shù)據(jù)庫(kù),它實(shí)現(xiàn)了分布式處理功能。Oracle被認(rèn)為是業(yè)界比較成功的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),是一種運(yùn)行穩(wěn)定、功能齊全、使用方便、可移植性好、高效率、可靠性好、適應(yīng)高吞吐量的數(shù)據(jù)庫(kù)管理系統(tǒng)。對(duì)于數(shù)據(jù)量大、事務(wù)處理繁忙、安全性要求高的企業(yè),Oracle是一個(gè)比較理想的選擇。隨著Internet的普及,Oracle適時(shí)地將自己的產(chǎn)品緊密地和網(wǎng)絡(luò)計(jì)算結(jié)合起來,成為在Internet應(yīng)用領(lǐng)域的數(shù)據(jù)庫(kù)廠商中的佼佼者。Oracle可以運(yùn)行在UNIX、Windows等主流操作系統(tǒng)平臺(tái)上,支持幾乎所有的工業(yè)標(biāo)準(zhǔn),并獲得了最高級(jí)別的ISO標(biāo)準(zhǔn)安全性認(rèn)證。Oracle采用完全開放策略,可以使客戶選擇合適的解決方案,同時(shí)對(duì)開發(fā)商提供全力支持。4.SybaseSybase是Sybase公司研制的一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),是一種典型的可運(yùn)行在UNIX或Windows平臺(tái)上C/S環(huán)境下的大型數(shù)據(jù)庫(kù)管理系統(tǒng)。Sybase提供了一套應(yīng)用程序編程接口,可以與非Sybase數(shù)據(jù)源及服務(wù)器集成,允許在多個(gè)數(shù)據(jù)庫(kù)之間復(fù)制數(shù)據(jù),適用于創(chuàng)建多層應(yīng)用。295.DB2DB2是IBM公司研制的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),主要應(yīng)用于大型應(yīng)用系統(tǒng),具有較好的可伸縮性,可支持從大型計(jì)算機(jī)到單用戶環(huán)境。DB2有很多不同的版本,可以運(yùn)行在從掌上產(chǎn)品到大型計(jì)算機(jī)的不同的終端上。DB2提供了高層次的數(shù)據(jù)利用性、完整性、安全性、可恢復(fù)性,以及從小規(guī)模到大規(guī)模應(yīng)用程序的執(zhí)行能力,支持無關(guān)平臺(tái)的基本功能和SQL命令。1968年,IBM公司推出的信息管理系統(tǒng)(InformationManagementSystem,IMS)是層次模型數(shù)據(jù)庫(kù)系統(tǒng)的典型代表,是第一個(gè)大型的商用數(shù)據(jù)庫(kù)管理系統(tǒng)。1970年,IBM公司的研究員首次提出了數(shù)據(jù)庫(kù)系統(tǒng)的關(guān)系模型,開始了對(duì)數(shù)據(jù)庫(kù)關(guān)系方法和關(guān)系數(shù)據(jù)理論的研究,為數(shù)據(jù)庫(kù)技術(shù)奠定了基礎(chǔ)。IBM公司在關(guān)系數(shù)據(jù)庫(kù)理論方面一直走在業(yè)界的前列。DB2于1983年首次發(fā)布,2001年,IBM公司兼并了數(shù)據(jù)庫(kù)公司Informix,并將其所擁有的先進(jìn)特性融入DB2中,使DB2的系統(tǒng)性能和功能有了進(jìn)一步提高。6.AccessAccess是微軟公司在1992年推出的一個(gè)入門級(jí)小型桌面數(shù)據(jù)庫(kù)管理系統(tǒng),它具有界面友好、易學(xué)易用、開發(fā)簡(jiǎn)單、接口靈活,可以方便地生成各種數(shù)據(jù)對(duì)象,利用存儲(chǔ)的數(shù)據(jù)建立窗體和報(bào)表等特點(diǎn)。作為Office套件的一部分,Access可以與Office集成,實(shí)現(xiàn)無縫連接,是一種典型的桌面數(shù)據(jù)庫(kù)管理系統(tǒng)。但其性能和安全性都一般。Access能夠利用Web檢索和發(fā)布數(shù)據(jù),實(shí)現(xiàn)與互聯(lián)網(wǎng)的連接,主要適用于中小型企業(yè)應(yīng)用系統(tǒng),或作為C/S系統(tǒng)中的客戶端數(shù)據(jù)庫(kù)。305.3.3國(guó)產(chǎn)數(shù)據(jù)庫(kù)管理系統(tǒng)簡(jiǎn)介隨著數(shù)字經(jīng)濟(jì)的發(fā)展,數(shù)據(jù)量爆炸式增長(zhǎng),國(guó)產(chǎn)化替代加速,國(guó)產(chǎn)數(shù)據(jù)庫(kù)迎來巨大機(jī)遇。從國(guó)內(nèi)市場(chǎng)競(jìng)爭(zhēng)格局來看,華為、阿里巴巴、達(dá)夢(mèng)數(shù)據(jù)庫(kù)、人大金倉(cāng)等國(guó)產(chǎn)數(shù)據(jù)庫(kù)供應(yīng)商占據(jù)的市場(chǎng)份額越來越大。國(guó)產(chǎn)數(shù)據(jù)庫(kù)管理系統(tǒng)廠商經(jīng)過多年的技術(shù)研發(fā)和經(jīng)驗(yàn)積累,經(jīng)歷引進(jìn)技術(shù)、研究、創(chuàng)新再自主創(chuàng)新,實(shí)力不斷增強(qiáng),產(chǎn)品應(yīng)用越來越廣泛,專利申請(qǐng)數(shù)量越來越多,國(guó)產(chǎn)陣營(yíng)日益強(qiáng)盛,完全實(shí)現(xiàn)國(guó)產(chǎn)數(shù)據(jù)庫(kù)指日可待。1.華為GaussDB:AI-Native分布式數(shù)據(jù)庫(kù)2.華為openGauss:開源關(guān)系數(shù)據(jù)庫(kù)3.阿里云PolarDB:關(guān)系型云原生分布式數(shù)據(jù)庫(kù)4.螞蟻集團(tuán)OceanBase:原生分布式關(guān)系數(shù)據(jù)庫(kù)5.阿里云AnalyticDB:實(shí)時(shí)分析型數(shù)據(jù)庫(kù)316.達(dá)夢(mèng)數(shù)據(jù)庫(kù)DM8:通用關(guān)系數(shù)據(jù)庫(kù)7.人大金倉(cāng)KingbaseES:關(guān)系數(shù)據(jù)庫(kù)8.南大通用GBase:數(shù)據(jù)庫(kù)產(chǎn)品9.PingCAPTiDB:分布式關(guān)系數(shù)據(jù)庫(kù)10.騰訊云TDSQL:分布式數(shù)據(jù)庫(kù)5.

4關(guān)系數(shù)據(jù)庫(kù)關(guān)系數(shù)據(jù)庫(kù)是指使用關(guān)系模型來組織和管理數(shù)據(jù)的數(shù)據(jù)庫(kù)。325.4.1關(guān)系的基本運(yùn)算關(guān)系運(yùn)算是一個(gè)數(shù)學(xué)名詞?;具\(yùn)算有兩類:一類是傳統(tǒng)的集合運(yùn)算(并、差、交等),另一類是專門的關(guān)系運(yùn)算(選擇、投影、連接、除法等)。有些查詢需要進(jìn)行幾個(gè)基本運(yùn)算的組合,經(jīng)過若干步驟才能完成。1.傳統(tǒng)的集合運(yùn)算傳統(tǒng)的集合運(yùn)算包括并(Union)、差(Difference)、交(Intersection)、笛卡兒積等,均為二目運(yùn)算。這些針對(duì)集合的運(yùn)算是以元組為運(yùn)算的基本元素進(jìn)行的,是從行的角度展開的運(yùn)算。2.專門的關(guān)系運(yùn)算關(guān)系運(yùn)算的運(yùn)算對(duì)象是關(guān)系,運(yùn)算結(jié)果亦為關(guān)系。(1)選擇運(yùn)算從關(guān)系中找出滿足給定條件的那些元組(行)稱為選擇(Selection)。其中的條件是以邏輯表達(dá)式給出的,值為真的元組將被選取。這種運(yùn)算是從水平方向抽取元組。(2)投影運(yùn)算從關(guān)系模式中挑選若干屬性(列)組成新的關(guān)系稱為投影(Projection)。這是從列的角度進(jìn)行的運(yùn)算,相當(dāng)于對(duì)關(guān)系進(jìn)行垂直分解。投影之后不僅取消了原關(guān)系中的某些列,而且還可能取消某些元組,這是因?yàn)槿∠四承傩裕校┖?,可能出現(xiàn)重復(fù)的行,應(yīng)該取消這些完全相同的行。(3)連接運(yùn)算連接(Join)運(yùn)算是從兩個(gè)關(guān)系的笛卡兒積中選擇屬性滿足一定條件的元組,將不同的兩個(gè)關(guān)系連接成一個(gè)新關(guān)系。新關(guān)系中的元組是通過連接原有關(guān)系的元組而得到的。新關(guān)系中屬性的名字采用原有關(guān)系屬性名加上原有關(guān)系名作為前綴,這種命名方法保證了新關(guān)系中屬性名的唯一性,盡管原有不同關(guān)系中的屬性可能是同名的。(4)除法運(yùn)算在關(guān)系代數(shù)中,除法運(yùn)算可理解為笛卡兒積的逆運(yùn)算。335.4.2關(guān)系數(shù)據(jù)庫(kù)概述關(guān)系數(shù)據(jù)庫(kù)是一種數(shù)據(jù)庫(kù)類型,關(guān)系數(shù)據(jù)庫(kù)是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫(kù),其以行和列的形式存儲(chǔ)數(shù)據(jù),以便用戶理解和快速訪問。關(guān)系模型可以簡(jiǎn)單理解為二維表格模型,關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合、關(guān)系完整性約束3部分組成。而關(guān)系數(shù)據(jù)庫(kù)就是由二維表及其之間的關(guān)系組成的數(shù)據(jù)組織。在關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)存放在包含一系列行和列的二維表中,一個(gè)關(guān)系數(shù)據(jù)庫(kù)包含多個(gè)二維表。關(guān)系數(shù)據(jù)庫(kù)所包含的表之間是有關(guān)聯(lián)的,關(guān)聯(lián)主要由主鍵和外鍵所體現(xiàn)的參照關(guān)系實(shí)現(xiàn)。用戶通過查詢來檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù),而查詢是一系列用于限定數(shù)據(jù)庫(kù)中某些區(qū)域的執(zhí)行代碼。關(guān)系數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)如下。①易于維護(hù):都使用表結(jié)構(gòu),格式一致。②使用方便:通用的SQL可實(shí)現(xiàn)復(fù)雜查詢。③復(fù)雜操作:支持SQL,可實(shí)現(xiàn)一個(gè)表及多個(gè)表之間非常復(fù)雜的查詢。34關(guān)系數(shù)據(jù)庫(kù)的缺點(diǎn)如下。①讀寫性能比較差,尤其是對(duì)海量數(shù)據(jù)的讀寫效率。②表的結(jié)構(gòu)固定,靈活度稍欠缺。③難以滿足高并發(fā)讀寫需求,對(duì)傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)來說,硬盤I/O是一個(gè)很大的瓶頸。傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)旨在處理大量結(jié)構(gòu)化數(shù)據(jù),這使得關(guān)系數(shù)據(jù)庫(kù)特別適用于處理結(jié)構(gòu)化的大數(shù)據(jù),因?yàn)樗鼈円蕾囉赟QL,并且可以使用數(shù)據(jù)庫(kù)管理系統(tǒng)控制數(shù)據(jù)。但是,更大、更復(fù)雜的數(shù)據(jù)集包含的數(shù)據(jù)種類越來越多,意味著數(shù)據(jù)的結(jié)構(gòu)化程度越來越低,且來自新的源,這就需要使用支持處理非結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù)的非關(guān)系數(shù)據(jù)庫(kù)(如NoSQL)。355.4.3關(guān)系數(shù)據(jù)庫(kù)的相關(guān)概念1.關(guān)系模型關(guān)系模型是一種以二維表的形式表示實(shí)體數(shù)據(jù)和實(shí)體之間聯(lián)系的數(shù)據(jù)模型,關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)是一個(gè)由行和列組成的二維表格,每個(gè)二維表稱為關(guān)系,每個(gè)二維表都有一個(gè)名字,如“圖書信息”“出版社”等。目前大多數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)所管理的數(shù)據(jù)庫(kù)都是關(guān)系數(shù)據(jù)庫(kù),MySQL數(shù)據(jù)庫(kù)就是關(guān)系數(shù)據(jù)庫(kù)。例如,表5-5所示的“圖書信息”數(shù)據(jù)表中和表5-6所示“出版社信息”數(shù)據(jù)表就是兩張二維表,分別描述“圖書”實(shí)體對(duì)象和“出版社”實(shí)體對(duì)象。另外“圖書信息”數(shù)據(jù)表和“出版社信息”數(shù)據(jù)表有一個(gè)共同字段,即出版社ID,在“圖書信息”數(shù)據(jù)表中該字段的命名為“出版社”,在“出版社信息”數(shù)據(jù)表中該字段的命名為“出版社ID”,雖然命名有所區(qū)別,但其數(shù)據(jù)類型、長(zhǎng)度相同,字段值有對(duì)應(yīng)關(guān)系,這兩個(gè)數(shù)據(jù)表可以通過該字段建立關(guān)聯(lián)。3637商品編號(hào)圖書名稱價(jià)格/元出版社ISBN作者12528944PPT設(shè)計(jì)從入門到精通7919787115454614張曉景12563157給Python點(diǎn)顏色青少年學(xué)編程59.819787115512321佘友軍12520987樂學(xué)Python編程做個(gè)游戲很簡(jiǎn)單69.849787302519867王振世12366901教學(xué)設(shè)計(jì)、實(shí)施的診斷與優(yōu)化48.839787121341427陳承歡12325352Python程序設(shè)計(jì)39.629787040493726黃銳軍出版社ID出版社名稱出版社簡(jiǎn)稱出版社地址郵政編碼1人民郵電出版社人郵北京市豐臺(tái)區(qū)成壽寺路11號(hào)1001642高等教育出版社高教北京西城區(qū)德外大街4號(hào)1001203電子工業(yè)出版社電子北京市海淀區(qū)萬壽路173信箱1000364清華大學(xué)出版社清華北京市海淀區(qū)清華園街道雙清路清華大學(xué)學(xué)研大廈A座1000845機(jī)械工業(yè)出版社機(jī)工北京市西城區(qū)百萬莊大街22號(hào)100037表5-5“圖書信息”數(shù)據(jù)表表5-6“出版社信息”數(shù)據(jù)表2.實(shí)體實(shí)體是指客觀存在并可相互區(qū)別的事物,可以是人或物,也可以是抽象事件,如“圖書”“出版社”都屬于實(shí)體。同一類實(shí)體的集合稱為實(shí)體集。3.關(guān)系關(guān)系是一種規(guī)范化了的二維表格中行的集合,一個(gè)關(guān)系就是一張二維表,表5-5所示數(shù)據(jù)表和表5-6所示數(shù)據(jù)表就是兩個(gè)關(guān)系。經(jīng)常將關(guān)系簡(jiǎn)稱為表。4.元組二維表中的一行稱為一個(gè)元組,元組也稱為記錄。一個(gè)二維表由多行組成,表中不允許出現(xiàn)重復(fù)的元組,如表5-5中有5行(不包括第1行),即5條記錄。5.屬性二維表中的一列稱為一個(gè)屬性,屬性也稱為字段或數(shù)據(jù)項(xiàng)。如表5-5中有6列,即6個(gè)字段,分別為商品編號(hào)、圖書名稱、價(jià)格/元、出版社、ISBN和作者。屬性值是指屬性的取值,每個(gè)屬性的取值范圍稱為值域,簡(jiǎn)稱域,如性別的取值是“男”或“女”。6.域域是屬性值的取值范圍。如“性別”的域?yàn)椤澳小薄芭?,“課程成績(jī)”的域可以為“0~100”或者為“A、B、C、D”之類的等級(jí)。387.候選關(guān)鍵字候選關(guān)鍵字(CandidateKey)也稱為候選碼,它是能夠唯一確定一個(gè)元組的屬性或?qū)傩缘慕M合。一個(gè)關(guān)系可能會(huì)存在多個(gè)候選關(guān)鍵字。如表5-5中“商品編號(hào)”和“ISBN”屬性都能唯一地確定表中的每一行,是“圖書信息”表的候選關(guān)鍵字,其他屬性都有可能會(huì)出現(xiàn)重復(fù)的值,不能作為該表的候選關(guān)鍵字。表5-6中“出版社ID”“出版社名稱”“出版社簡(jiǎn)稱”都可以作為“出版社信息”表的候選關(guān)鍵字。8.主鍵主鍵(PrimaryKey)也稱為主關(guān)鍵字。在一個(gè)表中可能存在多個(gè)候選關(guān)鍵字,選定其中的一個(gè)用來唯一標(biāo)識(shí)表中的每一行,將其稱為主關(guān)鍵字或主鍵。如表5-5中有2個(gè)候選關(guān)鍵字“商品編號(hào)”和“ISBN”,可以選擇“商品編號(hào)”或者“ISBN”作為主鍵,由于這里的圖書是待選購(gòu)的商品,因此選擇“商品編號(hào)”作為主鍵更合理。表5-6中有3個(gè)候選關(guān)鍵字“出版社ID”“出版社簡(jiǎn)稱”“出版社名稱”,這3個(gè)候選關(guān)鍵字都可以作為主鍵,如果選擇“出版社ID”作為唯一標(biāo)識(shí)表中每一行的屬性,那么“出版社ID”就是“出版社信息”表的主鍵,如果選擇“出版社名稱”作為唯一標(biāo)識(shí)表中每一行的屬性,那么“出版社名稱”就是“出版社信息”表的主鍵,以此類推。一般情況下,應(yīng)選擇屬性值簡(jiǎn)單、長(zhǎng)度較短、便于比較的屬性作為表的主鍵。對(duì)于“出版社信息”表中的3個(gè)候選關(guān)鍵字,從屬性值的長(zhǎng)度來看,“出版社ID”和“出版社簡(jiǎn)稱”兩個(gè)屬性的值都比較短,從這個(gè)角度來看,這兩個(gè)候選關(guān)鍵字都可以作為主鍵,但是由于“出版社ID”是純數(shù)字,比較效率高,因此選擇“出版社ID”作為“出版社信息”表的主鍵更合適。399.外鍵外鍵(ForeignKey)也稱為外關(guān)鍵字或外碼。外鍵是指表中的某個(gè)屬性(或?qū)傩越M合),它雖然不是本表的主鍵或只是主鍵的一部分,卻是另一個(gè)表的主鍵,該屬性稱為本表的外鍵。如“圖書信息”表和“出版社信息”表有一個(gè)相同的屬性,即“出版社ID”,對(duì)“出版社信息”表來說這個(gè)屬性是主鍵,而在“圖書信息”表中這個(gè)屬性不是主鍵,所以“圖書信息”表中的“出版社ID”是一個(gè)外鍵。10.聯(lián)系聯(lián)系是指客觀世界中實(shí)體與實(shí)體之間的關(guān)系,聯(lián)系的類型有3種:一對(duì)一(1∶1)、一對(duì)多(1∶N)、多對(duì)多(M∶N),關(guān)系數(shù)據(jù)庫(kù)中普遍的聯(lián)系是一對(duì)多(1∶N)。E-R圖中用菱形框表示實(shí)體間的聯(lián)系。如學(xué)校與校長(zhǎng)為一對(duì)一的聯(lián)系;班級(jí)與學(xué)生為一對(duì)多的聯(lián)系,一個(gè)班級(jí)有多個(gè)學(xué)生,每個(gè)學(xué)生只屬于一個(gè)班級(jí);學(xué)生與課程之間為多對(duì)多的聯(lián)系,一個(gè)學(xué)生可以選擇多門課程,一門課程可以有多個(gè)學(xué)生選擇,學(xué)生與課程之間的E-R圖如圖5-13所示。11.主表與從表主表和從表是以外鍵相關(guān)聯(lián)的兩個(gè)表。以外鍵作主鍵的表稱為主表,也稱為父表,外鍵所在的表稱為從表,也稱為子表或相關(guān)表。如“出版社信息”和“圖書信息”這兩個(gè)以外鍵出版社ID相關(guān)聯(lián)的表,“出版社信息”表稱為主表,“圖書信息”表稱為從表。4041圖5-13學(xué)生與課程之間的E-R圖5.4.4關(guān)系模型的規(guī)范化與范式任何一個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)都要處理大量的數(shù)據(jù),如何以最優(yōu)方式組織這些數(shù)據(jù),形成以規(guī)范化形式存儲(chǔ)的數(shù)據(jù)庫(kù),是數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開發(fā)中的一個(gè)重要問題。由于應(yīng)用需要,一個(gè)已投入運(yùn)行的數(shù)據(jù)庫(kù),在實(shí)際應(yīng)用中不斷地變化著。當(dāng)對(duì)原有數(shù)據(jù)庫(kù)進(jìn)行修改、插入、刪除時(shí),應(yīng)盡量減少對(duì)原有數(shù)據(jù)結(jié)構(gòu)的修改,從而減少對(duì)應(yīng)用程序的影響。所以設(shè)計(jì)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)時(shí)要用規(guī)范化的方法設(shè)計(jì),以提高數(shù)據(jù)的完整性、一致性、可用性。規(guī)范化理論是設(shè)計(jì)關(guān)系數(shù)據(jù)庫(kù)的重要理論基礎(chǔ),在此簡(jiǎn)單介紹一下關(guān)系模型的規(guī)范化與范式(NormalForm),范式表示的是關(guān)系模型的規(guī)范化程度。1.關(guān)系模型的規(guī)范化把低一級(jí)的關(guān)系模型分解為高一級(jí)關(guān)系模型的過程,稱為關(guān)系模型的規(guī)范化。當(dāng)一個(gè)關(guān)系中的所有字段都是不可分割的數(shù)據(jù)項(xiàng)時(shí),則稱該關(guān)系是規(guī)范的。如果表中有的屬性是復(fù)合屬性,由多個(gè)數(shù)據(jù)項(xiàng)組合而成,則可以進(jìn)一步分割,或者表中包含多值數(shù)據(jù)項(xiàng)時(shí),則該表稱為不規(guī)范的表。數(shù)據(jù)規(guī)范化的目的是減少數(shù)據(jù)冗余,消除數(shù)據(jù)存儲(chǔ)異常,以保證數(shù)據(jù)的完整性,提高存儲(chǔ)效率。422.關(guān)系模型的范式關(guān)系模型滿足的確定約束條件稱為范式,用NF表示,根據(jù)滿足約束條件的級(jí)別不同,范式由低到高分為1NF(第一范式)、2NF(第二范式)、3NF(第三范式)、BCNF(BC范式)、4NF(第四范式)等,不同的級(jí)別范式,其性質(zhì)不同。(1)1NF1NF是最低的規(guī)范化要求,如果關(guān)系R中屬性的值域都是簡(jiǎn)單域,其元素(即屬性)不可再分解,是屬性項(xiàng)而不是屬性組,且不存在重復(fù)的元組、屬性,那么關(guān)系模型R是1NF的。這一限制是關(guān)系的基本性質(zhì),所以任何關(guān)系都必須滿足1NF。1NF是在實(shí)際數(shù)據(jù)庫(kù)設(shè)計(jì)中必須先達(dá)到的,通常稱為數(shù)據(jù)元素的結(jié)構(gòu)化。表5-7所示的“圖書信息”表滿足上述條件,屬于1NF。43商品編號(hào)圖書名稱價(jià)格/元作者ISBN出版社出版社簡(jiǎn)稱郵政編碼12528944PPT設(shè)計(jì)從入門到精通79張曉景9787115454614人民郵電出版社人郵10016412563157給Python點(diǎn)顏色青少年學(xué)編程59.8佘友軍9787115512321人民郵電出版社人郵10016412520987樂學(xué)Python編程做個(gè)游戲很簡(jiǎn)單69.8王振世9787302519867清華大學(xué)出版社清華10008412366901教學(xué)設(shè)計(jì)、實(shí)施的診斷與優(yōu)化48.8陳承歡9787121341427電子工業(yè)出版社電子10003612325352Python程序設(shè)計(jì)39.6黃銳軍9787040493726高等教育出版社高教100120表5-7“圖書信息”表及其存儲(chǔ)的部分?jǐn)?shù)據(jù)滿足1NF的關(guān)系模型可能會(huì)有許多重復(fù)值,增加了修改其數(shù)據(jù)時(shí)引起疏漏的可能性。很顯然,上述圖書關(guān)系中,同一個(gè)出版社出版的圖書,其出版社名稱、出版社簡(jiǎn)稱和郵政編碼是相同的,這樣就會(huì)出現(xiàn)許多重復(fù)的數(shù)據(jù)。如果某一個(gè)出版社的“郵政編碼”改變了,那么該出版社所出版的所有圖書的對(duì)應(yīng)記錄的“郵政編碼”都要進(jìn)行更改。滿足1NF的要求是對(duì)關(guān)系數(shù)據(jù)庫(kù)的基本要求,它確保關(guān)系中的每個(gè)屬性都是單值屬性,即不是復(fù)合屬性,但可能存在部分函數(shù)依賴,不能排除數(shù)據(jù)冗余和潛在的數(shù)據(jù)更新異常問題。所謂函數(shù)依賴,是指一個(gè)數(shù)據(jù)表中,屬性B的取值依賴于屬性A的取值,則屬性B函數(shù)依賴于屬性A,如“出版社簡(jiǎn)稱”函數(shù)依賴于“出版社名稱”。為了消除這種數(shù)據(jù)冗余、避免潛在的數(shù)據(jù)更新異常問題,消除函數(shù)依賴,我們需要更加規(guī)范的2NF。(2)2NF一個(gè)關(guān)系R滿足1NF,且所有的非主屬性都完全地依賴于主鍵,則這種關(guān)系屬于2NF。對(duì)于滿足2NF的關(guān)系,如果給定一個(gè)主鍵的值,則可以在這個(gè)數(shù)據(jù)表中唯一確定一條記錄。滿足2NF的關(guān)系消除了非主屬性對(duì)主鍵的部分函數(shù)依賴,但可能存在傳遞函數(shù)依賴,也可能存在數(shù)據(jù)冗余和潛在的數(shù)據(jù)更新異常問題。所謂傳遞依賴,是指對(duì)于一個(gè)數(shù)據(jù)表中的A、B、C這3個(gè)屬性,如果C函數(shù)依賴于B,B函數(shù)依賴于A,那么C函數(shù)也依賴于A,稱C傳遞依賴于A。在表5-7中,存在“出版社名稱”函數(shù)依賴于“ISBN”,“郵政編碼”函數(shù)依賴于“出版社名稱”這樣的傳遞函數(shù)依賴,也就是說“ISBN”不能直接決定非主屬性“郵政編碼”。要使關(guān)系模型中不存在傳遞依賴,可以將該關(guān)系模型分解為3NF。44(3)3NF一個(gè)關(guān)系R滿足1NF和2NF,且每個(gè)非主屬性彼此獨(dú)立,不傳遞依賴于任何主鍵,則這種關(guān)系屬于3NF。從2NF中消除傳遞依賴,便是3NF。將表5-7分解為兩個(gè)表,分別為表5-8所示“圖書信息”表和表5-9所示“出版社”表,分解后的兩個(gè)表都符合3NF。45商品編號(hào)圖書名稱價(jià)格/元作者ISBN出版社12528944PPT設(shè)計(jì)從入門到精通79張曉景9787115454614人民郵電出版社12563157給Python點(diǎn)顏色青少年學(xué)編程59.8佘友軍9787115512321人民郵電出版社12520987樂學(xué)Python編程做個(gè)游戲很簡(jiǎn)單69.8王振世9787302519867清華大學(xué)出版社12366901教學(xué)設(shè)計(jì)、實(shí)施的診斷與優(yōu)化48.8陳承歡9787121341427電子工業(yè)出版社12325352Python程序設(shè)計(jì)39.6黃銳軍9787040493726高等教育出版社表5-8“圖書信息”表表5-9“出版社”表出版社名稱出版社簡(jiǎn)稱郵政編碼人民郵電出版社人郵100164人民郵電出版社人郵100164清華大學(xué)出版社清華100084電子工業(yè)出版社電子100036高等教育出版社高教1001203NF有效地減少了數(shù)據(jù)的冗余,節(jié)約了存儲(chǔ)空間,提高了數(shù)據(jù)組織的邏輯性、完整性、一致性和安全性,提高了訪問及修改的效率。但是對(duì)于比較復(fù)雜的查詢,多個(gè)數(shù)據(jù)表之間存在關(guān)聯(lián),查詢時(shí)要進(jìn)行連接運(yùn)算,響應(yīng)速度較慢,這種情況下為了提高數(shù)據(jù)的查詢速度,允許保留一定的數(shù)據(jù)冗余,可以不滿足3NF的要求,設(shè)計(jì)成滿足2NF也是可行的。由前述可知進(jìn)行規(guī)范化數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)應(yīng)遵循規(guī)范化理論,規(guī)范化程度過低,可能會(huì)存在潛在的插入/刪除異常、修改復(fù)雜、數(shù)據(jù)冗余等問題,解決的方法就是對(duì)關(guān)系模型進(jìn)行分解或合并,即規(guī)范化,將其轉(zhuǎn)換成高級(jí)范式。但并不是規(guī)范化程度越高越好,當(dāng)一個(gè)應(yīng)用的查詢涉及多個(gè)關(guān)系表的屬性時(shí),系統(tǒng)必須進(jìn)行連接運(yùn)算,連接運(yùn)算要耗費(fèi)時(shí)間和空間。所以一般情況下,數(shù)據(jù)模型符合3NF就能滿足需求了,規(guī)范化更高的BCNF、4NF、5NF一般用得較少,本單元不予介紹,請(qǐng)參考相關(guān)書籍。3.反規(guī)范化數(shù)據(jù)庫(kù)中的數(shù)據(jù)規(guī)范化的優(yōu)點(diǎn)是減少了數(shù)據(jù)冗余,節(jié)約了存儲(chǔ)空間,相應(yīng)邏輯和物理的I/O次數(shù)減少,同時(shí)加快了增、刪、改的速度,但是對(duì)完全規(guī)范的數(shù)據(jù)庫(kù)進(jìn)行查詢,通常需要更多的連接操作,從而影響查詢速度。因此,有時(shí)為了提高某些查詢或應(yīng)用的性能會(huì)破壞規(guī)范規(guī)則,即反規(guī)范化(非規(guī)范化處理)。常見的反規(guī)范化技術(shù)包括增加冗余列、增加派生列、重新組表、分割表等。465.

5結(jié)構(gòu)查詢語言結(jié)構(gòu)查詢語言(SQL)是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),同時(shí)其小寫形式是數(shù)據(jù)庫(kù)腳本文件的擴(kuò)展名。475.4.1數(shù)據(jù)表的概念一個(gè)關(guān)系數(shù)據(jù)庫(kù)由多個(gè)數(shù)據(jù)表(Table)組成,數(shù)據(jù)表是關(guān)系數(shù)據(jù)庫(kù)的基本存儲(chǔ)結(jié)構(gòu);數(shù)據(jù)表是二維的,由行和列組成;數(shù)據(jù)表的行(Row)是橫排數(shù)據(jù),也被稱作記錄(Record);數(shù)據(jù)表的列(Column)是縱列數(shù)據(jù),也被稱作字段(Field);數(shù)據(jù)表和數(shù)據(jù)表之間存在關(guān)聯(lián)關(guān)系。在關(guān)系數(shù)據(jù)庫(kù)中,對(duì)數(shù)據(jù)表有一定的要求和限制,即數(shù)據(jù)表必須滿足以下要求。①每張數(shù)據(jù)表主題明確,只包含與主題相關(guān)的字段。②數(shù)據(jù)表中的每個(gè)字段是不可再分的基本數(shù)據(jù)項(xiàng)。一個(gè)關(guān)系數(shù)據(jù)庫(kù)由多個(gè)數(shù)據(jù)表(Table)組成,數(shù)據(jù)表是關(guān)系數(shù)據(jù)庫(kù)的基本存儲(chǔ)結(jié)構(gòu);數(shù)據(jù)表是二維的,由行和列組成;數(shù)據(jù)表的行(Row)是橫排數(shù)據(jù),也被稱作記錄(Record);數(shù)據(jù)表的列(Column)是縱列數(shù)據(jù),也被稱作字段(Field);數(shù)據(jù)表和數(shù)據(jù)表之間存在關(guān)聯(lián)關(guān)系。在關(guān)系數(shù)據(jù)庫(kù)中,對(duì)數(shù)據(jù)表有一定的要求和限制,即數(shù)據(jù)表必須滿足以下要求。①每張數(shù)據(jù)表主題明確,只包含與主題相關(guān)的字段。②數(shù)據(jù)表中的每個(gè)字段是不可再分的基本數(shù)據(jù)項(xiàng)。③數(shù)據(jù)表中同一列的數(shù)據(jù)類型必須相同,即同一字段的數(shù)據(jù)具有同一數(shù)據(jù)類型,也就是說,數(shù)據(jù)表中任意字段的取值范圍應(yīng)屬于相同的域。④一張數(shù)據(jù)表中不允許有相同的字段名,即在定義表結(jié)構(gòu)時(shí),一張數(shù)據(jù)表中不能出現(xiàn)重復(fù)的字段名。這是因?yàn)橄到y(tǒng)中的字段名是用來標(biāo)識(shí)數(shù)據(jù)列的,如果字段名重復(fù),則會(huì)產(chǎn)生列標(biāo)識(shí)混亂。⑤一張數(shù)據(jù)表中不允許有完全相同的2條記錄。⑥數(shù)據(jù)表中一般不包括可以從表中數(shù)據(jù)項(xiàng)計(jì)算出來的字段。⑦數(shù)據(jù)表中行、列的次序可以交換,即數(shù)據(jù)表中字段和記錄的順序無關(guān)緊要,任意交換兩行或兩列的位置并不影響數(shù)據(jù)的實(shí)際含義。在實(shí)際使用中,可以按各種排列要求對(duì)記錄的次序重新排列。485.5.2結(jié)構(gòu)查詢語言的概念SQL是高級(jí)的非過程化編程語言,它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式。關(guān)系數(shù)據(jù)庫(kù)都是以SQL為基礎(chǔ)的,SQL是在關(guān)系數(shù)據(jù)庫(kù)上執(zhí)行數(shù)據(jù)操作、檢索及維護(hù)所使用的標(biāo)準(zhǔn)語言,SQL由數(shù)據(jù)定義語言、數(shù)據(jù)操縱語言和數(shù)據(jù)控制語言等組成。495.5.3查詢語言的特點(diǎn)SQL有以下特點(diǎn)。(1)功能的一體化(2)高度非過程化(3)以同一種語法結(jié)構(gòu)提供兩種使用方式(4)面向集合的操作方式(5)允許對(duì)表和視圖進(jìn)行操作(6)語言簡(jiǎn)潔,易學(xué)、易用5.5.4結(jié)構(gòu)查詢語言的類型與功能1.結(jié)構(gòu)查詢語言的類型SQL可分為數(shù)據(jù)定義語言、數(shù)據(jù)操縱語言、數(shù)據(jù)查詢語言、數(shù)據(jù)控制語言、事務(wù)控制語言。SQL的類型、主要功能及常用謂詞如表5-10所示。50SQL類型主要功能常用謂詞數(shù)據(jù)定義語言創(chuàng)建、修改和刪除數(shù)據(jù)庫(kù)及其對(duì)象,包括數(shù)據(jù)庫(kù)、數(shù)據(jù)表、視圖、索引、函數(shù)、存儲(chǔ)過程、觸發(fā)器等,定義數(shù)據(jù)的完整性、安全控制等約束Create(創(chuàng)建)、Alter(修改)、Drop(刪除)、Truncate(刪除表數(shù)據(jù))、Rename(重命名)數(shù)據(jù)操縱語言插入、修改和刪除數(shù)據(jù)表中的數(shù)據(jù)Insert(插入)、Update(修改)、Delete(刪除)數(shù)據(jù)查詢語言從數(shù)據(jù)表中獲得數(shù)據(jù),數(shù)據(jù)查詢是使用較多的操作Select(查詢)數(shù)據(jù)控制語言對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的控制、管理,設(shè)置或更改數(shù)據(jù)庫(kù)用戶和角色權(quán)限,對(duì)基本表和視圖進(jìn)行授權(quán)Grant(授權(quán))、Revoke(撤銷授權(quán))、Deny(禁止用戶或角色取得某個(gè)權(quán)限)事務(wù)控制語言控制數(shù)據(jù)庫(kù)的訪問,維護(hù)數(shù)據(jù)一致性Commit(提交)、Rollback(回滾)、Savepoint(設(shè)置保存點(diǎn))、SetTransaction(改變事務(wù)選項(xiàng))表5-10SQL的類型、主要功能及常用謂詞2.Select語句的語法格式及功能說明SQL具有強(qiáng)大的數(shù)據(jù)查詢功能,SQL從數(shù)據(jù)表中查詢數(shù)據(jù)的基本語句為Select語句,其功能是實(shí)現(xiàn)數(shù)據(jù)的篩選、投影和連接操作,并能夠完成篩選字段重命名、多數(shù)據(jù)源數(shù)據(jù)組合、分類匯總、排序等操作。(1)Select語句的一般格式Select語句的一般格式如下。51Select謂詞|<字段名稱或表達(dá)式列表>Into<新表名>From<數(shù)據(jù)表名稱或視圖名稱>[Where<條件表達(dá)式>][GroupBy<分組的字段名稱或表達(dá)式>][Having<過濾條件>][OrderBy<排序的字段名稱或表達(dá)式>Asc|Desc][數(shù)據(jù)表的別名](2)Select語句的功能根據(jù)Where子句的條件表達(dá)式,從From子句指定的數(shù)據(jù)表中找出滿足條件的記錄,再按Select子句選出記錄中的字段值,把查詢結(jié)果以表格的形式返回。ect、Into、From、Where、GroupBy、Having和OrderBy等。其中Select子句和From子句是必需的,其余的子句均可省略。①Select后面的字段名稱或表達(dá)式列表表示需要查詢的字段名稱或表達(dá)式。謂詞包括All、Distinct、Top和Distinctrow。謂詞用來限定返回記錄的數(shù)量,如果沒有指定謂詞,則默認(rèn)值為All,All允許省略不寫。②Into子句用于標(biāo)識(shí)插入數(shù)據(jù)的數(shù)據(jù)表名稱。③From子句用于標(biāo)識(shí)從中檢索數(shù)據(jù)的一個(gè)或多個(gè)數(shù)據(jù)表或視圖。④Where子句用于設(shè)定查詢條件以返回需要的記錄,如果有Where子句,就按照對(duì)應(yīng)的“條件表達(dá)式”規(guī)定的條件進(jìn)行查詢。如果沒有Where子句,就查詢所有記錄。⑤GroupBy子句用于將查詢結(jié)果按指定的一個(gè)字段或多個(gè)字段的值進(jìn)行分組,分組字段或表達(dá)式的值相等的被分為一組。通常GroupBy子句與Count()、Sum()等聚合函數(shù)配合使用。⑥Having子句與GroupBy子句搭配使用,用于以GroupBy子句分組的結(jié)果進(jìn)一步限定搜索條件,滿足該篩選條件的數(shù)據(jù)才能被輸出。⑦OrderBy子句用于將查詢結(jié)果按指定的字段進(jìn)行排序。排序包括升序和降序,其中Asc表示記錄按升序排列,Desc表示記錄按降序排列,默認(rèn)狀態(tài)下,記錄按升序排列。⑧數(shù)據(jù)表的別名用于代替數(shù)據(jù)表的原名稱。523.Insert語句在數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表的結(jié)構(gòu)后,可以向該數(shù)據(jù)表中添加記錄。使用SQL中的Insert語句也可以向數(shù)據(jù)表中追加新的數(shù)據(jù)記錄,每次只能添加一條記錄。Insert語句的格式如下。①完全添加。53InsertInto表名Values(第1個(gè)字段值,第2個(gè)字段值,…,最后一個(gè)字段值)使用這種格式向數(shù)據(jù)表中添加新記錄時(shí),在關(guān)鍵字InsertInto后面輸入要添加的數(shù)據(jù)表名稱,然后在括號(hào)中列出將要添加新值的字段的名稱,最后,在關(guān)鍵字Values后面括號(hào)中按照前面輸入字段的順序?qū)?yīng)地輸入所要添加的記錄值。其中,Values后面括號(hào)中的字段值必須與數(shù)據(jù)表中對(duì)應(yīng)字段所規(guī)定的字段類型相符,如果只是對(duì)部分字段賦值,可以用空值NULL替代不需要賦值的字段,否則會(huì)出現(xiàn)錯(cuò)誤。②部分添加。如果只需要向數(shù)據(jù)表中插入部分字段的值,可以將Insert語句寫成以下格式。InsertInto表名(字段1,字段2,…,字段n)Values(第1個(gè)字段值,第2個(gè)字段值,…,第n個(gè)字段值)4.Update語句SQL中的Update語句提供了對(duì)已存在的數(shù)據(jù)表中記錄的字段值進(jìn)行修改的功能。Update語句的格式如下。54Update數(shù)據(jù)表名Set字段1=字段值1,字段2=字段值2,…,字段n=字段值n[Where<條件>]其含義是刪除數(shù)據(jù)表中符合Where條件的記錄,Where<條件>是可選項(xiàng),如果沒有Where子句,則會(huì)刪除數(shù)據(jù)表中的所有記錄。刪除操作是破壞性操作,應(yīng)十分慎重。其含義表示更新數(shù)據(jù)表中符合Where條件的字段或字段集合的值,其中Where<條件>是可選項(xiàng)。5.Delete語句SQL使用Delete語句將記錄從數(shù)據(jù)表中刪除。Delete語句的格式如下。DeleteFrom數(shù)據(jù)表名[Where<條件>]5.

6非關(guān)系數(shù)據(jù)庫(kù)隨著Web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在處理Web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的社交網(wǎng)絡(luò)服務(wù)(SocialNetworkService,SNS)類型的Web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,出現(xiàn)了很多難以解決的問題,而非關(guān)系數(shù)據(jù)庫(kù)則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。非關(guān)系數(shù)據(jù)庫(kù)的誕生就是為了應(yīng)對(duì)大規(guī)模數(shù)據(jù)集、多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),特別是大數(shù)據(jù)應(yīng)用難題。非關(guān)系數(shù)據(jù)庫(kù)在特定的場(chǎng)景下可以發(fā)揮出難以想象的高效率和高性能,它是對(duì)傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)的一個(gè)有效的補(bǔ)充。NoSQL(NotOnlySQL)意即“不僅僅是SQL”,泛指非關(guān)系數(shù)據(jù)庫(kù)。非關(guān)系數(shù)據(jù)庫(kù)嚴(yán)格意義上不是一種數(shù)據(jù)庫(kù),而是一種數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)方法的集合,可以是文檔或者鍵值對(duì)等。555.6.1非關(guān)系數(shù)據(jù)庫(kù)的優(yōu)缺點(diǎn)非關(guān)系數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)如下。①格式靈活:存儲(chǔ)數(shù)據(jù)的格式可以是(key,value)形式、文檔形式、圖片形式等,使用靈活,應(yīng)用場(chǎng)景廣泛,而關(guān)系數(shù)據(jù)庫(kù)則只支持基礎(chǔ)類型。②速度快:非關(guān)系數(shù)據(jù)庫(kù)可以使用硬盤或者RAM作為載體,而關(guān)系數(shù)據(jù)庫(kù)只能使用硬盤作為載體。③低成本:非關(guān)系數(shù)據(jù)庫(kù)部署簡(jiǎn)單,基本都是開源軟件。④高擴(kuò)展性。非關(guān)系數(shù)據(jù)庫(kù)的缺點(diǎn)如下。①不提供SQL支持,學(xué)習(xí)和使用成本較高。②數(shù)據(jù)結(jié)構(gòu)相對(duì)復(fù)雜,復(fù)雜查詢能力稍欠缺。③無事務(wù)處理機(jī)制。565.6.2非關(guān)系數(shù)據(jù)庫(kù)的類型以下是幾種常見的非關(guān)系數(shù)據(jù)庫(kù)類型。1.鍵值數(shù)據(jù)庫(kù)鍵值(Key-Value)數(shù)據(jù)庫(kù)主要使用一個(gè)哈希表,這個(gè)表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)。可以通過Key來添加、查詢或者刪除數(shù)據(jù)庫(kù),使用Key訪問,會(huì)獲得很高的性能及擴(kuò)展性。Key-Value模型的優(yōu)勢(shì)在于簡(jiǎn)單、易部署、高并發(fā)。2.列式數(shù)據(jù)庫(kù)列式(Column-Oriented)數(shù)據(jù)庫(kù)將數(shù)據(jù)存儲(chǔ)在列族中,一個(gè)列族存儲(chǔ)是經(jīng)常被一起查詢的相關(guān)數(shù)據(jù),例如,我們經(jīng)常會(huì)查詢某個(gè)人的姓名和年齡,而不是薪資。這種情況下姓名和年齡會(huì)被放到一個(gè)列族中,薪資會(huì)被放到另一個(gè)列族中。3.文檔數(shù)據(jù)庫(kù)文檔(Document-Oriented)數(shù)據(jù)庫(kù)會(huì)將數(shù)據(jù)以文檔的形式存儲(chǔ)。每個(gè)文檔都是自包含的數(shù)據(jù)單元,是一系列數(shù)據(jù)項(xiàng)的集合。每個(gè)數(shù)據(jù)項(xiàng)都有一個(gè)名詞與對(duì)應(yīng)值,值既可以是簡(jiǎn)單的數(shù)據(jù)類型,如字符串、數(shù)字和日期等;也可以是復(fù)雜的類型,如有序列表和關(guān)聯(lián)對(duì)象。4.圖形數(shù)據(jù)庫(kù)圖形數(shù)據(jù)庫(kù)允許將數(shù)據(jù)以圖的方式存儲(chǔ)。實(shí)體作為頂點(diǎn),而實(shí)體之間的關(guān)系則作為邊。典型代表產(chǎn)品有Neo4J、InforGrid。575.

7數(shù)據(jù)庫(kù)設(shè)計(jì)基礎(chǔ)數(shù)據(jù)庫(kù)設(shè)計(jì)一般應(yīng)包括數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì)和行為設(shè)計(jì)兩部分內(nèi)容。數(shù)據(jù)庫(kù)的結(jié)構(gòu)設(shè)計(jì)是指系統(tǒng)整體邏輯模式與子模式的設(shè)計(jì),是對(duì)數(shù)據(jù)的分析設(shè)計(jì);數(shù)據(jù)庫(kù)的行為設(shè)計(jì)是指施加在數(shù)據(jù)庫(kù)上的動(dòng)態(tài)操作的設(shè)計(jì),是對(duì)應(yīng)用系統(tǒng)功能的分析設(shè)計(jì)。585.7.1數(shù)據(jù)庫(kù)設(shè)計(jì)的基本原則設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)要綜合考慮多個(gè)因素,權(quán)衡各自利弊確定數(shù)據(jù)表的結(jié)構(gòu),基本原則有以下幾條。①把具有同一個(gè)主題的數(shù)據(jù)存儲(chǔ)在一個(gè)數(shù)據(jù)表中,也就是“一表一用”的設(shè)計(jì)原則。②盡量消除包含在數(shù)據(jù)表中的冗余數(shù)據(jù),但不是必須消除所有的冗余數(shù)據(jù),有時(shí)為了提高訪問數(shù)據(jù)庫(kù)的速度,可以保留必要的冗余,減少數(shù)據(jù)表之間的連接操作,提高效率。③一般要求數(shù)據(jù)庫(kù)設(shè)計(jì)達(dá)到3NF,因?yàn)?NF的關(guān)系模式中不存在非主屬性對(duì)主關(guān)鍵字的不完全函數(shù)依賴和傳遞函數(shù)依賴關(guān)系,最大限度地消除了數(shù)據(jù)冗余、修改異常、插入異常和刪除異常,具有較好的性能,基本滿足關(guān)系規(guī)范化的要求。在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),如果片面地提高關(guān)系的范式等級(jí),并不一定能夠產(chǎn)生合理的數(shù)據(jù)庫(kù)設(shè)計(jì)方案,原因是范式的等級(jí)越高,存儲(chǔ)的數(shù)據(jù)就需要被分解為更多的數(shù)據(jù)表,訪問數(shù)據(jù)表時(shí)總是涉及多表操作,會(huì)降低訪問數(shù)據(jù)庫(kù)的速度。從實(shí)用角度來看,大多數(shù)情況下達(dá)到3NF比較恰當(dāng)。④在關(guān)系數(shù)據(jù)庫(kù)中,各個(gè)數(shù)據(jù)表之間的關(guān)系只能為一對(duì)一和一對(duì)多的關(guān)系,對(duì)于多對(duì)多的關(guān)系必須將其轉(zhuǎn)換為一對(duì)多的關(guān)系來處理。⑤設(shè)計(jì)數(shù)據(jù)表的結(jié)構(gòu)時(shí),應(yīng)考慮表結(jié)構(gòu)在未來可能發(fā)生的變化,保證表結(jié)構(gòu)的動(dòng)態(tài)適應(yīng)性。595.7.2數(shù)據(jù)庫(kù)設(shè)計(jì)的基本步驟在確定了數(shù)據(jù)庫(kù)設(shè)計(jì)的策略以后,就需要確定相應(yīng)的設(shè)計(jì)方法和步驟。多年來,人們提出了多種數(shù)據(jù)庫(kù)設(shè)計(jì)方法、設(shè)計(jì)準(zhǔn)則和規(guī)范??紤]數(shù)據(jù)庫(kù)和應(yīng)用系統(tǒng)開發(fā)全過程,將數(shù)據(jù)庫(kù)設(shè)計(jì)分為如下6個(gè)基本步驟。1.用戶需求分析2.概念結(jié)構(gòu)設(shè)計(jì)3.邏輯結(jié)構(gòu)設(shè)計(jì)4.物理結(jié)構(gòu)設(shè)計(jì)5.?dāng)?shù)據(jù)庫(kù)實(shí)施6.?dāng)?shù)據(jù)庫(kù)運(yùn)行和維護(hù)操作訓(xùn)練60【操作訓(xùn)練5-1】從數(shù)據(jù)表中獲取指定的數(shù)據(jù)【操作訓(xùn)練5-2】設(shè)計(jì)人力資源管理系統(tǒng)的數(shù)據(jù)庫(kù)61【操作訓(xùn)練5-1】從數(shù)據(jù)表中獲取指定的數(shù)據(jù)Employee數(shù)據(jù)表包含所有員工信息,每個(gè)員工有其對(duì)應(yīng)的Id、Name、Salary、DepartmentId,Employee數(shù)據(jù)表的字段名與字段值如圖5-14所示。圖5-14Employee數(shù)據(jù)表的字段名與字段值Department數(shù)據(jù)表包含公司所有部門的信息,Department數(shù)據(jù)表的字段名與字段值如圖5-15所示。圖5-15Department數(shù)據(jù)表的字段名與字段值62找出每個(gè)部門工資最高的員工的過程如下。(1)求出每個(gè)部門對(duì)應(yīng)的最高工資和部門編號(hào)編寫SQL語句如下。(2)內(nèi)連接兩表并進(jìn)行篩選編寫SQL語句如下。Selectmax(Salary),DepartmentIdFromEmployeeGroupByDepartmentIdSelectd.NameDepartment,e.NameEmployee,e.SalarySalaryFromEmployeee,DepartmentdWheree.DepartmentId=d.IdAnd(e.Salary,e.DepartmentId)In(Selectmax(Salary),DepartmentIdFromEmployeeGroupByDepartmentId);63【操作訓(xùn)練4-2】計(jì)算并輸出購(gòu)買商品的實(shí)付總額1.創(chuàng)建PyCharm項(xiàng)目Unit04成功啟動(dòng)PyCharm后,在其主窗口選擇“文件”菜單,在彈出的下拉菜單中選擇“新建項(xiàng)目”選項(xiàng),打開“新建項(xiàng)目”對(duì)話框,在該對(duì)話框的“位置”文本框中輸入“D:\PyCharmProject\Unit04”,在“新建項(xiàng)目”對(duì)話框中單擊“創(chuàng)建”按鈕,完成PyCharm項(xiàng)目Unit04的創(chuàng)建。2.創(chuàng)建Python程序文件t4-1.py在PyCharm主窗口右鍵單擊已建好的PyCharm項(xiàng)目“Unit04”,在彈出的快捷菜單中選擇“新建”→“Python文件”命令。在打開的“新建Python文件”對(duì)話框中輸入Python文件名“t4-1”,然后雙擊“Python文件”選項(xiàng),完成Python程序文件的新建任務(wù)。同時(shí),PyCharm主窗口顯示程序文件“t4-1.py”的代碼編輯窗口,在該程序文件的代碼編輯窗口也自動(dòng)添加了模板內(nèi)容。643.編寫Python程序代碼在新建文件“t4-1.py”的代碼編輯窗口輸入程序代碼,代碼如下。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論