本書從數(shù)據(jù)庫的基本理論知識出發(fā),通過豐富的實例介紹數(shù)據(jù)庫的基本操作、管理、維護(hù)、設(shè)計過程以及開發(fā)應(yīng)用等。全書分為五篇。前兩篇為基礎(chǔ)理論篇、數(shù)據(jù)庫設(shè)計理論,主要介紹數(shù)據(jù)庫的基本原理與基礎(chǔ)知識,以及數(shù)據(jù)模型相關(guān)理論,數(shù)據(jù)庫的設(shè)計優(yōu)化理論以及數(shù)據(jù)庫的設(shè)計與實施過程;第三篇介紹數(shù)據(jù)庫安全保護(hù)理論和操作;第四篇為基礎(chǔ)應(yīng)用篇,介紹SQL Server 2012的基本功能及操作。第五篇為高級應(yīng)用篇,詳細(xì)介紹了T-SQL的編程知識。每章還配有大量的操作實例和習(xí)題,凡是加了底紋的代碼,都可以直接在查詢窗口運行。附錄中還配有十五個實驗及一個課程作業(yè),可作為實驗課的任務(wù)。本書可作為大中專院校本科生或研究生相關(guān)專業(yè)網(wǎng)絡(luò)數(shù)據(jù)庫、數(shù)據(jù)庫應(yīng)用、數(shù)據(jù)庫原理等課程的教材,可根據(jù)專業(yè)需要選擇部分篇章進(jìn)行教學(xué),其它的篇章也為學(xué)生自學(xué)或提高的內(nèi)容。也可供從事計算機軟件開發(fā)與應(yīng)用的科研人員、工程技術(shù)人員以及其他有關(guān)人員參考。對于非計算機專業(yè)的學(xué)生,建議先講解基礎(chǔ)應(yīng)用篇,再選講前面的理論篇。對于重SQL Server操作的課程,可以只講基礎(chǔ)應(yīng)用篇和高級應(yīng)用篇,基本包含了項目開發(fā)所需的數(shù)據(jù)庫知識。對于重數(shù)據(jù)庫原理的課程,可以讓學(xué)生邊自學(xué)基礎(chǔ)應(yīng)用篇,邊講解前三篇的內(nèi)容。
本書從數(shù)據(jù)庫的基本理論知識出發(fā),通過豐富的實例介紹數(shù)據(jù)庫的基本操作、管理、維護(hù)、設(shè)計過程以及開發(fā)應(yīng)用等。
前 言數(shù)據(jù)庫技術(shù)是計算機科學(xué)技術(shù)中發(fā)展快的領(lǐng)域之一,也是應(yīng)用廣泛的技術(shù)之一,它已成為計算機信息管理系統(tǒng)與應(yīng)用系統(tǒng)的核心技術(shù)和重要基礎(chǔ)。數(shù)據(jù)庫技術(shù)從20世紀(jì)60年代中期產(chǎn)生到今天已有近六十年的歷史,經(jīng)歷了三代演變,造就了C.W.Bachman、E.F.Codd和James Gray三位圖靈獎獲得者;發(fā)展了以數(shù)據(jù)建模和DBMS(數(shù)據(jù)庫管理系統(tǒng))核心技術(shù)為主、內(nèi)容豐富的一門學(xué)科;帶動了一個巨大的軟件產(chǎn)業(yè)DBMS產(chǎn)品及其相關(guān)工具和解決方案,五十多年來的輝煌。從70年代后期開始,國外各大學(xué)先后把數(shù)據(jù)庫列為計算機科學(xué)與技術(shù)專業(yè)的一門重要課程。我國各高等院校從80年代開始,也把數(shù)據(jù)庫作為計算機專業(yè)的主要課程之一,83年教育部部屬高校計算機科學(xué)與技術(shù)專業(yè)教學(xué)方案將數(shù)據(jù)庫系統(tǒng)原理列為四年制本科的必修課程。目前,數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用已經(jīng)成為計算機科學(xué)技術(shù)及其相關(guān)專業(yè)的專業(yè)基礎(chǔ)課程。針對數(shù)據(jù)庫技術(shù)的進(jìn)展和我國數(shù)據(jù)庫應(yīng)用水平的提高,在借鑒前人經(jīng)驗和總結(jié)實際教學(xué)的前提下,并順應(yīng)數(shù)據(jù)庫應(yīng)用的發(fā)展,我們對《數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用》進(jìn)行了改版。與第1版相比,第二版中教學(xué)和練習(xí)平臺換成了SQL Server 2012,并且將例子統(tǒng)一成了xsxk的數(shù)據(jù)庫的操作,這樣方便讀者模仿,還有少量例子使用比較經(jīng)典數(shù)據(jù)庫pubs,為了方便讀者練習(xí),我們將這兩個數(shù)據(jù)庫的結(jié)構(gòu)和部分?jǐn)?shù)據(jù)列舉在附錄中;每章還配有一定數(shù)量的習(xí)題以幫助讀者加深理解,大部分章節(jié)配了操作實例,凡是加了底紋的代碼,都可以直接在查詢窗口運行。附錄中還配有十五個實驗及一個課程作業(yè),可作為上機實驗的任務(wù)和期末課程作業(yè),減輕老師的工作量。通過參考國內(nèi)外的新文獻(xiàn),我們還將一些概念和名稱進(jìn)行了修改,或者并列地列舉了不同的表述,這樣當(dāng)讀者在閱讀別的文獻(xiàn)時,不至于迷;蛘`會。另外,我們對全書的模塊進(jìn)行了重新劃分,內(nèi)容也進(jìn)行重新分配,顯得更精細(xì)和合理,也方便教學(xué)時對內(nèi)容的選擇。全書分為五篇。第1篇為基礎(chǔ)理論篇,主要介紹數(shù)據(jù)庫的基本原理與基礎(chǔ)知識,以及數(shù)據(jù)模型相關(guān)理論,重點介紹關(guān)系數(shù)據(jù)相關(guān)理論及查詢優(yōu)化及其相關(guān)理論。第二篇,數(shù)據(jù)庫的設(shè)計優(yōu)化理論以及數(shù)據(jù)庫的設(shè)計與實施過程,從這一章,讀者將學(xué)到數(shù)據(jù)庫分析設(shè)計的相關(guān)知識,并能完成簡單的數(shù)據(jù)庫的設(shè)計與實現(xiàn)。第三篇介紹數(shù)據(jù)庫系統(tǒng)安全與保護(hù)的相關(guān)原理以及實現(xiàn)安全與保護(hù)的相關(guān)操作,如:數(shù)據(jù)庫的安全管理、數(shù)據(jù)的完整性、備份和恢復(fù)管理功能,學(xué)完這章,讀者對數(shù)據(jù)庫原理就有了基本的認(rèn)識了,而且懂得了數(shù)據(jù)庫日常管理的知識。第四篇為基礎(chǔ)應(yīng)用篇,以SQL Server 2012為例,介紹SQL Server 2012的基本功能及操作、使用Transact-SQL(以下簡稱:T-SQL)語句創(chuàng)建和管理數(shù)據(jù)庫、表、索引和視圖,并重點介紹了各種查詢,使初學(xué)者能快速了解數(shù)據(jù)庫的主要操作。第五篇為高級應(yīng)用篇,詳細(xì)介紹了T-SQL的編程基礎(chǔ)、創(chuàng)建與管理存儲過程、觸發(fā)器和自定義函數(shù)及游標(biāo)等編程知識,學(xué)完這一章讀者將懂得數(shù)據(jù)庫開發(fā)的知識。每章還配有一定數(shù)量的習(xí)題以幫助讀者加深理解,大部分章節(jié)配了大量的操作實例,凡是加了底紋的代碼,都可以直接在查詢窗口運行。我們在本書的編寫過程中,查閱了國內(nèi)外大量數(shù)據(jù)庫研究成果和文獻(xiàn),力求把數(shù)據(jù)庫領(lǐng)域的新理論、新技術(shù)和新方法納入本書,使之既包括數(shù)據(jù)庫系統(tǒng)的基本理論、概念和技術(shù),也能夠反映數(shù)據(jù)庫領(lǐng)域的新進(jìn)展。但是,由于才疏學(xué)淺,時間緊迫,不足之處在所難免,我們會在每次重印時,及時改正已發(fā)現(xiàn)的錯誤,真心希望使用本書的老師和同學(xué)不吝指教。我們的Email地址:wlp@hunnu.edu.cn。編者
目錄
第一篇
基礎(chǔ)理論 1
第1章
數(shù)據(jù)庫技術(shù)概述 2
1.1 數(shù)據(jù)庫的相關(guān)概念 2
1.1.1 數(shù)據(jù) 2
1.1.2 數(shù)據(jù)庫 2
1.1.3 數(shù)據(jù)庫管理系統(tǒng) 3
1.1.4 數(shù)據(jù)庫系統(tǒng) 4
1.1.5 數(shù)據(jù)庫技術(shù) 4
1.2 數(shù)據(jù)庫管理系統(tǒng)概述 5
1.2.1 數(shù)據(jù)庫管理系統(tǒng)的目標(biāo) 5
1.2.2 數(shù)據(jù)庫管理系統(tǒng)的功能 6
1.2.3 用戶訪問數(shù)據(jù)庫的過程 7
1.2.4 數(shù)據(jù)庫管理和數(shù)據(jù)庫管理員 8
1.3 數(shù)據(jù)庫系統(tǒng)概述 9
1.3.1 數(shù)據(jù)庫系統(tǒng)的微觀結(jié)構(gòu) 10
1.3.2 數(shù)據(jù)庫系統(tǒng)的宏觀結(jié)構(gòu) 13
1.4 數(shù)據(jù)庫技術(shù)概述 15
1.4.1 數(shù)據(jù)庫技術(shù)的發(fā)展歷史 15
1.4.2 *數(shù)據(jù)庫技術(shù)的研究與應(yīng)用領(lǐng)域和發(fā)展方向 18
1.5 習(xí)題 22
第2章
數(shù)據(jù)模型 23
2.1 數(shù)據(jù)描述 23
2.1.1 數(shù)據(jù)的三種范疇 23
2.1.2 實體間的聯(lián)系 25
2.1.3 三種世界的概念轉(zhuǎn)換 26
2.2 數(shù)據(jù)模型 27
2.2.1 數(shù)據(jù)模型概述 27
2.2.2 數(shù)據(jù)模型的三要素 28
2.3 概念模型與E-R表示方法 29
2.3.1 概念模型的基本概念 29
2.3.2 概念模型的E-R表示方法 30
2.3.3 概念數(shù)據(jù)模型實例 31
2.4 邏輯數(shù)據(jù)模型 33
2.4.1 層次模型 34
2.4.2 網(wǎng)狀模型 35
2.4.3 關(guān)系模型 37
2.4.4 面向?qū)ο竽P?39
2.5 習(xí)題 40
第3章
關(guān)系數(shù)據(jù)庫理論及查詢優(yōu)化 41
3.1 關(guān)系數(shù)據(jù)庫 41
3.1.1 關(guān)系模型的組成 41
3.1.2 關(guān)系模式的形式化定義 41
3.2 關(guān)系代數(shù) 42
3.2.1 五種基本運算 43
3.2.2 關(guān)系代數(shù)的其他操作 45
3.3 *關(guān)系查詢優(yōu)化 47
3.3.1 關(guān)系系統(tǒng)及其查詢優(yōu)化 47
3.3.2 查詢優(yōu)化的一般準(zhǔn)則 49
3.3.3 關(guān)系代數(shù)等價變換規(guī)則 50
3.3.4 關(guān)系代數(shù)表達(dá)式的優(yōu)化算法 51
3.4 習(xí)題 53
第二篇
設(shè)計理論 54
第4章
關(guān)系模式的規(guī)范化 55
4.1 問題的提出 55
4.1.1 關(guān)系模式 55
4.1.2 關(guān)系 55
4.1.3 插入、刪除、更新異常 57
4.2 關(guān)系模式的函數(shù)依賴 57
4.2.1 函數(shù)依賴 58
4.2.2 鍵(Key) 59
4.2.3 函數(shù)依賴的邏輯蘊含 60
4.3 關(guān)系模式的規(guī)范化 66
4.3.1 第一范式(1NF) 66
4.3.2 第二范式(2NF) 67
4.3.3 第三范式(3NF) 68
4.3.4 BCNF范式(BCNF) 69
4.3.5 多值依賴與第四范式 70
4.3.6 各范式之間的關(guān)系 72
4.4 *關(guān)系模式的分解特性 73
4.4.1 關(guān)系模式的分解 73
4.4.2 分解的無損連接性 74
4.4.3 關(guān)系模式分解算法 79
4.5 *關(guān)系模式的優(yōu)化 83
4.5.1 水平分解 84
4.5.2 垂直分解 84
4.6 習(xí)題 85
第5章
數(shù)據(jù)庫的設(shè)計與實施 87
5.1 數(shù)據(jù)庫設(shè)計概述 87
5.1.1 數(shù)據(jù)庫設(shè)計的特點 87
5.1.2 數(shù)據(jù)庫設(shè)計方法 88
5.1.3 數(shù)據(jù)庫設(shè)計的步驟 89
5.2 數(shù)據(jù)庫規(guī)劃 90
5.3 需求分析 91
5.3.1 需求分析的任務(wù) 91
5.3.2 需求分析的方法 91
5.3.3 需求分析的步驟 92
5.4 概念結(jié)構(gòu)設(shè)計 95
5.4.1 設(shè)計各局部應(yīng)用的E-R模型 96
5.4.2 全局E-R模型的設(shè)計 97
5.5 邏輯結(jié)構(gòu)設(shè)計 98
5.5.1 E-R圖向關(guān)系模型的轉(zhuǎn)換 99
5.5.2 關(guān)系模型向特定的RDBMS的轉(zhuǎn)換 100
5.5.3 邏輯模式的優(yōu)化 100
5.5.4 外模式的設(shè)計 102
5.6 物理結(jié)構(gòu)設(shè)計 103
5.6.1 關(guān)系模式存取方法選擇 104
5.6.2 確定系統(tǒng)的存儲結(jié)構(gòu) 107
5.7 數(shù)據(jù)庫實施 108
5.8 數(shù)據(jù)庫運行和維護(hù) 109
5.9 數(shù)據(jù)庫設(shè)計實例 圖書管理系統(tǒng)數(shù)據(jù)庫設(shè)計 110
5.10 習(xí)題 112
第三篇
安全與保護(hù)理論 113
第6章
數(shù)據(jù)庫的安全性控制 114
6.1 數(shù)據(jù)庫安全性控制概述 114
6.2 SQL Sever的安全性措施概述 115
6.3 SQL Server身份驗證 116
6.3.1 身份驗證概述 116
6.3.2 身份驗證方式設(shè)置 117
6.3.3 登錄名管理 119
6.4 SQL Server數(shù)據(jù)庫身份驗證 122
6.5 SQL Server數(shù)據(jù)庫對象安全驗證 123
6.5.1 角色 124
6.5.2 授權(quán)的主體 126
6.5.3 架構(gòu) 127
6.5.4 授權(quán)的安全對象 128
6.5.5 權(quán)限操作 129
6.5.6 命令行方式進(jìn)行權(quán)限管理 131
6.6 習(xí)題 133
第7章
數(shù)據(jù)完整性 134
7.1 完整性約束條件 134
7.2 完整性控制 136
7.3 SQL Sever的完整性的實現(xiàn) 139
7.4 習(xí)題 143
第8章
事務(wù) 144
8.1 事務(wù)的概念 144
8.2 事務(wù)調(diào)度 146
8.3 事務(wù)隔離級別 148
8.4 SQL Server 中的事務(wù)定義 151
8.5 習(xí)題 153
第9章
并發(fā)控制 154
9.1 封鎖技術(shù) 154
9.2 事務(wù)隔離級別與封鎖規(guī)則 155
9.3 封鎖的粒度 156
9.4 *封鎖帶來的問題 158
9.5 *兩段鎖協(xié)議 159
9.6 *樂觀并發(fā)控制與悲觀并發(fā)控制 160
9.7 *SQL Server的并發(fā)控制 160
9.8 習(xí)題 162
第10章
數(shù)據(jù)庫的恢復(fù) 163
10.1 數(shù)據(jù)庫恢復(fù)技術(shù) 163
10.1.1 故障的種類 163
10.1.2 恢復(fù)的實現(xiàn)技術(shù) 164
10.1.3 SQL Server基于日志的恢復(fù)策略 166
10.1.4 SQL Server檢查點 168
10.2 SQL Server的備份與恢復(fù) 169
10.3 習(xí)題 174
第四篇
基礎(chǔ)應(yīng)用 175
第11章 SQL SERVER 2012基本知識 176
11.1 SQL Server 2012發(fā)展簡介 176
11.2 SQL Server 2012組件和管理工具 177
11.2.1 服務(wù)器組件 177
11.2.2 管理工具 178
11.2.3 文檔 178
11.3 SQL Server 2012服務(wù)器的管理 179
11.3.1 啟動停止服務(wù)器 179
11.3.2 配置管理器 180
11.3.3 服務(wù)器的注冊 180
11.4 習(xí)題 181
第12章
數(shù)據(jù)庫操作 182
12.1 SQL Server實例 182
12.2 數(shù)據(jù)庫基本概念 182
12.2.1 物理數(shù)據(jù)庫 182
12.2.2 邏輯數(shù)據(jù)庫 184
12.2.3 系統(tǒng)數(shù)據(jù)庫和用戶數(shù)據(jù)庫 186
12.3 創(chuàng)建數(shù)據(jù)庫 187
12.3.1 管理工具交互方式創(chuàng)建數(shù)據(jù)庫 187
12.3.2 命令行方式創(chuàng)建數(shù)據(jù)庫 189
12.4 修改數(shù)據(jù)庫 190
12.4.1 管理工具交互方式修改數(shù)據(jù)庫 190
12.4.2 命令行方式修改數(shù)據(jù)庫 191
12.5 刪除數(shù)據(jù)庫 192
12.5.1 交互方式刪除數(shù)據(jù)庫 192
12.5.2 命令行方式刪除數(shù)據(jù)庫 192
12.6 數(shù)據(jù)庫的分離和附加 192
12.6.1 分離數(shù)據(jù)庫 193
12.6.2 附加數(shù)據(jù)庫 193
12.7 數(shù)據(jù)庫的快速備份與恢復(fù) 194
12.8 *數(shù)據(jù)庫的收縮 195
12.8.1 手動收縮 195
12.8.2 自動收縮 196
12.9 * 移動數(shù)據(jù)庫 196
12.10 *數(shù)據(jù)庫快照 197
12.10.1 數(shù)據(jù)庫快照的優(yōu)點 197
12.10.2 數(shù)據(jù)庫快照的操作 198
12.11 習(xí)題 198
第13章
表和表數(shù)據(jù)操作 200
13.1 表概念 200
13.1.1 表結(jié)構(gòu) 200
13.1.2 表類型 200
13.2 創(chuàng)建表 202
13.2.1 列的數(shù)據(jù)類型 202
13.2.2 列的其他屬性 206
13.2.3 交互方式創(chuàng)建表 206
13.2.4 命令行方式創(chuàng)建表 207
13.3 修改表 208
13.3.1 交互方式修改表 208
13.3.2 命令行方式修改表 210
13.4 刪除表 211
13.5 表數(shù)據(jù)操作 211
13.5.1 交互方式操作表數(shù)據(jù) 211
13.5.2 命令行方式操作表數(shù)據(jù) 212
13.6 習(xí)題 214
第14章
數(shù)據(jù)查詢 215
14.1 數(shù)據(jù)查詢語句 215
14.1.1 投影列 216
14.1.2 選擇行 217
14.1.3 連接 219
14.2 排序 221
14.3 簡單統(tǒng)計 222
14.4 分組統(tǒng)計 223
14.5 子查詢 224
14.5.1 無關(guān)子查詢 224
14.5.2 相關(guān)子查詢 225
14.5.3 子查詢作數(shù)據(jù)項 226
14.6 集合操作 227
14.7 存儲查詢結(jié)果 228
14.8 習(xí)題 229
第15章
視 圖 230
15.1 視圖概述 230
15.2 視圖的類型 230
15.3 創(chuàng)建視圖 231
15.4 查詢視圖 233
15.5 可更新視圖 233
15.6 修改視圖定義 234
15.7 刪除視圖 235
15.8 視圖小結(jié) 236
15.8.1 創(chuàng)建視圖準(zhǔn)則 236
15.8.2 視圖的優(yōu)點和作用 236
15.9 習(xí)題 237
第16章
數(shù)據(jù)完整性和索引 238
16.1 數(shù)據(jù)完整性 238
16.1.1 PRIMARY KEY主鍵約束 238
16.1.2 UNIQUE唯一性約束 240
16.1.3 FOREIGN KEY引用完整性約束 241
16.1.4 CHECK檢查約束 242
16.2 索引 244
16.2.1 索引的分類 244
16.2.2 創(chuàng)建索引 245
16.2.3 查看索引 246
16.2.4 修改索引 247
16.2.5 刪除索引 247
16.2.6 其他類型索引 247
16.2.7 優(yōu)化索引 249
16.3 數(shù)據(jù)庫關(guān)系圖 251
16.4 習(xí)題 253
第五篇
高級應(yīng)用 254
第17章 T-SQL語言 255
17.1 SQL語言基本元素 255
17.1.1 T-SQL語言簡介 255
17.1.2 TSQL語言的語法約定 255
17.1.3 標(biāo)識符 256
17.1.4 常量和變量 256
17.1.5 注釋 258
17.1.6 運算符 258
17.1.7 函數(shù) 259
17.1.8 表達(dá)式 262
17.2 流程控制語句 264
17.2.1 SET語句 264
17.2.2 BEGIN END語句 265
17.2.3 IF-ELSE語句 266
17.2.4 WHILE、BREAK、CONTINUE語句 266
17.2.5 RETURN語句 267
17.2.6 WAITFOR語句 267
17.2.7 GOTO語句 267
17.2.8 TRY CATCH語句 267
17.2.9 GO語句 268
17.2.10 EXECUTE語句 268
17.2.11 T-SQL語句的解析、編譯和執(zhí)行 268
17.3 數(shù)據(jù)定義、操縱及控制語言 269
17.3.1 數(shù)據(jù)定義語言 269
17.3.2 數(shù)據(jù)操縱語言 270
17.3.3 數(shù)據(jù)控制語言 272
17.4 習(xí)題 274
第18章
存儲過程、自定義函數(shù)、觸發(fā)器和游標(biāo) 275
18.1 存儲過程 275
18.1.1 存儲過程概述 275
18.1.2 創(chuàng)建存儲過程 275
18.1.3 調(diào)用存儲過程 276
18.1.4 獲取存儲過程信息 277
18.1.5 修改和重命名存儲過程 277
18.1.6 重新編譯存儲過程 278
18.1.7 刪除存儲過程 278
18.2 用戶定義函數(shù) 279
18.2.1 標(biāo)量值函數(shù) 279
18.2.2 內(nèi)嵌表值函數(shù) 279
18.2.3 多語句表值函數(shù) 280
18.2.4 修改和重命名用戶定義函數(shù) 280
18.2.5 刪除用戶定義函數(shù) 281
18.3 觸發(fā)器 281
18.3.1 觸發(fā)器概述 281
18.3.2 觸發(fā)器的類型 282
18.3.3 觸發(fā)器的設(shè)計規(guī)則 283
18.3.4 使用觸發(fā)器 285
18.3.5 啟用、禁用和刪除觸發(fā)器 286
18.3.6 觸發(fā)器的用途 287
18.4 游標(biāo) 288
18.4.1 游標(biāo)概述 288
18.4.2 游標(biāo)的類型 288
18.4.3 游標(biāo)的使用 290
18.5 習(xí)題 293
附錄 295
1. 本書中示例數(shù)據(jù)庫的結(jié)構(gòu)及數(shù)據(jù) 295
2. 上機實驗題 298
3. 課程設(shè)計要求 305
參考文獻(xiàn) 307