近幾年數(shù)據(jù)管理技術(shù)發(fā)展迅猛,從大數(shù)據(jù)管理和數(shù)據(jù)庫應(yīng)用、設(shè)計和實現(xiàn)的角度,梳理數(shù)據(jù)庫系統(tǒng)原理課程的知識點體系,調(diào)整教材結(jié)構(gòu),豐富教材內(nèi)容,乃大數(shù)據(jù)時代數(shù)據(jù)庫教學的嘗試和實踐。本書正是基于此目標編寫的,全書內(nèi)容主要包括5大部分,*部分是基本概念和基礎(chǔ)知識,第二部分是SQL語言及其應(yīng)用,第三部分是數(shù)據(jù)庫設(shè)計,第四部分是DBMS實現(xiàn)技術(shù),第五部分是大數(shù)據(jù)新技術(shù)簡介。
本書可以作為高等學校計算機、軟件工程、信息管理和信息系統(tǒng)等相關(guān)專業(yè)數(shù)據(jù)庫課程教材,也可供從事數(shù)據(jù)庫系統(tǒng)、信息系統(tǒng)、Web系統(tǒng)、互聯(lián)網(wǎng) 平臺系統(tǒng)研究、開發(fā)與應(yīng)用的工程技術(shù)人員、科技工作者以及其他相關(guān)人員參考閱讀。
(1) 站在大數(shù)據(jù)管理的角度講述數(shù)據(jù)庫設(shè)計和實現(xiàn)的新思想,在數(shù)據(jù)庫設(shè)計和實現(xiàn)的講述中融入大數(shù)據(jù)思維。(2) 提出了數(shù)據(jù)庫管理系統(tǒng)的目標:簡單、安全、高效地共享數(shù)據(jù),并以此為線索貫穿全書內(nèi)容。(3) 以PostgreSQL為平臺,以網(wǎng)絡(luò)考試系統(tǒng)為案例,實施案例驅(qū)動的教學模式。通過案例分析,解析傳統(tǒng)數(shù)據(jù)管理和大數(shù)據(jù)管理中數(shù)據(jù)庫技術(shù)的基本思想和特點,融合理論與實踐,貫通技術(shù)思想與職業(yè)理念。(4) 從大數(shù)據(jù)管理的角度講述數(shù)據(jù)管理技術(shù)發(fā)展趨勢,并對大數(shù)據(jù)技術(shù)進行簡介。(5) 在課程內(nèi)容安排上,主要是先講語言,讓學生通過上機使用數(shù)據(jù)庫,對數(shù)據(jù)庫有直觀了解,進而再講數(shù)據(jù)庫設(shè)計,*后講實現(xiàn),由淺到深,由外到里,便于理解。(6) 研磨了與其它課程如信息安全、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、組成原理等的關(guān)系和銜接。
前言
當前已經(jīng)是大數(shù)據(jù)時代,關(guān)系數(shù)據(jù)庫一統(tǒng)天下的局面已不可能重現(xiàn)。隨著近幾年數(shù)據(jù)管理技術(shù)的迅猛發(fā)展,傳統(tǒng)數(shù)據(jù)庫課程面臨一系列挑戰(zhàn),并亟待改革。一方面,在空氣中無處不滲透著大數(shù)據(jù)氣息的今天,數(shù)據(jù)庫課程不能沒有大數(shù)據(jù)技術(shù),這是技術(shù)發(fā)展的呼喚,也是提高學生學習興趣、提高教學質(zhì)量、加強人才技術(shù)素質(zhì)的迫切要求。另一方面,傳統(tǒng)數(shù)據(jù)庫關(guān)鍵技術(shù)和方法仍然是數(shù)據(jù)庫課程必不可少的核心內(nèi)容,這些技術(shù)和方法如今依然廣泛應(yīng)用于管理著各行各業(yè)寶貴信息資源的系統(tǒng),對改進部門管理、提高企業(yè)效益、提升人民生活水平均產(chǎn)生著實實在在的效果,而且也是大數(shù)據(jù)技術(shù)的基礎(chǔ)和依托,大數(shù)據(jù)技術(shù)則是數(shù)據(jù)庫技術(shù)的進一步延伸和發(fā)展。在有限教學學時內(nèi),融合傳統(tǒng)數(shù)據(jù)庫關(guān)鍵技術(shù)以及大數(shù)據(jù)最新進展,乃大數(shù)據(jù)時代數(shù)據(jù)庫教學的嘗試和實踐。本教材按順序可以分為5大部分。第一部分是基本概念和基礎(chǔ)知識,包括第1章緒論和第2章關(guān)系模型,都是為后面內(nèi)容打基礎(chǔ)。其中,關(guān)于關(guān)系代數(shù)部分,也曾把關(guān)系代數(shù)放到后面和查詢優(yōu)化一起講,試了一屆發(fā)現(xiàn)把關(guān)系代數(shù)放第2章SQL語言前面對學生整體把握SQL幫助明顯,所以此后放在第2章。總的來說,1、2兩章是全書其他部分的基礎(chǔ)。第二部分主要分3、4、5三章講SQL語言及其應(yīng)用。第三部分是第6章和第7章講數(shù)據(jù)庫設(shè)計。第6章主要是ER設(shè)計以及轉(zhuǎn)換為關(guān)系,所以也涉及了關(guān)系設(shè)計或者說目標也是關(guān)系設(shè)計,但方法主要是從實體及聯(lián)系的角度來做的;第7章講關(guān)系設(shè)計,主要是從數(shù)據(jù)依賴角度來做的,而數(shù)據(jù)依賴實質(zhì)上是屬性及其聯(lián)系。6、7兩章的目標是一致的,都是講關(guān)系設(shè)計,只是方法不同。第四部分是8、9、10三章,主要講DBMS共性的技術(shù)。第五部分是大數(shù)據(jù)新技術(shù)簡介。本教材主要特色包括:(1) 站在大數(shù)據(jù)管理的角度講述數(shù)據(jù)庫設(shè)計和實現(xiàn)的新思想,在數(shù)據(jù)庫設(shè)計和實現(xiàn)的講述中融入大數(shù)據(jù)思維。(2) 提出了數(shù)據(jù)庫管理系統(tǒng)的目標: 簡單、安全、高效地共享數(shù)據(jù),并以此為線索貫穿全書內(nèi)容。(3) 以PostgreSQL為平臺,以網(wǎng)絡(luò)考試系統(tǒng)為案例,實施案例驅(qū)動的教學模式。通過案例分析,解析傳統(tǒng)數(shù)據(jù)管理和大數(shù)據(jù)管理中數(shù)據(jù)庫技術(shù)的基本思想和特點,融合理論與實踐,貫通技術(shù)思想與職業(yè)理念。〖1〗數(shù)據(jù)庫應(yīng)用、設(shè)計與實現(xiàn)前言[3]〖3〗(4) 從大數(shù)據(jù)管理的角度講述數(shù)據(jù)管理技術(shù)發(fā)展趨勢,并對大數(shù)據(jù)技術(shù)進行簡介。(5) 在課程內(nèi)容安排上,主要是先講語言,讓學生通過上機使用數(shù)據(jù)庫,對數(shù)據(jù)庫有直觀了解,進而再講數(shù)據(jù)庫設(shè)計,最后講實現(xiàn),由淺到深,由表及里,便于理解。(6) 研磨了與其他課程如信息安全、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、組成原理等的關(guān)系和銜接。本教材是北京師范大學首批本科大規(guī)模在線開放課程建設(shè)項目數(shù)據(jù)庫系統(tǒng)原理課程指定教材。感謝編輯龍啟銘老師細致入微的辛勤工作和為本教材順利出版付出的心血!感謝參考文獻中列出和未能列出的老師們及其數(shù)據(jù)庫教材,正是受這些精品的指引一步步踏入數(shù)據(jù)庫領(lǐng)域!感謝歷屆博士生、碩士生擔任助教期間對教材及實驗的積極探討!感謝歷屆本科生參與的校對工作!感謝專家、老師、同事、朋友們的有益建議和幫助!特別感謝劉瑩(中科院)、張笑然(中移動)、黃仕航(秒針)、王楠(中國銀行)、姚穎婷(網(wǎng)易)、王俐之(中國銀行)、周鵬霞(中國農(nóng)業(yè)銀行)、甘銳琦(北京大學)、陶燕飛(中國人壽)、張波(山西大學)、姜雪(北京科技大學)、張瑩(中國銀行)、阮慧(IBM)、王洪杰(中辦)、張永妹(淘寶)、王俊杰(中國建設(shè)銀行)、徐娟(中航信)、葉璐婷、胡華曉、胡新、王興建、徐俏、曠潔燕、方真、鄒蓉、孟真、王心欣、余文慧、陳闖霞、古麗斯坦·阿卜杜克然木、羅福莉、趙帥帥、張宇、徐沖沖等等。恕不能一一列出。大家的無私付出使得教材不斷完善多受裨益!本教材可按36~54學時使用。為了教師教學的方便,本教材配有電子教案、習題解答以及程序代碼,所有程序在Java EE和PostgreSQL 9.1上實際運行通過。針對實踐教學,書末附有實驗指導書。在教材編寫過程中,盡可能引入新技術(shù),力求反映技術(shù)發(fā)展趨勢,但由于水平有限,定有許多不足之處,還望老師、同行和專家批評指正。
編者2017年2月
目錄
第1章緒論/1
1.1什么是數(shù)據(jù)庫系統(tǒng)1
1.1.1數(shù)據(jù)庫1
1.1.2DBMS2
1.1.3DBS2
1.2為什么需要數(shù)據(jù)庫系統(tǒng)3
1.2.1DBS前的困境3
1.2.2DBS的吸引力4
1.3數(shù)據(jù)抽象5
1.3.1四層抽象5
1.3.2數(shù)據(jù)抽象的表達6
1.3.3三層模式和兩級映射7
1.4DBMS8
1.4.1數(shù)據(jù)定義語言10
1.4.2數(shù)據(jù)操作語言10
1.4.3數(shù)據(jù)保護語言10
1.4.4查詢處理10
1.4.5存儲管理11
1.4.6保護管理11
1.4.7物理數(shù)據(jù)結(jié)構(gòu)11
1.4.8立足點12
1.5DBS12
1.5.1硬件12
1.5.2軟件13
1.5.3用戶13
1.5.4工作過程14
1.5.5在網(wǎng)絡(luò)上15
1.6數(shù)據(jù)庫技術(shù)發(fā)展趨勢16
習題17〖1〗數(shù)據(jù)庫應(yīng)用、設(shè)計與實現(xiàn)目錄[3]〖3〗第2章關(guān)系模型/18
2.1關(guān)系結(jié)構(gòu)與約束18
2.1.1關(guān)系與表18
2.1.2關(guān)系鍵20
2.1.3約束21
2.2關(guān)系操作21
2.2.1基本關(guān)系代數(shù)運算21
2.2.2附加關(guān)系代數(shù)運算27
2.2.3擴展關(guān)系代數(shù)運算30
習題33
第3章PostgreSQL數(shù)據(jù)定義與操作/34
3.1SQL與PostgreSQL34
3.1.1SQL發(fā)展史34
3.1.2PostgreSQL35
3.1.3數(shù)據(jù)庫語言組成35
3.1.4數(shù)據(jù)庫語言特點36
3.1.5考試系統(tǒng)數(shù)據(jù)庫36
3.2數(shù)據(jù)定義38
3.2.1SQL的基本數(shù)據(jù)類型38
3.2.2表的創(chuàng)建、修改和撤銷39
3.3投影與廣義投影42
3.4選擇43
3.5集合操作47
3.6聯(lián)接查詢48
3.6.1笛卡兒積49
3.6.2內(nèi)聯(lián)接49
3.6.3外聯(lián)接50
3.6.4按屬性聯(lián)接51
3.7更名51
3.8聚集查詢52
3.8.1基本聚集52
3.8.2分組53
3.8.3排名54
3.8.4分窗55
3.9基本查詢語句的一般形式56
3.10嵌套查詢57
3.10.1子查詢作為表57
3.10.2子查詢作為集合58
3.10.3子查詢作為標量60
3.10.4關(guān)系除62
3.11遞歸查詢64
3.12數(shù)據(jù)修改65
3.12.1數(shù)據(jù)插入65
3.12.2數(shù)據(jù)刪除66
3.12.3數(shù)據(jù)更新67
習題68
第4章PostgreSQL應(yīng)用/70
4.1應(yīng)用體系結(jié)構(gòu)70
4.1.1C/S結(jié)構(gòu)70
4.1.2B/S結(jié)構(gòu)71
4.2嵌入式pgSQL73
4.2.1pgSQL的宿主使用73
4.2.2嵌入式pgSQL的使用技術(shù)74
4.2.3動態(tài)SQL語句76
4.3JDBC編程79
4.3.1JDBC基礎(chǔ)79
4.3.2JDBC程序80
4.3.3預(yù)備語句81
4.3.4元數(shù)據(jù)82
4.3.5Java應(yīng)用連接訪問數(shù)據(jù)庫實例82
4.3.6Java小應(yīng)用連接訪問數(shù)據(jù)庫實例83
4.3.7JSP連接訪問數(shù)據(jù)庫實例85
4.3.8Servlet連接訪問數(shù)據(jù)庫實例86
4.4函數(shù)92
4.4.1PL/pgSQL的塊結(jié)構(gòu)92
4.4.2變量常量的定義和賦值92
4.4.3控制結(jié)構(gòu)93
4.4.4存儲函數(shù)95
習題96
第5章PostgreSQL數(shù)據(jù)保護/98
5.1數(shù)據(jù)保護98
5.2視圖99
5.2.1視圖的創(chuàng)建和撤銷99
5.2.2對視圖的操作100
5.3訪問控制101
5.3.1授予權(quán)限101
5.3.2收回權(quán)限103
5.4完整性約束103
5.4.1約束含義103
5.4.2聲明及檢驗104
5.5觸發(fā)器109
5.5.1定義觸發(fā)器109
5.5.2激活觸發(fā)器112
5.5.3刪除觸發(fā)器112
5.6事務(wù)112
習題114
第6章數(shù)據(jù)庫設(shè)計: 實體聯(lián)系方法/115
6.1數(shù)據(jù)庫設(shè)計過程115
6.2ER模型的基本元素116
6.3ER圖118
6.4屬性的分類119
6.5聯(lián)系的設(shè)計120
6.6弱實體集123
6.7特殊化與一般化124
6.8將ER模式變換為關(guān)系模式125
習題128
第7章數(shù)據(jù)庫設(shè)計: 屬性聯(lián)系方法/130
7.1問題的提出130
7.2數(shù)據(jù)依賴132
7.2.1函數(shù)依賴的定義132
7.2.2函數(shù)依賴的邏輯蘊涵133
7.2.3函數(shù)依賴的推理規(guī)則133
7.2.4屬性集的閉包135
7.2.5函數(shù)依賴集的最小依賴集136
7.2.6多值依賴137
7.3模式分解137
7.3.1無損聯(lián)接分解139
7.3.2分解無損聯(lián)接檢驗139
7.3.3保持函數(shù)依賴的分解143
7.4范式145
7.4.1第一范式(1NF)145
7.4.2第二范式(2NF)146
7.4.3第三范式(3NF)146
7.4.4BC范式(BCNF)147
7.4.5第四范式147
7.5規(guī)范化148
7.6大數(shù)據(jù)與反規(guī)范化149
習題149
第8章存儲和存取/152
8.1存儲器件152
8.2磁盤152
8.3DBMS文件管理154
8.4數(shù)據(jù)庫文件組織154
8.4.1行存儲154
8.4.2列存儲158
8.5文件中元組組織158
8.6索引160
8.6.1稠密索引和稀疏索引161
8.6.2多級索引162
8.6.3B 樹索引163
8.6.4哈希方法165
8.7數(shù)據(jù)字典的存儲167
習題167
第9章查詢處理與優(yōu)化/169
9.1查詢處理過程及查詢優(yōu)化問題169
9.2關(guān)系代數(shù)表達式的等價變換與優(yōu)化171
9.2.1關(guān)系代數(shù)表達式等價變換規(guī)則171
9.2.2關(guān)系代數(shù)等價變換的啟發(fā)式規(guī)則174
9.3實現(xiàn)關(guān)系運算的算法與優(yōu)化174
9.3.1選擇運算的算法與優(yōu)化174
9.3.2聯(lián)接運算的算法與優(yōu)化175
9.4表達式的求值方法與優(yōu)化177
9.4.1實體化178
9.4.2流水線178
9.5基于代價的定量優(yōu)化178
習題179
第10章事務(wù)處理/181
10.1事務(wù)概念181
10.1.1如果沒有事務(wù)181
10.1.2事務(wù)及其特性182
10.2并發(fā)執(zhí)行和調(diào)度185
10.2.1并發(fā)執(zhí)行185
10.2.2可串行化187
10.3并發(fā)控制189
10.3.1鎖189
10.3.2兩階段封鎖190
10.3.3死鎖191
10.4故障恢復191
10.4.1恢復準備191
10.4.2恢復處理194
10.5小結(jié)196
習題196
第11章大數(shù)據(jù)技術(shù)/198
11.1大數(shù)據(jù)特征198
11.2大數(shù)據(jù)關(guān)鍵技術(shù)198
11.3分布式文件系統(tǒng)199
11.3.1計算機集群199
11.3.2分布式文件系統(tǒng)200
11.4NoSQL數(shù)據(jù)模型200
11.4.1鍵值存儲200
11.4.2列族存儲201
11.4.3文檔存儲201
11.4.4圖存儲203
11.5大數(shù)據(jù)計算203
11.5.1批處理 204
11.5.2流式計算205
11.6大數(shù)據(jù)應(yīng)用206
11.6.1基于內(nèi)容推薦206
11.6.2協(xié)同過濾推薦207
11.6.3小結(jié)209
習題209
附錄實驗/210
實驗一Access數(shù)據(jù)庫210
實驗二PostgreSQL基礎(chǔ)和安裝210
實驗三數(shù)據(jù)庫的基本操作211
實驗四數(shù)據(jù)表的基本操作212
實驗五數(shù)據(jù)備份與還原214
實驗六簡單數(shù)據(jù)查詢216
實驗七高級數(shù)據(jù)查詢217
實驗八Java連接數(shù)據(jù)庫218
實驗九簡單的PL/pgSQL程序219
實驗十索引和視圖220
實驗十一PostgreSQL權(quán)限管理221
實驗十二觸發(fā)器222
實驗十三性能優(yōu)化222
實驗十四事務(wù)與并發(fā)控制223
實驗十五PowerDesigner224
實驗十六綜合應(yīng)用224
實驗評分標準225
實驗報告要求225
實驗報告模板226
參考文獻/227