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