本書以培養(yǎng)學(xué)生的計(jì)算思維能力為目標(biāo),以計(jì)算機(jī)中信息的表示、存儲、壓縮、處理和傳輸為主線,以易得易用且前景看好的Python、SQLite等語言和軟件為工具,系統(tǒng)講解了“大學(xué)計(jì)算機(jī)基礎(chǔ)”課程涵蓋的知識和技術(shù)。本書的主要內(nèi)容包括3個(gè)方面: 計(jì)算機(jī)軟件、硬件的概念及基本工作方式;算法的概念、算法與數(shù)據(jù)結(jié)構(gòu)以及常用算法的基本思想;數(shù)據(jù)庫系統(tǒng)的概念、工作方式及基本操作方法。 本書著重講解計(jì)算機(jī)科學(xué)技術(shù)的基礎(chǔ)知識和基本思想方法,對涉及的程序設(shè)計(jì)語言和軟件工具的介紹也力圖、清晰,便于讀者學(xué)習(xí)和運(yùn)用。本書可用作高等院校非計(jì)算機(jī)專業(yè)“大學(xué)計(jì)算機(jī)基礎(chǔ)”課程的教材,也可作為科技工作者或其他工作人員的參考書。本書封面貼有清華大學(xué)出版社防偽標(biāo)簽,無標(biāo)簽者不得銷售。
本書作者長期從事計(jì)算機(jī)基礎(chǔ)課的教學(xué)工作,具有豐富的教學(xué)、科研經(jīng)驗(yàn),編寫的教材符合教學(xué)規(guī)律,已被多所高校選用。
目錄
大學(xué)計(jì)算機(jī)基礎(chǔ)教程第1章計(jì)算機(jī)與信息化社會1
1.1計(jì)算機(jī)的誕生和發(fā)展1
1.2了解計(jì)算機(jī)3
1.2.1計(jì)算機(jī)是如何工作的3
1.2.2什么是程序設(shè)計(jì)語言5
1.2.3什么是機(jī)器語言6
1.2.4什么是匯編語言7
1.2.5什么是高級語言8
1.3信息化生存9
1.3.1從互聯(lián)網(wǎng)思維談起9
1.3.2無所不在的計(jì)算設(shè)備12
1.3.3無遠(yuǎn)弗屆的云計(jì)算13
1.3.4與人綁定15
1.3.5線上到線下17
習(xí)題119
第2章Python語言20
2.1Python編程環(huán)境和解釋器20
2.1.1Python編程環(huán)境的使用20
2.1.2Python程序的一般結(jié)構(gòu)22
2.1.3Python解釋器的使用23
2.2數(shù)據(jù)的表示及輸入輸出26
2.2.1常量與變量26
2.2.2數(shù)據(jù)的輸入輸出28
2.2.3常用函數(shù)29
2.2.4運(yùn)算符與表達(dá)式31
2.3序列34
2.3.1字符串34
2.3.2列表36
2.3.3元組37
2.3.4字典39
2.4程序的控制結(jié)構(gòu)40
2.4.1分支語句40
2.4.2while循環(huán)語句41
2.4.3for循環(huán)語句42
2.4.4用戶自定義函數(shù)44
2.4.5模塊46
2.5類和對象47
2.5.1類的定義和使用48
2.5.2面向?qū)ο蟪绦蛟O(shè)計(jì)方法50
2.5.3類的繼承性52
2.5.4異常處理54
習(xí)題256
大學(xué)計(jì)算機(jī)基礎(chǔ)教程目錄
第3章數(shù)據(jù)的計(jì)算機(jī)表示61
3.1邏輯電路及邏輯運(yùn)算61
3.1.1門電路及基本邏輯運(yùn)算61
3.1.2組合邏輯電路63
3.1.3時(shí)序邏輯電路64
3.2數(shù)值的計(jì)算機(jī)表示67
3.2.1二進(jìn)制數(shù)68
3.2.2十六進(jìn)制數(shù)及數(shù)制轉(zhuǎn)換70
3.2.3數(shù)的補(bǔ)碼表示71
3.2.4定點(diǎn)數(shù)73
3.2.5浮點(diǎn)數(shù)74
3.2.6IEEE標(biāo)準(zhǔn)浮點(diǎn)數(shù)76
3.2.7BCD碼79
3.3文字的計(jì)算機(jī)表示81
3.3.1ASCII碼81
3.3.2GB 2312—1980漢字編碼標(biāo)準(zhǔn)83
3.3.3GB 18030漢字編碼標(biāo)準(zhǔn)84
3.3.4Unicode標(biāo)準(zhǔn)88
3.3.5Unicode字符的存儲格式90
3.4圖片與聲音的數(shù)字化93
3.4.1數(shù)字化圖形和圖像93
3.4.2圖像的采樣及存儲96
3.4.3數(shù)字化音頻98
3.5信息量與數(shù)據(jù)壓縮101
3.5.1信息量101
3.5.2信息熵103
3.5.3信息熵與數(shù)據(jù)壓縮105
3.5.4熵編碼算法108
習(xí)題3112
第4章數(shù)據(jù)結(jié)構(gòu)115
4.1數(shù)據(jù)結(jié)構(gòu)的概念115
4.1.1數(shù)據(jù)及數(shù)據(jù)元素115
4.1.2數(shù)據(jù)結(jié)構(gòu)的研究對象117
4.1.3數(shù)據(jù)結(jié)構(gòu)的定義118
4.2線性表119
4.2.1線性表的概念120
4.2.2線性表的順序存儲結(jié)構(gòu)121
4.2.3線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)123
4.2.4棧127
4.2.5隊(duì)列129
4.3樹與二叉樹131
4.3.1樹的概念131
4.3.2二叉樹的概念及性質(zhì)133
4.3.3二叉樹的存儲結(jié)構(gòu)135
4.3.4二叉樹的遍歷136
4.4圖138
4.4.1圖的概念138
4.4.2圖的存儲結(jié)構(gòu)140
4.4.3圖的遍歷142
4.5查找143
4.5.1查找的概念144
4.5.2順序查找145
4.5.3折半查找147
4.6排序148
4.6.1排序的概念148
4.6.2插入排序150
4.6.3交換排序152
4.6.4選擇排序154
習(xí)題4156
第5章數(shù)據(jù)庫160
5.1數(shù)據(jù)庫系統(tǒng)組成與結(jié)構(gòu)160
5.1.1數(shù)據(jù)庫的概念160
5.1.2數(shù)據(jù)庫系統(tǒng)組成163
5.1.3數(shù)據(jù)庫系統(tǒng)的三級模式結(jié)構(gòu)165
5.2數(shù)據(jù)庫管理系統(tǒng)167
5.2.1關(guān)系數(shù)據(jù)庫167
5.2.2數(shù)據(jù)庫管理系統(tǒng)的功能170
5.2.3常見數(shù)據(jù)庫管理系統(tǒng)171
5.3SQL語言及數(shù)據(jù)庫操作173
5.3.1SQL語言的功能與特點(diǎn)174
5.3.2SQL語言的語句175
5.3.3創(chuàng)建SQLite數(shù)據(jù)庫179
5.3.4SQLite數(shù)據(jù)庫的數(shù)據(jù)查詢與更新183
5.3.5Python程序操作SQLite數(shù)據(jù)庫185
習(xí)題5188
第6章算法設(shè)計(jì)191
6.1算法的特征及評價(jià)191
6.1.1算法的概念191
6.1.2算法的特征193
6.1.3算法求解與解析解194
6.1.4算法的表示196
6.1.5算法的復(fù)雜度198
6.2遞推、迭代和遞歸202
6.2.1遞推法202
6.2.2遞推法與代數(shù)解法205
6.2.3迭代法207
6.2.4遞歸法208
6.2.5尾遞歸法211
6.3構(gòu)造算法的常用方法212
6.3.1窮舉法212
6.3.2貪心法215
6.3.3分治法218
6.3.4動態(tài)規(guī)劃算法222
6.3.5回溯法228
6.3.6分支限界法234
6.3.7分支限界法求解單源最短路徑問題241
習(xí)題6245
第7章數(shù)據(jù)的傳輸248
7.1計(jì)算機(jī)網(wǎng)絡(luò)概述248
7.1.1計(jì)算機(jī)網(wǎng)絡(luò)的歷史發(fā)展248
7.1.2計(jì)算機(jī)網(wǎng)絡(luò)的功能250
7.1.3計(jì)算機(jī)網(wǎng)絡(luò)的傳輸介質(zhì)251
7.1.4網(wǎng)絡(luò)體系結(jié)構(gòu)與網(wǎng)絡(luò)協(xié)議252
7.2編碼與加密255
7.2.1編碼與解碼255
7.2.2檢錯(cuò)與糾錯(cuò)260
7.2.3加密與解密技術(shù)262
7.3網(wǎng)絡(luò)結(jié)構(gòu)266
7.3.1網(wǎng)絡(luò)的分類266
7.3.2網(wǎng)絡(luò)地址269
習(xí)題7272
第8章操作系統(tǒng)275
8.1操作系統(tǒng)概述275
8.1.1操作系統(tǒng)的歷史回顧275
8.1.2無所不在的操作系統(tǒng)277
8.1.3操作系統(tǒng)的目標(biāo)與功能279
8.2進(jìn)程與線程281
8.2.1進(jìn)程的概念281
8.2.2線程的概念283
8.2.3多線程285
8.2.4生產(chǎn)者消費(fèi)者問題286
8.3死鎖問題291
8.3.1死鎖的概念291
8.3.2銀行家算法292
8.4設(shè)備管理294
8.4.1I/O控制方式294
8.4.2緩沖技術(shù)296
8.5分布式操作系統(tǒng)299
習(xí)題8301
參考文獻(xiàn)303
第5章數(shù)據(jù)庫數(shù)據(jù)庫技術(shù)是使用計(jì)算機(jī)進(jìn)行數(shù)據(jù)處理的主要技術(shù)。它廣泛地應(yīng)用于人類社會的各個(gè)方面。在以大批量數(shù)據(jù)的存儲、組織和使用為基本特征的倉庫管理、財(cái)務(wù)管理、人事檔案管理以及企事業(yè)單位的生產(chǎn)經(jīng)營管理等事務(wù)處理活動中,都要使用稱為DBMS(Data Base Management System,數(shù)據(jù)庫管理系統(tǒng))的軟件來構(gòu)建專門的數(shù)據(jù)庫系統(tǒng),并在DBMS的控制下組織和使用數(shù)據(jù),從而執(zhí)行管理任務(wù)。不僅如此,在情報(bào)檢索、專家系統(tǒng)、人工智能、計(jì)算機(jī)輔助設(shè)計(jì)等各種非數(shù)值計(jì)算領(lǐng)域以及基于計(jì)算機(jī)網(wǎng)絡(luò)的信息檢索、遠(yuǎn)程信息服務(wù)、分布式數(shù)據(jù)處理、復(fù)雜市場的多方面跟蹤監(jiān)測等方面,數(shù)據(jù)庫技術(shù)也都得到了廣泛應(yīng)用。時(shí)至今日,基于數(shù)據(jù)庫技術(shù)的管理信息系統(tǒng)、辦公自動化系統(tǒng)以及決策支持系統(tǒng)等已經(jīng)成為企業(yè)、行業(yè)或地區(qū)從事生產(chǎn)活動以及日常生活的重要基礎(chǔ)。5.1數(shù)據(jù)庫系統(tǒng)組成與結(jié)構(gòu)數(shù)據(jù)庫系統(tǒng)是一種有組織地、動態(tài)地存儲大量關(guān)聯(lián)數(shù)據(jù),方便用戶訪問的計(jì)算機(jī)軟件和硬件資源組成的系統(tǒng)。存儲于數(shù)據(jù)庫中的數(shù)據(jù)與應(yīng)用程序是相互獨(dú)立的。數(shù)據(jù)是按照某種數(shù)據(jù)模型組織在一起,保存在數(shù)據(jù)庫文件中的。數(shù)據(jù)庫系統(tǒng)對數(shù)據(jù)的完整性、性、安全性提供統(tǒng)一而有效的管理手段。并對用戶提供管理和控制數(shù)據(jù)的各種簡單明了的操作命令或者程序設(shè)計(jì)語言。用戶使用這些操作命令或者編寫程序來向數(shù)據(jù)庫發(fā)出查詢、修改、統(tǒng)計(jì)等各種命令,以得到滿足不同需要的數(shù)據(jù)。數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)可以從多種不同的層次或角度來考察。從DBMS的角度看,數(shù)據(jù)庫系統(tǒng)通常采用三級模式結(jié)構(gòu)。5.1.1數(shù)據(jù)庫的概念現(xiàn)代社會中,需要管理和利用的數(shù)據(jù)資源越來越龐雜。例如,一所大學(xué)要將描述學(xué)生、課程、教師以及學(xué)生選課、教師授課等各種事物的數(shù)據(jù)有機(jī)地組織起來,以便隨時(shí)查詢、更新和抽取,從而指導(dǎo)日常教學(xué);一個(gè)商貿(mào)公司要將描述商品、客戶、雇員和訂單的數(shù)據(jù)組織起來,用于指導(dǎo)經(jīng)營活動。為了有效地收集、組織、存儲、處理和利用來自于生產(chǎn)活動和日常生活中的各種數(shù)據(jù),數(shù)據(jù)庫技術(shù)應(yīng)運(yùn)而生并成為當(dāng)今數(shù)據(jù)處理的主要技術(shù)。簡單地說,數(shù)據(jù)庫是按照一定的方式來組織、存儲和管理數(shù)據(jù)的“倉庫”。數(shù)據(jù)庫是由稱之為DBMS的軟件來統(tǒng)一管理的。用戶根據(jù)自己的業(yè)務(wù)需求選擇某種適用的DBMS(如Microsoft SQL Server、MySQL等),按照它所提供的操作界面來創(chuàng)建數(shù)據(jù)庫并隨時(shí)存取或更新其中的數(shù)據(jù)。一般來說,一個(gè)數(shù)據(jù)庫是基于相應(yīng)業(yè)務(wù)所涉及的多個(gè)部門或個(gè)人之間的所有數(shù)據(jù)而構(gòu)建的,其中的數(shù)據(jù)自然要為每個(gè)部門或個(gè)人用戶所共享。當(dāng)然,不同部門和個(gè)人之間需要存放和操縱的數(shù)據(jù)的范圍可以有所不同。例51一所大學(xué)的數(shù)據(jù)庫。大學(xué)需要存儲和處理教師、學(xué)生、課程等各方面的相關(guān)數(shù)據(jù),這些數(shù)據(jù)存儲于通過某種DBMS創(chuàng)建的數(shù)據(jù)庫中,并分別由人事部門、教務(wù)部門、學(xué)生管理部門和學(xué)術(shù)委員會根據(jù)自己的業(yè)務(wù)來存取和操縱相關(guān)范圍內(nèi)的數(shù)據(jù),如圖51所示。大學(xué)計(jì)算機(jī)基礎(chǔ)教程第5章數(shù)據(jù)庫圖51一所大學(xué)的數(shù)據(jù)庫系統(tǒng)目前,數(shù)據(jù)庫系統(tǒng)基本上都是按照“關(guān)系數(shù)據(jù)模型”來組織數(shù)據(jù)的。這種方式將滿足所有下屬部門業(yè)務(wù)需求的數(shù)據(jù)存放在多個(gè)稱為“關(guān)系”的數(shù)據(jù)表中,相關(guān)人員通過DBMS來存取、查詢或更新(插入、刪除或修改)其中的數(shù)據(jù)。例如,可以將學(xué)生、課程和選課的相關(guān)數(shù)據(jù)分別存放在如圖52所示的3個(gè)表中。圖52數(shù)據(jù)庫中的學(xué)生表、課程表和選課表這3個(gè)表中,有些數(shù)據(jù)項(xiàng)(欄目、列)是同名且存放相同類型數(shù)據(jù)的,可用于建立表和表之間的聯(lián)系,如圖53所示。圖53數(shù)據(jù)庫中3個(gè)表之間的聯(lián)系1. 數(shù)據(jù)庫中的表數(shù)據(jù)庫(特指按照關(guān)系模型創(chuàng)建的數(shù)據(jù)庫)的基本成分是一些存放數(shù)據(jù)的表。數(shù)據(jù)庫中的表從邏輯結(jié)構(gòu)上看相當(dāng)簡單,它是由若干行和列簡單交叉形成的,不能表中套表。要求表中每個(gè)單元都只包含一個(gè)數(shù)據(jù),可以是字符串、數(shù)字、貨幣值、邏輯值、時(shí)間等較為簡單的數(shù)據(jù)。表中的一行稱為一個(gè)記錄。記錄的集合即為表的內(nèi)容。一個(gè)記錄的內(nèi)容是描述一類事物中的一個(gè)具體事物的一組數(shù)據(jù),如一個(gè)學(xué)生的學(xué)號、姓名、入學(xué)分等。一般地,一個(gè)記錄由多個(gè)數(shù)據(jù)項(xiàng)構(gòu)成,數(shù)據(jù)項(xiàng)的名稱、順序、數(shù)據(jù)類型等由表的標(biāo)題決定。表名以及表的標(biāo)題是相對固定的,而表中記錄的數(shù)量和多少則是經(jīng)常變化的。注意: 數(shù)據(jù)庫中的表與外形相似的Excel中的“工作表”是不一樣的。工作表可看作單元格的集合,每個(gè)單元格都可以隨意存放不同類型的數(shù)據(jù),也可以使用公式求得數(shù)據(jù)。而數(shù)據(jù)庫表中的每個(gè)記錄都是相同結(jié)構(gòu)的,每個(gè)單元格都受標(biāo)題的約束,只能存放符合條件的數(shù)據(jù)。表與表之間可以通過彼此都具有的相同字段聯(lián)系起來。例如,學(xué)生表和選課表都有“學(xué)號”字段,學(xué)生表中一條記錄可以關(guān)聯(lián)選課表中多條記錄。這樣就不必在選課表中重復(fù)包含學(xué)生的其他信息,減少了數(shù)據(jù)冗余。2. 數(shù)據(jù)庫系統(tǒng)的功能數(shù)據(jù)庫系統(tǒng)是將累積了一定數(shù)量的記錄管理起來以便再利用的數(shù)據(jù)處理系統(tǒng),故不難推測,建立數(shù)據(jù)庫的主要目的是以下幾個(gè): (1) 輸入記錄。規(guī)定了表的格式或者說創(chuàng)建了表的結(jié)構(gòu)之后,就可以按照這種規(guī)定來“填充”表中的數(shù)據(jù)了。DBMS提供相應(yīng)的輸入方式(操作命令或圖形用戶界面),使得用戶可以方便地輸入每個(gè)記錄。例如,在Microsoft Access中,打開類似于圖52所示的“學(xué)生”表,即可逐個(gè)輸入每個(gè)學(xué)生的記錄。(2) 輸出報(bào)表。報(bào)表是按照某種條件篩選記錄之后形成的記錄的集合,可以打印成文書、形成電子文檔或者作為某種數(shù)據(jù)處理系統(tǒng)的加工對象。DBMS提供輸出報(bào)表的各種方式,用戶可以按照需求選擇不同的內(nèi)容以及輸出格式。例如,可以逐行打印出某個(gè)班級所有學(xué)生某門課程的成績。(3) 查詢。按照DBMS規(guī)定的格式設(shè)置查詢條件并找出符合條件的記錄。例如,輸入一個(gè)SQL語言(將在5.3節(jié)講解)的查詢語句作為操作命令:SELECT課程號, 課程名, 學(xué)分FROM課程WHERE學(xué)分>5即可在課程表中查詢那些5個(gè)以上學(xué)分的課程的課程號、課程名和學(xué)分。(4) 修改記錄。現(xiàn)實(shí)世界中的事物是不斷變化的,相應(yīng)數(shù)據(jù)庫中的數(shù)據(jù)也應(yīng)該隨之而變。例如,一所大學(xué)中,每年都有畢業(yè)的學(xué)生和新入學(xué)的學(xué)生,數(shù)據(jù)庫中的學(xué)生表就應(yīng)該隨時(shí)調(diào)整。相關(guān)人員可以按照DBMS所提供的方法(SQL語言的數(shù)據(jù)操縱語句或圖形化用戶操作界面)來進(jìn)行調(diào)整。5.1.2數(shù)據(jù)庫系統(tǒng)組成數(shù)據(jù)庫系統(tǒng)是一種按照數(shù)據(jù)庫方式存儲、管理數(shù)據(jù)并向用戶或應(yīng)用系統(tǒng)提供數(shù)據(jù)支持的計(jì)算機(jī)應(yīng)用系統(tǒng),是存儲數(shù)據(jù)的介質(zhì)、數(shù)據(jù)處理的對象和管理系統(tǒng)的集合體。圖54數(shù)據(jù)庫系統(tǒng)這種系統(tǒng)通常由存儲數(shù)據(jù)的數(shù)據(jù)庫、操縱數(shù)據(jù)的應(yīng)用程序以及數(shù)據(jù)庫管理員(DBA)等各種人員組成,在DBMS軟件的統(tǒng)一管理下工作,如圖54所示。1. 數(shù)據(jù)庫數(shù)據(jù)庫是一個(gè)單位或組織按某種特定方式存儲在計(jì)算機(jī)內(nèi)的數(shù)據(jù)的集合,如工廠中的產(chǎn)品數(shù)據(jù),政府部門的計(jì)劃統(tǒng)計(jì)數(shù)據(jù),醫(yī)院中的病人、病歷數(shù)據(jù)等。這個(gè)數(shù)據(jù)集合按照能夠反映出數(shù)據(jù)的自然屬性、實(shí)際聯(lián)系以及應(yīng)用處理要求的方式有機(jī)地組織成一個(gè)整體存儲,并提供給該組織或單位內(nèi)的所有應(yīng)用系統(tǒng)(或人員)共享使用。應(yīng)該注意的是: 數(shù)據(jù)庫中的數(shù)據(jù)是一種處理用的中間數(shù)據(jù),稱為業(yè)務(wù)數(shù)據(jù)。它與輸入輸出數(shù)據(jù)不同。當(dāng)然,可以將輸入數(shù)據(jù)轉(zhuǎn)變?yōu)闃I(yè)務(wù)數(shù)據(jù)存入數(shù)據(jù)庫中,也可以從數(shù)據(jù)庫中的數(shù)據(jù)推導(dǎo)產(chǎn)生輸出數(shù)據(jù)。數(shù)據(jù)庫通常由兩大部分組成: 一是有關(guān)應(yīng)用所需要的業(yè)務(wù)數(shù)據(jù)的集合,稱為物理數(shù)據(jù)庫,它是數(shù)據(jù)庫的主體;二是關(guān)于各級數(shù)據(jù)結(jié)構(gòu)的描述數(shù)據(jù),稱為描述數(shù)據(jù)庫,通常由一個(gè)數(shù)據(jù)字典系統(tǒng)管理。運(yùn)行數(shù)據(jù)庫系統(tǒng)的計(jì)算機(jī)要有足夠大的內(nèi)存儲器、大容量磁盤等聯(lián)機(jī)存儲設(shè)備和較高速的數(shù)據(jù)傳輸硬件設(shè)備,以支持對外存儲器的頻繁訪問,還需要有足夠數(shù)量的脫機(jī)存儲介質(zhì),如軟盤、外接式硬盤、磁帶、可擦寫式光盤等,以存放數(shù)據(jù)庫備份。2. DBMS及其軟件支持系統(tǒng)DBMS(數(shù)據(jù)庫管理系統(tǒng))是數(shù)據(jù)庫系統(tǒng)的核心。DBMS一般是通用軟件,由專門的廠家提供。DBMS負(fù)責(zé)統(tǒng)一管理和控制數(shù)據(jù)庫,執(zhí)行用戶或應(yīng)用系統(tǒng)交給的定義、構(gòu)造和操縱數(shù)據(jù)庫的任務(wù),并將執(zhí)行的結(jié)果提供給用戶或應(yīng)用系統(tǒng)。DBMS是在操作系統(tǒng)(可能還包括某些實(shí)用程序)支持下工作的。因?yàn)橛?jì)算機(jī)系統(tǒng)的硬件和軟件資源是由操作系統(tǒng)統(tǒng)一管理的,故當(dāng)DBMS進(jìn)行分配內(nèi)存、創(chuàng)建或撤銷進(jìn)程、訪問磁盤等操作時(shí),必須通過系統(tǒng)調(diào)用請求操作系統(tǒng)為其服務(wù)。操作系統(tǒng)從磁盤取出來的是物理塊,對物理塊的解釋則是由DBMS完成的。數(shù)據(jù)庫系統(tǒng)中的軟件通常還包括應(yīng)用程序,數(shù)據(jù)庫應(yīng)用程序是通過DBMS訪問數(shù)據(jù)庫中的數(shù)據(jù)并向用戶提供服務(wù)的程序。簡單地說,它是允許用戶插入、刪除和修改并報(bào)告數(shù)據(jù)庫中數(shù)據(jù)的程序。這種程序由程序員通過程序設(shè)計(jì)語言或某些軟件開發(fā)工具(如Python、Java、Delphi、Visual C 等),按照用戶的要求編寫的。DBMS將數(shù)據(jù)和操縱數(shù)據(jù)的程序隔離開來。程序必須與DBMS接口才能對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行查詢、插入、刪除、更新等各種操作。因而可以由DBMS集中實(shí)施安全標(biāo)準(zhǔn),以保障數(shù)據(jù)的一致性和完整性。另外,用戶不必考慮數(shù)據(jù)的存儲結(jié)構(gòu),可以將注意力集中在數(shù)據(jù)本身的組織和使用上。3. 人員開發(fā)、管理和使用數(shù)據(jù)庫系統(tǒng)的人員主要有數(shù)據(jù)庫管理員、系統(tǒng)分析員、數(shù)據(jù)庫設(shè)計(jì)人員、應(yīng)用程序員和最終用戶。(1) 數(shù)據(jù)庫管理員(DataBase Administrator,DBA)。對于較大規(guī)模的數(shù)據(jù)庫系統(tǒng)來說,必須有人負(fù)責(zé)建立、維護(hù)和管理數(shù)據(jù)庫系統(tǒng),承擔(dān)這種任務(wù)的人員稱為DBA。DBA是控制數(shù)據(jù)整體結(jié)構(gòu)的人,負(fù)責(zé)保護(hù)和控制數(shù)據(jù),使數(shù)據(jù)庫能為任何有權(quán)使用的人所共享。DBA的職責(zé)包括: 定義并存儲數(shù)據(jù)庫的內(nèi)容,監(jiān)督和控制數(shù)據(jù)庫的使用,負(fù)責(zé)數(shù)據(jù)庫的日常維護(hù),必要時(shí)重新組織和改進(jìn)數(shù)據(jù)庫等。DBA負(fù)責(zé)維護(hù)數(shù)據(jù)庫,但對數(shù)據(jù)庫的內(nèi)容則不負(fù)責(zé)。而且,為了保障數(shù)據(jù)的安全性,數(shù)據(jù)庫的內(nèi)容對DBA應(yīng)該是封鎖的。例如,DBA知道職工記錄類型中含有工資數(shù)據(jù)項(xiàng),他可以根據(jù)應(yīng)用的需要將該數(shù)據(jù)項(xiàng)類型由6位數(shù)字型擴(kuò)充到7位數(shù)字型,但是他不能讀取或修改任一職工的工資值。(2) 系統(tǒng)分析員和數(shù)據(jù)庫設(shè)計(jì)人員。系統(tǒng)分析員負(fù)責(zé)應(yīng)用系統(tǒng)的需求分析和規(guī)范說明,要與用戶及DBA配合,確定系統(tǒng)的軟件和硬件配置,并參與數(shù)據(jù)庫的概要設(shè)計(jì)。數(shù)據(jù)庫設(shè)計(jì)人員負(fù)責(zé)確定數(shù)據(jù)庫中的數(shù)據(jù),并在用戶需求調(diào)查和系統(tǒng)分析的基礎(chǔ)上,設(shè)計(jì)出適用于各種不同種類的用戶需求的數(shù)據(jù)庫。在很多情況下,數(shù)據(jù)庫設(shè)計(jì)人員是由DBA擔(dān)任的。(3) 應(yīng)用程序員。他們具備一定的計(jì)算機(jī)專業(yè)知識,可以編寫應(yīng)用程序來存取并處理數(shù)據(jù)庫中的數(shù)據(jù)。例如,庫存盤點(diǎn)處理、工資處理等通常都是這類用戶完成的。(4) 最終用戶。最終用戶指的是為了查詢、更新以及產(chǎn)生報(bào)表而訪問數(shù)據(jù)庫的人們,數(shù)據(jù)庫主要是為他們的使用而存在的。最終用戶可分為以下3類: 偶然用戶。主要包括一些中層或高層管理者或其他偶爾瀏覽數(shù)據(jù)庫的人員。他們通過終端設(shè)備,使用簡便的查詢方法(命令或菜單項(xiàng)、工具按鈕)來訪問數(shù)據(jù)庫。他們對數(shù)據(jù)庫的操作以數(shù)據(jù)檢索為主,例如,詢問庫存物資的金額、某個(gè)人的月薪等。 簡單用戶。這類用戶較多,銀行職員、旅館總臺服務(wù)員、航空公司訂票人員等都屬于這類用戶。他們的主要工作是經(jīng)常性地查詢和修改數(shù)據(jù)庫,一般都是通過應(yīng)用程序員設(shè)計(jì)的應(yīng)用系統(tǒng)(程序)來使用數(shù)據(jù)庫的。 復(fù)雜用戶。包括工程師、科技工作者、經(jīng)濟(jì)分析專家等博學(xué)的最終用戶。他們地了解自己工作范圍內(nèi)的相關(guān)知識,熟悉DBMS的各種功能,能夠直接使用數(shù)據(jù)庫語言,甚至有能力編寫自己的程序來訪問數(shù)據(jù)庫,完成復(fù)雜的應(yīng)用任務(wù)。典型的DBMS會提供多種存取數(shù)據(jù)庫的工具。簡單用戶很容易掌握它們的使用方法;偶然用戶只需會用一些經(jīng)常用到的工具即可;博學(xué)用戶則應(yīng)盡量理解大部分DBMS工具的使用方法,以滿足自己的復(fù)雜需求。5.1.3數(shù)據(jù)庫系統(tǒng)的三級模式結(jié)構(gòu)從DBMS的角度看,數(shù)據(jù)庫系統(tǒng)有一個(gè)嚴(yán)謹(jǐn)?shù)捏w系結(jié)構(gòu),從而保障其功能得以實(shí)現(xiàn)。根據(jù)ANSI/SPARS(美國標(biāo)準(zhǔn)化協(xié)會和標(biāo)準(zhǔn)計(jì)劃與需求委員會)提出的建議,數(shù)據(jù)庫系統(tǒng)是三級模式和二級映像結(jié)構(gòu),如圖55所示。圖55數(shù)據(jù)庫系統(tǒng)的三級模式結(jié)構(gòu)1. 三種模式數(shù)據(jù)庫的基本結(jié)構(gòu)是由用戶級、概念級和物理級組成的三級結(jié)構(gòu),分別稱為概念模式、外模式和內(nèi)模式。(1) 概念模式。簡稱模式,是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,即數(shù)據(jù)庫所采用的數(shù)據(jù)模型。一個(gè)數(shù)據(jù)庫只有一個(gè)概念模式,它是由數(shù)據(jù)庫設(shè)計(jì)者綜合所有用戶數(shù)據(jù),按照統(tǒng)一的觀點(diǎn)構(gòu)造而成的。在定義模式時(shí),不僅要定義數(shù)據(jù)的邏輯結(jié)構(gòu),例如,數(shù)據(jù)記錄由哪些數(shù)據(jù)項(xiàng)組成,數(shù)據(jù)項(xiàng)的名字、類型、取值范圍等,而且要定義數(shù)據(jù)之間的聯(lián)系,定義與數(shù)據(jù)有關(guān)的安全性、完整性要求。DBMS提供模式描述語言DDL來定義概念模式。概念模式是數(shù)據(jù)庫系統(tǒng)模式的中間層,既不涉及數(shù)據(jù)庫物理存儲細(xì)節(jié)和硬件環(huán)境,也與具體的應(yīng)用程序,與所使用的程序設(shè)計(jì)語言或應(yīng)用開發(fā)工具無關(guān)。它由數(shù)據(jù)庫管理員(DBA)統(tǒng)一組織管理,故又稱為DBA視圖。(2) 外模式。又稱子模式,它是數(shù)據(jù)庫用戶(包括應(yīng)用程序員和最終用戶)能夠看到和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫用戶的數(shù)據(jù)視圖,是與具體的應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。外模式通常是概念模式的子集,一個(gè)數(shù)據(jù)庫可以有多個(gè)外模式。外模式的描述隨用戶的應(yīng)用需求、處理數(shù)據(jù)的方式的不同而不同,即使是來自模式中同樣的數(shù)據(jù),在外模式中的結(jié)構(gòu)、類型、長度、保密級別等都可以不同。另外,同一外模式也可為某一用戶的多個(gè)應(yīng)用系統(tǒng)所使用,但一個(gè)應(yīng)用程序只能使用一個(gè)外模式。(3) 內(nèi)模式。又稱存儲模式或物理模式,它是數(shù)據(jù)的物理結(jié)構(gòu)和存儲方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的表示方式。例如,記錄是順序存儲還是按B樹結(jié)構(gòu)或按Hash(散列)方式存儲,索引按什么方式組織,數(shù)據(jù)是否壓縮存儲、是否加密,數(shù)據(jù)的存儲記錄結(jié)構(gòu)有什么規(guī)定,等等。一個(gè)數(shù)據(jù)庫只有一個(gè)內(nèi)模式。從形式上來看,一個(gè)數(shù)據(jù)庫就是存放在外存儲器上的一個(gè)或多個(gè)物理文件的集合。無論哪一級模式都只是處理數(shù)據(jù)的一個(gè)框架,按這些框架填入的數(shù)據(jù)才是數(shù)據(jù)庫的內(nèi)容。以外模式、概念模式或內(nèi)模式為框架的數(shù)據(jù)庫分別稱為用戶數(shù)據(jù)庫、概念數(shù)據(jù)庫和物理數(shù)據(jù)庫。物理數(shù)據(jù)庫是實(shí)際存放在外存儲器里的數(shù)據(jù),而概念數(shù)據(jù)庫和用戶數(shù)據(jù)庫只不過是對物理數(shù)據(jù)庫的抽象的邏輯描述而已。用戶數(shù)據(jù)庫是概念數(shù)據(jù)庫的部分抽取;概念數(shù)據(jù)庫是物理數(shù)據(jù)庫的抽象表示;物理數(shù)據(jù)庫是概念數(shù)據(jù)庫的具體實(shí)現(xiàn)。2. 二級映像數(shù)據(jù)庫系統(tǒng)的三級模式是對數(shù)據(jù)的三個(gè)抽象級別,而數(shù)據(jù)實(shí)際上只存在于物理層。在一個(gè)基于三層模式結(jié)構(gòu)的DBMS中,每個(gè)用戶實(shí)際上只需要關(guān)注自己的外模式。因此,DBMS必須將外模式中的用戶請求轉(zhuǎn)換成概念模式中的請求,然后再將其轉(zhuǎn)換成內(nèi)模式中的請求,并根據(jù)這一請求完成在數(shù)據(jù)庫中的操作。例如,如果用戶的請求是檢索數(shù)據(jù),則先要從數(shù)據(jù)庫中抽取數(shù)據(jù),然后轉(zhuǎn)換成與用戶的外部視圖相匹配的格式。為了實(shí)現(xiàn)三個(gè)層次之間的聯(lián)系和轉(zhuǎn)換,DBMS提供了二級映像: 外模式/模式映像和模式/內(nèi)模式映像。注意: 所謂映像是用來指定映像雙方如何進(jìn)行數(shù)據(jù)轉(zhuǎn)換的對應(yīng)規(guī)則。(1) 外模式/模式映像。一個(gè)模式可以對應(yīng)多個(gè)外模式,每個(gè)外模式在數(shù)據(jù)庫系統(tǒng)中都有一個(gè)外模式/模式映像,它定義了這個(gè)外模式和模式之間的對應(yīng)關(guān)系。映像的定義包含在各自外模式的描述中。當(dāng)模式改變(如增加新的關(guān)系、屬性,改變屬性的數(shù)據(jù)類型等)時(shí),DBA會相應(yīng)地改變各個(gè)外模式/模式映像,可以使外模式保持不變,從而使得依據(jù)外模式編寫的應(yīng)用程序不必修改,這就保障了數(shù)據(jù)與程序的邏輯獨(dú)立性。(2) 模式/內(nèi)模式映像。數(shù)據(jù)庫中只有一個(gè)模式,也只有一個(gè)內(nèi)模式,故模式/內(nèi)模式映像是的,它定義了數(shù)據(jù)庫全局邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)之間的關(guān)系。模式/內(nèi)模式映像定義通常包含在模式描述中。當(dāng)數(shù)據(jù)庫的存儲結(jié)構(gòu)改變時(shí),DBA會相應(yīng)地改變模式/內(nèi)模式映像,從而使模式保持不變,也不必修改應(yīng)用程序,這就保障了數(shù)據(jù)與程序的物理獨(dú)立性。用戶根據(jù)外模式來操縱數(shù)據(jù)庫時(shí),數(shù)據(jù)庫系統(tǒng)通過外模式/模式映像使用戶數(shù)據(jù)庫與概念數(shù)據(jù)庫相聯(lián)系,又通過模式/內(nèi)模式的映像與物理數(shù)據(jù)庫相聯(lián)系,從而使用戶實(shí)際使用物理數(shù)據(jù)庫中的數(shù)據(jù)。其間的轉(zhuǎn)換工作是由DBMS完成的。5.2數(shù)據(jù)庫管理系統(tǒng)DBMS(數(shù)據(jù)庫管理系統(tǒng))是為數(shù)據(jù)庫的建立、使用和維護(hù)而配置的軟件系統(tǒng),是數(shù)據(jù)庫系統(tǒng)的核心組成部分,可看作用戶和數(shù)據(jù)庫之間的接口。目前常用的DBMS大都是關(guān)系型的,稱為RDBMS(Relational DataBase Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng))。DBMS建立在操作系統(tǒng)的基礎(chǔ)上,負(fù)責(zé)對數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和控制。數(shù)據(jù)庫系統(tǒng)的一切操作,包括查詢、更新以及各種控制等,都是通過DBMS進(jìn)行的。用戶或應(yīng)用程序發(fā)出的各種操作數(shù)據(jù)庫中數(shù)據(jù)的命令也要通過DBMS來執(zhí)行。DBMS還承擔(dān)著數(shù)據(jù)庫的維護(hù)工作。它能夠按照DBA(數(shù)據(jù)庫管理員)的規(guī)定和要求,保障數(shù)據(jù)庫的安全性和完整性。5.2.1關(guān)系數(shù)據(jù)庫目前絕大多數(shù)數(shù)據(jù)庫都是關(guān)系數(shù)據(jù)庫,即以關(guān)系(特定形式的二維數(shù)據(jù)表)的形式來表現(xiàn)數(shù)據(jù)以及數(shù)據(jù)之間的聯(lián)系,并在RDBMS的支持下進(jìn)行關(guān)系的創(chuàng)建以及其中數(shù)據(jù)的查詢、存取和更新等操作。例52Northwind數(shù)據(jù)庫。Northwind數(shù)據(jù)庫是微軟Access軟件的一個(gè)示例數(shù)據(jù)庫。其中包含虛構(gòu)的Northwind商貿(mào)公司的業(yè)務(wù)數(shù)據(jù)。該公司進(jìn)行世界范圍內(nèi)的食品采購與銷售,這些食品分屬于飲料、點(diǎn)心和調(diào)味品等幾大類,分別由多個(gè)供應(yīng)商提供,并由銷售人員通過填寫訂單銷售給客戶。所有業(yè)務(wù)數(shù)據(jù)分別存放在Northwind數(shù)據(jù)庫的“產(chǎn)品”“類別”“供應(yīng)商”“雇員”“訂單”“訂單明細(xì)”以及“客戶”等幾個(gè)表中。其中“產(chǎn)品”表和“類別”表如圖56所示。圖56Northwind數(shù)據(jù)庫的產(chǎn)品表和類別表1. 關(guān)系數(shù)據(jù)庫的層次結(jié)構(gòu)完整的關(guān)系數(shù)據(jù)庫可以分為4級: 數(shù)據(jù)庫(database)、表(table)或視圖(view)、記錄(record)、字段(field),相應(yīng)的關(guān)系理論中的術(shù)語是數(shù)據(jù)庫、關(guān)系、元組和屬性。(1) 數(shù)據(jù)庫。數(shù)據(jù)庫可按其數(shù)據(jù)存儲方式以及用戶訪問方式分為兩種: 本地?cái)?shù)據(jù)庫和遠(yuǎn)程數(shù)據(jù)庫。本地?cái)?shù)據(jù)庫(如dBASE、Access等)駐留于本機(jī)或局域網(wǎng)中。如果多個(gè)用戶并發(fā)訪問數(shù)據(jù)庫,則采取基于文件的鎖定(防沖突)策略,故又稱為基于文件的數(shù)據(jù)庫。遠(yuǎn)程數(shù)據(jù)庫通常駐留于其他計(jì)算機(jī)中,而且往往分布于不同的服務(wù)器上。用戶在自己的計(jì)算機(jī)上通過SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)訪問其中的數(shù)據(jù),故又稱為SQL服務(wù)器。典型的SQL服務(wù)器有Oracle、IBM DB2、Informix以及SQL Server等。(2) 表與視圖。關(guān)系數(shù)據(jù)庫的基本成分是一些存放數(shù)據(jù)的表(行列結(jié)構(gòu)的數(shù)據(jù)集,關(guān)系理論中稱為關(guān)系)。表是由若干行若干列數(shù)據(jù)簡單交叉形成的(不能表中套表)。表中每個(gè)單元都只包含一個(gè)數(shù)據(jù),如字符串、數(shù)字、貨幣值、邏輯值、時(shí)間等。表的標(biāo)題也稱為關(guān)系模式,即組成關(guān)系的屬性的集合。數(shù)據(jù)庫中所有關(guān)系模式的集合構(gòu)成了數(shù)據(jù)庫模式。對于不同的數(shù)據(jù)庫系統(tǒng)來說,數(shù)據(jù)庫對應(yīng)物理文件的映射是不同的。例如,在dBASE和Paradox數(shù)據(jù)庫中,一個(gè)表就是一個(gè)文件,索引以及其他一些數(shù)據(jù)庫元素也都存儲在各自的文件中。而在Access和SQLite數(shù)據(jù)庫中,所有表以及其他成分都聚集在一個(gè)文件中。為了方便地使用數(shù)據(jù)庫,很多DBMS都提供對于視圖(Access中稱為查詢)的支持。視圖是能夠從一個(gè)或多個(gè)表中提取數(shù)據(jù)的數(shù)據(jù)定義。數(shù)據(jù)庫中只存放其定義,而數(shù)據(jù)仍存放在作為數(shù)據(jù)源的基表中。故當(dāng)基表中數(shù)據(jù)有所變化時(shí),視圖中的數(shù)據(jù)也隨之變化。(3) 記錄。表中的一行稱為一個(gè)記錄(關(guān)系理論中稱為元組)。一個(gè)記錄是一組數(shù)據(jù),用于描述一類事物中的一個(gè)具體事物,如一種產(chǎn)品的編號、名稱、單價(jià),一次商品交易過程中的訂單編號、商品名稱、客戶名稱、單價(jià)、數(shù)量等。一般地,一個(gè)記錄由多個(gè)數(shù)據(jù)項(xiàng)(字段)構(gòu)成,記錄中的字段結(jié)構(gòu)由表的標(biāo)題(關(guān)系模式)決定。記錄的集合(元組集合)稱為表的內(nèi)容。值得注意的是,表名以及表的標(biāo)題是相對固定的,而表中記錄的數(shù)量和多少則是經(jīng)常變化的。(4) 字段。表中一列稱為一個(gè)字段。每個(gè)字段表示表中所描述的對象的一個(gè)屬性,如產(chǎn)品名稱、單價(jià)、訂購量等。每個(gè)字段都有相應(yīng)的描述信息,如字段名、數(shù)據(jù)類型、數(shù)據(jù)寬度、數(shù)值型數(shù)據(jù)的小數(shù)位數(shù)等。由于每個(gè)字段都包含了數(shù)據(jù)類型相同的一批數(shù)據(jù),因此,字段名相當(dāng)于一種多值變量。字段是數(shù)據(jù)庫操縱的最小單位。2. 主鍵與索引一個(gè)關(guān)系數(shù)據(jù)庫中常有多個(gè)表。每個(gè)表中都需要挑選一個(gè)或多個(gè)字段來標(biāo)識記錄,稱為主鍵或主碼。例如,在“產(chǎn)品”表中,一個(gè)產(chǎn)品對應(yīng)一條記錄,“產(chǎn)品ID”作為主鍵,地標(biāo)識每種產(chǎn)品的記錄。又如,在“類別”表中,“類別ID”作為主鍵,地標(biāo)識一類產(chǎn)品。可以看出,每個(gè)記錄中,作為主鍵的字段的值都不能空缺;多個(gè)記錄中,作為主鍵的字段的值都不能相同。當(dāng)某個(gè)或某些字段被當(dāng)作查找記錄或排序的依據(jù)時(shí),可將其設(shè)定為索引。一個(gè)表中可建立多個(gè)索引,每個(gè)索引確定表中記錄的一種邏輯順序。可為單個(gè)字段創(chuàng)建索引,也可在多個(gè)字段上創(chuàng)建索引。3. 表與表之間的聯(lián)系表與表之間可以通過彼此都具有的相同字段(字段名不必相同)聯(lián)系起來。例如,類別表和產(chǎn)品表都有“類別ID”字段,類別表的一條記錄可以聯(lián)系到產(chǎn)品表的多條記錄。所謂關(guān)系數(shù)據(jù)庫主要就是通過表與表之間的聯(lián)系來體現(xiàn)的,這種聯(lián)系反映了現(xiàn)實(shí)世界中客觀事物之間的聯(lián)系。Northwind數(shù)據(jù)庫中表與表之間的關(guān)系如圖57所示。圖57選課數(shù)據(jù)庫中表與表之間的聯(lián)系可以看出,類別表字段列表中的“類別ID”字段與產(chǎn)品表字段列表中的“類別ID”字段之間由一條線連接起來了,而且類別表標(biāo)記為1方,產(chǎn)品表標(biāo)記為多(∞)方。這就意味著: 一個(gè)類別ID值可以在產(chǎn)品表中出現(xiàn)多次,但只能在類別表中出現(xiàn)一次,這種符號所描述的實(shí)際意義是: 一種類別可以包含多種產(chǎn)品。對于產(chǎn)品表來說,“類別ID”字段將本表與另一個(gè)表關(guān)聯(lián)在一起的同時(shí)又是另一個(gè)表的主鍵,稱之為外鍵。外鍵在兩個(gè)表之間創(chuàng)建了一種“約束”,使得本表中指定字段的每個(gè)