数据库技术始于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导入导出及数据库的分离与附加
参考文献