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