數(shù)據(jù)庫技術(shù)始于20世紀(jì)60年代末,它的誕生極大地推動了計算機技術(shù)的應(yīng)用和發(fā)展,已成為計算機信息系統(tǒng)的核心技術(shù)和重要基礎(chǔ)。進入21世紀(jì)后,隨著云計算、大數(shù)據(jù)和機器學(xué)習(xí)等技術(shù)的迅速發(fā)展,數(shù)據(jù)庫技術(shù)本身已是計算機科學(xué)技術(shù)中發(fā)展最快的分支之一,也是高等學(xué)校計算機相關(guān)專業(yè)的核心專業(yè)課程。
本教材的作者長期從事數(shù)據(jù)庫技術(shù)的教學(xué)工作,在本書的內(nèi)容選擇和結(jié)構(gòu)組織上凝聚了作者近35年數(shù)據(jù)庫課程教學(xué)工作的實踐經(jīng)驗。本書具有以下特點。
(1) 強調(diào)關(guān)系數(shù)據(jù)庫,關(guān)注NoSQL技術(shù)。盡管關(guān)系數(shù)據(jù)庫在某些大數(shù)據(jù)應(yīng)用場景下顯得有些力不從心,但對于大多數(shù)應(yīng)用來說關(guān)系數(shù)據(jù)庫還是最有效的解決方案。DBEngines數(shù)據(jù)庫排行榜上排名前三位的均為關(guān)系數(shù)據(jù)庫,而且其分值遠(yuǎn)高于其他產(chǎn)品,顯示出其強大的生命力。因此,本書用了8章的篇幅來闡述關(guān)系數(shù)據(jù)庫技術(shù),為今后從事數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)奠定了堅實的基礎(chǔ)。同時,為了順應(yīng)大數(shù)據(jù)時代的需求,用單獨一章來闡述蓬勃發(fā)展中的NoSQL數(shù)據(jù)庫的基本概念和技術(shù)特點,為今后進一步學(xué)習(xí)和使用NoSQL數(shù)據(jù)庫技術(shù)提供了良好的開端。現(xiàn)在這兩種數(shù)據(jù)庫技術(shù)也在相互融合,吸收彼此的優(yōu)點,如關(guān)系數(shù)據(jù)庫SQL Server中添加了文檔存儲功能,而NoSQL數(shù)據(jù)庫MongoDB中添加了對事務(wù)ACID的支持。因此本書內(nèi)容的選擇,有利于學(xué)生充分了解兩種數(shù)據(jù)庫技術(shù)各自的長處,并能正確地選擇和合理地使用。
(2) 強調(diào)理論聯(lián)系實際,注重實踐應(yīng)用。選擇主流的商用關(guān)系數(shù)據(jù)庫產(chǎn)品SQL Server作為實踐平臺,在介紹關(guān)系數(shù)據(jù)庫的基本方法和基本技術(shù)的同時,穿插介紹SQL Server中的相應(yīng)方法和技術(shù),如SQL Server中數(shù)據(jù)庫和基本表的創(chuàng)建和管理、索引和視圖的創(chuàng)建和應(yīng)用、數(shù)據(jù)庫安全技術(shù)、并發(fā)控制技術(shù)以及備份和恢復(fù)技術(shù)。選擇主流的商用NoSQL數(shù)據(jù)庫產(chǎn)品MongoDB來講解NoSQL技術(shù)。附錄中的實驗指導(dǎo)與教學(xué)同步,實驗內(nèi)容具有針對性、啟發(fā)性和綜合設(shè)計性。所有這些安排都有利于學(xué)生掌握數(shù)據(jù)庫系統(tǒng)的基本方法和基本技術(shù)。
第6章系統(tǒng)地介紹了SQL Server中函數(shù)、游標(biāo)、存儲過程和觸發(fā)器的應(yīng)用。第9章以“學(xué)校管理信息系統(tǒng)”為例完整地介紹了數(shù)據(jù)庫設(shè)計的全過程。第10章以當(dāng)前最受關(guān)注的Python語言為例介紹數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)技術(shù)。這些內(nèi)容的闡述有利于學(xué)生今后從事數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)。另外限于篇幅,一個以SQL Server 2014為數(shù)據(jù)庫、以Python 3.6為編程語言開發(fā)的針對中學(xué)的“排課系統(tǒng)”完整案例將通過電子稿的形式贈送給讀者,用于加強實踐應(yīng)用教學(xué)。
(3) 數(shù)據(jù)庫技術(shù)的概念眾多,原理比較抽象,不易理解。作者精心選擇和編寫了數(shù)量多而且題型豐富的練習(xí)題,這些練習(xí)題不但與教學(xué)同步,而且不同題型覆蓋不同的知識點,相互之間不重復(fù)。通過這些練習(xí)題的解答有利于學(xué)生對數(shù)據(jù)庫技術(shù)的理解、消化和應(yīng)用。
本書的適應(yīng)性十分廣泛,從初學(xué)者到有一定基礎(chǔ)的讀者,從師生到專業(yè)技術(shù)人員,具體來說:
(1) 對于初學(xué)者可從本書全面系統(tǒng)地了解數(shù)據(jù)庫技術(shù)的基本概念、基本方法和基本技術(shù)。
(2) 對于有一定基礎(chǔ)的讀者可從本書了解有關(guān)數(shù)據(jù)庫的一些新概念和新技術(shù),如NoSQL基本概念和技術(shù)特征,Python連接和操作SQL Server技術(shù)。
(3) 對于教師和學(xué)生,本書除了可以作為教材外,也是一本很好的教學(xué)參考書。第9章中的數(shù)據(jù)庫設(shè)計實例、附錄中的實驗指導(dǎo)、各章的練習(xí)題以及贈送的中學(xué)排課系統(tǒng),都是很好的教學(xué)參考資料。
(4) 對于專業(yè)技術(shù)人員,可從本書了解主流的商用關(guān)系數(shù)據(jù)庫產(chǎn)品SQL Server和NoSQL數(shù)據(jù)庫產(chǎn)品MongoDB的基本使用方法,從而在實踐中掌握數(shù)據(jù)庫技術(shù)。
考慮到學(xué)校機房以Windows 7平臺為主,書中關(guān)系數(shù)據(jù)庫例題在SQL Server 2014環(huán)境下調(diào)試通過,NoSQL數(shù)據(jù)庫例題在MongoDB 3.4.18環(huán)境下調(diào)試通過,讀者可根據(jù)自己的具體情況靈活選用。需要說明的是,本書不是SQL Server和MongoDB的使用手冊,有關(guān)這兩種數(shù)據(jù)庫產(chǎn)品更詳細(xì)、更深入、更全面完整的技術(shù)文檔請查閱其官網(wǎng)。使用本書的老師若需要練習(xí)題答案、PPT文件、排課系統(tǒng)源代碼、主要例題代碼和創(chuàng)建實驗用數(shù)據(jù)庫代碼、教學(xué)大綱、期末試卷等,可從清華大學(xué)出版社網(wǎng)站下載。
本書結(jié)構(gòu)合理、概念清晰、圖文并茂、例題豐富,適合作為高等學(xué)校計算機、軟件工程、數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)、大數(shù)據(jù)管理與應(yīng)用、人工智能、物聯(lián)網(wǎng)工程、電子商務(wù)等相關(guān)專業(yè)本科生數(shù)據(jù)庫課程的教材,也可作為電器類專業(yè)研究生數(shù)據(jù)庫課程的教材,還可作為計算機等級考試(三級數(shù)據(jù)庫技術(shù))的參考書和自學(xué)教材。
由于編者水平有限,雖然力求精準(zhǔn),但疏漏與不足之處在所難免,敬請專家和讀者指正。
編者
2020年4月于上海
目錄
第1章概述
1.1數(shù)據(jù)庫技術(shù)的產(chǎn)生與發(fā)展
1.1.1數(shù)據(jù)處理和數(shù)據(jù)管理
1.1.2數(shù)據(jù)管理技術(shù)的發(fā)展
1.1.3數(shù)據(jù)庫技術(shù)的特點和展望
1.2數(shù)據(jù)庫系統(tǒng)的組成
1.2.1數(shù)據(jù)庫
1.2.2數(shù)據(jù)庫管理系統(tǒng)等軟件
1.2.3數(shù)據(jù)庫管理員
1.3數(shù)據(jù)庫的體系結(jié)構(gòu)
1.3.1模式的概念
1.3.2三級模式結(jié)構(gòu)
1.3.3二級映像和二級獨立性
習(xí)題1
第2章關(guān)系數(shù)據(jù)庫
2.1數(shù)據(jù)模型
2.1.1數(shù)據(jù)模型的定義和基本要求
2.1.2數(shù)據(jù)模型的三個層次
2.1.3數(shù)據(jù)模型的三個組成要素
2.2概念模型概述
2.2.1信息世界中的基本概念
2.2.2實體間的聯(lián)系
2.2.3概念模型的表示方法——ER圖
2.3邏輯數(shù)據(jù)模型概述
2.3.1層次模型
2.3.2網(wǎng)狀模型
2.3.3關(guān)系模型
2.4關(guān)系模型概述
2.4.1關(guān)系數(shù)據(jù)結(jié)構(gòu)
2.4.2關(guān)系的完整性
2.4.3關(guān)系操作的特點與分類
2.5關(guān)系代數(shù)
2.5.1傳統(tǒng)的集合運算
2.5.2專門的關(guān)系運算
2.5.3擴展的關(guān)系代數(shù)運算
2.5.4關(guān)系代數(shù)運算的應(yīng)用實例
習(xí)題2
第3章結(jié)構(gòu)查詢語言(SQL)
3.1SQL概述
3.1.1SQL的產(chǎn)生與發(fā)展
3.1.2SQL的功能與特點
3.2數(shù)據(jù)定義
3.2.1數(shù)據(jù)庫的創(chuàng)建、修改與刪除
3.2.2SQL中的數(shù)據(jù)類型
3.2.3基本表的創(chuàng)建、修改與刪除
3.3完整性約束的實現(xiàn)
3.3.1數(shù)據(jù)庫完整性的概念
3.3.2各類完整性約束的實現(xiàn)
3.3.3表中完整性約束的增加與刪除
3.4數(shù)據(jù)查詢
3.4.1單表查詢
3.4.2連接查詢
3.4.3嵌套查詢
3.4.4集合查詢
3.5數(shù)據(jù)更新
3.5.1插入數(shù)據(jù)
3.5.2修改數(shù)據(jù)
3.5.3刪除數(shù)據(jù)
習(xí)題3
第4章索引與視圖
4.1索引
4.1.1索引的概念
4.1.2創(chuàng)建索引的基本原則
4.1.3索引的創(chuàng)建與刪除
4.1.4SQL Server 2014中的索引
4.2視圖
4.2.1視圖的定義與刪除
4.2.2查詢視圖
4.2.3更新視圖
4.2.4視圖的作用
4.2.5SQL Server 2014中的索引視圖
習(xí)題4
第5章數(shù)據(jù)庫安全技術(shù)
5.1安全性控制技術(shù)概述
5.1.1計算機系統(tǒng)的三類安全性問題
5.1.2安全標(biāo)準(zhǔn)簡介
5.1.3數(shù)據(jù)庫安全性控制概述
5.2用戶管理和角色管理
5.2.1用戶管理
5.2.2角色管理
5.3權(quán)限管理
5.3.1授予權(quán)限
5.3.2收回權(quán)限
5.4SQL Server的安全機制
5.4.1SQL Server 2014的身份驗證模式
5.4.2SQL Server 2014的固定角色
5.4.3拒絕權(quán)限
習(xí)題5
第6章函數(shù)、游標(biāo)、存儲過程和觸發(fā)器
6.1腳本、批和注釋符
6.1.1腳本
6.1.2批
6.1.3注釋符
6.2常量、變量和運算符
6.2.1常量
6.2.2變量
6.2.3運算符
6.3流程控制語句
6.3.1塊語句
6.3.2分支語句
6.3.3循環(huán)語句
6.3.4其他控制語句
6.4函數(shù)
6.4.1系統(tǒng)函數(shù)
6.4.2用戶自定義函數(shù)
6.5游標(biāo)
6.5.1定義游標(biāo)
6.5.2打開游標(biāo)
6.5.3通過游標(biāo)讀取數(shù)據(jù)
6.5.4通過游標(biāo)修改和刪除數(shù)據(jù)
6.5.5關(guān)閉游標(biāo)和釋放游標(biāo)
6.6存儲過程
6.6.1系統(tǒng)存儲過程
6.6.2用戶自定義存儲過程
6.6.3使用存儲過程實現(xiàn)封裝業(yè)務(wù)邏輯
6.7觸發(fā)器
6.7.1觸發(fā)器概述
6.7.2觸發(fā)器的創(chuàng)建和管理
6.7.3使用觸發(fā)器實現(xiàn)強制業(yè)務(wù)規(guī)則
習(xí)題6
第7章事務(wù)管理
7.1事務(wù)
7.1.1事務(wù)的定義
7.1.2事務(wù)的ACID性質(zhì)
7.1.3事務(wù)的狀態(tài)
7.1.4SQL Server 2014中的事務(wù)
7.2并發(fā)控制
7.2.1并發(fā)操作與數(shù)據(jù)的不一致性
7.2.2可串行性
7.2.3封鎖及封鎖協(xié)議
7.2.4兩段鎖協(xié)議
7.2.5鎖的粒度
7.2.6事務(wù)的隔離級別
7.2.7SQL Server 2014中的并發(fā)控制
7.3數(shù)據(jù)庫恢復(fù)技術(shù)
7.3.1恢復(fù)的實現(xiàn)技術(shù)
7.3.2數(shù)據(jù)庫備份和登記日志方法
7.3.3故障類型及恢復(fù)策略
7.3.4具有檢查點的恢復(fù)技術(shù)
7.3.5SQL Server 2014中的數(shù)據(jù)庫備份與恢復(fù)
習(xí)題7
第8章關(guān)系數(shù)據(jù)庫設(shè)計理論
8.1關(guān)系模式規(guī)范化設(shè)計的必要性
8.2函數(shù)依賴與碼
8.2.1函數(shù)依賴的定義及分類
8.2.2函數(shù)依賴的公理系統(tǒng)和推理規(guī)則
8.2.3屬性集X關(guān)于函數(shù)依賴集F的閉包
8.2.4碼
8.2.5候選碼的快速求解方法
8.3關(guān)系模式的規(guī)范化
8.3.1第一范式
8.3.2第二范式
8.3.3第三范式
8.3.4BC范式
8.3.5規(guī)范化小結(jié)
8.4關(guān)系模式的分解
8.4.1模式分解的概念
8.4.2分解的無損連接性和函數(shù)依賴保持性
8.4.3模式分解的算法
習(xí)題8
第9章數(shù)據(jù)庫設(shè)計
9.1數(shù)據(jù)庫設(shè)計概述
9.1.1數(shù)據(jù)庫設(shè)計在軟件開發(fā)中的地位和作用
9.1.2數(shù)據(jù)庫設(shè)計的基本步驟
9.2基于ER圖的概念結(jié)構(gòu)設(shè)計
9.2.1實體與用戶需求
9.2.2屬性及其分類
9.2.3聯(lián)系及其分類
9.2.4弱實體類型
9.2.5擴展的ER特性
9.2.6ER圖實例
9.2.7概念結(jié)構(gòu)設(shè)計的方法和步驟
9.3邏輯結(jié)構(gòu)設(shè)計
9.3.1強實體的表示
9.3.2聯(lián)系的表示
9.3.3弱實體的表示
9.3.4聚集的表示
9.3.5邏輯結(jié)構(gòu)設(shè)計的步驟
9.4ER模型設(shè)計問題
9.5物理結(jié)構(gòu)設(shè)計
9.6數(shù)據(jù)庫設(shè)計實例——學(xué)校管理信息系統(tǒng)
9.6.1系統(tǒng)概述
9.6.2學(xué)籍管理子系統(tǒng)的需求與概念設(shè)計
9.6.3行政管理子系統(tǒng)的需求與概念設(shè)計
9.6.4課表制定子系統(tǒng)的需求與概念設(shè)計
9.6.5子系統(tǒng)視圖的集成
9.6.6邏輯結(jié)構(gòu)設(shè)計
習(xí)題9
第10章Python數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)技術(shù)
10.1Python語言及開發(fā)環(huán)境
10.1.1Python語言概述
10.1.2開發(fā)環(huán)境搭建
10.2Python第三方庫及其安裝
10.2.1第三方庫概述
10.2.2安裝第三方庫
10.2.3導(dǎo)入第三方庫
10.3Python數(shù)據(jù)庫訪問模塊pymssql
10.3.1connect函數(shù)
10.3.2Connection對象
10.3.3Cursor對象
10.3.4Python訪問數(shù)據(jù)庫的主要步驟
10.4Python圖形用戶界面編程
10.4.1GUI編程概述
10.4.2PyQt5中應(yīng)用程序的創(chuàng)建
10.4.3PyQt5中的常用控件
習(xí)題10
第11章NoSQL數(shù)據(jù)庫技術(shù)
11.1NoSQL產(chǎn)生的根源和必要性
11.1.1關(guān)系數(shù)據(jù)庫的特點
11.1.2大數(shù)據(jù)下關(guān)系數(shù)據(jù)庫存在的問題
11.2NoSQL數(shù)據(jù)庫技術(shù)概述
11.2.1大數(shù)據(jù)4V特征
11.2.2NoSQL定義
11.2.3NoSQL技術(shù)介紹
11.3NoSQL數(shù)據(jù)庫的存儲模式
11.3.1鍵值存儲模式
11.3.2文檔存儲模式
11.3.3列族存儲模式
11.3.4圖存儲模式
11.4MongoDB實踐環(huán)境的創(chuàng)建
11.4.1MongoDB安裝與配置
11.4.2MongoDB數(shù)據(jù)類型
11.4.3電商案例的數(shù)據(jù)模型設(shè)計方案
11.5MongoDB基本操作實踐
11.5.1數(shù)據(jù)庫的基本操作
11.5.2插入文檔
11.5.3查詢文檔
11.5.4修改文檔
11.5.5刪除文檔
11.5.6索引
11.5.7聚合
11.6兩種數(shù)據(jù)庫技術(shù)的選擇
習(xí)題11
附錄A實驗指導(dǎo)
實驗準(zhǔn)備實驗背景介紹
實驗1創(chuàng)建和管理數(shù)據(jù)庫和數(shù)據(jù)表
實驗2實現(xiàn)數(shù)據(jù)完整性
實驗3查詢數(shù)據(jù)
實驗4視圖的定義與使用
實驗5數(shù)據(jù)庫安全技術(shù)
實驗6存儲過程與觸發(fā)器
實驗7并發(fā)控制
實驗8數(shù)據(jù)庫恢復(fù)技術(shù)
實驗9索引與查詢優(yōu)化
實驗10導(dǎo)入導(dǎo)出及數(shù)據(jù)庫的分離與附加
參考文獻(xiàn)