第一章绪论
-
数据库的四个概念:数据、数据库、数据库管理系统、数据库系统
-
数据管理技术经历了:人工管理、文件系统、数据库系统3个阶段
-
数据库系统的特点:
- 数据结构化(这是与文件系统的本质区别)
- 数据共享性高、冗余度低易扩充
- 数据独立性高
- 数据独立性:包括物理独立性和逻辑独立性(模式的两级映像结构)
- 数据的物理独立性:用户的应用程序与数据的物理存储是相互独立的
- 数据的逻辑独立性:应用程序与数据的逻辑结构是相互独立的,当逻辑结构改变时用户程序可以不变
- 数据独立性:包括物理独立性和逻辑独立性(模式的两级映像结构)
-
两类数据模型:由数据结构、数据操作和数据完整性约束三部分构成
- 概念模型(E-R图)
- 逻辑模型或物理模型(查询时:层次模型优于关系模型)
-
完整性约束包括
- 实体完整性:主码唯一非空
- 参照完整性:外码取现有值或为空
- 用户定义完整性:成绩不超过定义的0-100范围,反应某一数据必须满足的语义要求
-
关系模型优缺点:
- 优点:
- 建立在严格的的数学概念上
- 关系用表来表示,清晰明了
- 存取路径对用户透明,有更高的数据独立性
- 缺点:
- 查询效率不如格式化存储,优化工作较为麻烦
- 优点:
-
数据库系统的三级模式结构:内模式、模式、外模式
- 内模式:也称存储模式,一个数据库只有一个内模式,数据内部存储和组织的方式
- 模式:也称逻辑模式,全体数据的逻辑结构和特征描述,一个数据库只有一个模式
- 外模式:也称用户模式,子模式。外模式模式的子集,有多个外模式
-
简答:为何两层映像保证了数据的逻辑独立性和物理独立性
- 答:外模式-模式映像:当模式改变时,只要对外模式-模式的映像进行相应的改变,可以使外模式保持不变,应用程序根据外模式编写,从而程序不必修改,保证了逻辑独立性
- 答:当数据库的存储结构改变时,只要对模式-内模式映像相应的改变,可以使模式不变,从而应用程序也不改变,保证了物理独立性
第二章关系数据库
- 笛卡尔积:集合的全排列组合
- 关系可以有三种类型:基本表(实际存在的表)、查询表(查询结果对应的表)、视图表(其他基本表或视图导出来的表,是虚表,不对应实际存储的数据)
- 简答:基本表与视图的区别与联系:
- 答 联系:用户可以对基本表或者视图进行查询操作,基本表和视图一样都是关系。
- 答 区别:基本表是本身独立存在的表,对应存储文件,是实际存在的表;视图是从基本表或视图导出的表,只对应数据的定义,不对应实际存储文件,是一个虚表。
- 简答:为什么不允许表中有表
- 答:关系数据库中,关系的每一个分量必须是一个不可分割的数据项,我们查询是对属性进行查询,如果表中有表,我们就不能通过对列(属性)的查询得到确定的结果。
- 数据的基本操作:选择、投影、并、差、笛卡尔积
- SQL:结构化查询语言,高度非过程化
- 关系代数
- 选择:从行的角度进行计算,找出满足条件的记录P52
- 投影:从列的角度,选择属性P53(投影操作不仅改变列,还可能因为合并相同的属性,减少了行数)
- 连接:自然连接是特殊的等值连接,去除了重复的属性列。外连接是在自然连接基础加上了被抛弃的元组
第三章关系数据库标准语言SQL
-
SQL集数据查询、数据操纵、数据定义、数据控制于一体
-
SQL的特点:综合统一、高度非过程化、面向集合的操作方式、嵌入式语言提供多种使用方式。
-
CASCADE:级联删除;RESTRICT:限制删除,删除是有限制条件的,如果有其他的依赖关系存在,则不允许删除操作。
-
外码:FOREIGN KEY(Cpno) REFERENCES Course(Cno)
-
数据定义
- 在表中新加一列:AITER TABLE Student ADD address char(10)
- 修改列的数据类型:ALTER TABLE Student ALTER COLUMN Sage INT
- 删除基本表:DROP TABLE CASCADE 默认是RESTRICT
-
简答:什么是数据字典
- 答:数据字典是关系数据库系统内部的一组系统表,记录了所有定义的信息,如:视图定义、完整性约束定义,操作权限等。在执行SQL的数据库定义语句,实际上就是在更新数据字典。
-
数据查询
-
单表查询:
SELECT Sno,Sname from Student
-
属性取别名:属性后直接空格加别名,不带逗号
SELECT Ssex 性别,Sname from Student
-
去掉重复行:DISTINCT
select DISTINCT Sno from SC
-
确定集合:IN,查询查询计算机系、数学系和信息系学生的信息
select Sname,Ssex from Student where Sdept IN ('CS','MA','IS')
-
字符匹配:LIKE,%代表任意长度,_代表单个字符
# 查询名字中第二个字为‘阳’的学生姓名和学号 select Sname,Sno from Student where Sname LIKE '_阳%' # 如果本来查询内容就含有通配符,使用ESCAPE 短语 # 查询A_B课程的课程号和学分 select Cno,Ccredit from Course where Cname LIKE 'A\_B' ESCAPE'\'
-
ORDER BY 子句:默认升序,降序使用DESC
# 查询学生信息,按照年龄降序排列 select * from Student order by Sage DESC
-
聚集函数:凡是SELECT子句中,出现未使用聚集函数的属性,必定出现在group by 语句中
# 多表通过外码连接 # 查询学生2001所修的总学分 select sum(Ccredit) from SC,Course where Sno='2001' and SC.Cno=course.Cno # 查询各个课程号对应的选课人数 select Cno,COUNT(Sno) from SC group by Cno # HAVING子句用法,查询选修3门以上课程的学生学号 select Sno from SC group by Sno having COUNT(*)>3 # 分组后再筛选只能使用having语句
-
简答:WHERE子句与HAVING子句的区别
- 答:区别在于作用的对象不同,WHERE子句作用与基本表或者视图,从中选择满足条件的元组,HAVING短语作用与组,从中选择满足条件的组
- WHERE子句中不能出现聚集函数作为条件表达式(错误用法:WHERE AVG(Grade>90))
-
嵌套查询:IN,有的查询可以用连接运算替代,有些不能替代(相关子查询不行),子查询的结果不依赖父查询,这类子查询称为不相关子查询;子查询的体检依赖于父查询,这类查询为相关子查询。
# 查询每个学生超过平均成绩的课程号 select Sno,Cno from SC X WHERE Grade>( select AVG(Grade) from SC y where y.Sno=x.Sno )
-
数据更新
- 插入数据
-
INSERT INTO Student VALUES(.......)
INSERT INTO SC(Sno,Cno) VALUES('2001','1')
2. 修改数据
UPDATE Student
SET Sage=19
where Sno='2001'
3. 删除数据
DELETE
FROM Student
WHERE Sno='2001'
-
视图管理
-
建立视图
# 建立信息系学生的视图 CREATE VIEW IS_Student AS select Sno,Sname,Sage from Student where Sdept = 'IS'
-
行列子集视图:若一个视图是从单个基本表导出,并且只是去掉了基本表的某些行或列,但保留了主码,这类视图称为行列子集视图
-
视图的消解:在对视图进行查询时,从数据字典中取出视图的定义,转换为对基本表的查询,这个转换过程,称为视图的消解。(大部分的行列子集视图可以消解)
-
-
简答:视图的作用
- 答:视图可以简化用户的操作(因为表与表之间的连接被屏蔽),用户可以用多种角度看待同一数据,视图对重构数据库提供了一定的逻辑独立性,视图可以对机密数据提供安全保护,视图可以更清晰的表达查询
第四章数据库安全性
-
安全级别
- C1:初级的自主安全保护,进行自主存取控制(DAC)
- C2:实际上是安全产品的最低档
- B1:标记安全保护。实施强制存取控制(MAC)B1级别才是真正意义上的安全产品。
-
自主存取控制与强制存取控制
- 存取控制机制包括:定义用户权限和合法权限检查
- 自主存取控制(DAC):通过用户对不同数据库对象授予不同的权限,也可以转授,非常灵活
- 强制存取控制(MAC):每一个数据库对象被标一定的密级,用户被授予一定级别的许可证,只有合法的许可证才可以存取,控制严格。
-
权限的授予与收回
-
授权用户
GRANT select on table Student To U1 with grant option # 所有权限的授予 GRANT ALL PRIVILIENGES # 修改表权限的授予UPDATE # 修改学号的权限的授予 GRANT UPDATE(Sno) on table Student To u4
-
收回权限:REVOKE
# 把对用户的权限收回 REVOKE INSERT ON TABLE Student FROM U5 CASCADE # 级联收回权限
-
-
简答:强制存取控制的规则(MAC)
- 当主体的许可证级别大于等于客体的密级,主体允许读操作
- 主体的许可证级别小于等于客体的密级,主体允许写操作(违反规则2,就可能使数据的密级从高向低流动,发生数据的泄露,即高许可证用户非法降低客体的密级)
第五章数据库完整性
-
为表添加约束条件
ALTER TABLE Student DROP CONSTRAINT C4 ADD CONSTRAINT C5
第六章关系数据库理论
-
不规范的关系模式存在的问题
答:数据冗余、更新异常、插入异常、删除异常,是因为函数依赖和数据依赖关系不规范
规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余的问题。
-
主属性与候选码
答:若候选码多于一个,则选择一个作为主码,包含在候选码中的属性称为主属性,不包含在任何一个候选码的属性称为非主属性(分析主属性时,需要找出所有的候选码)
-
范式:并不是规范化程度越高,关系就越优。当查询时经常设计两个或多个关系模式的属性,连接运算代价很高,关系模型可能低效,这时考虑将多个关系合并为一个关系。
- 一范式:一个关系模式中,所有的属性项都是不可拆分的
- 二范式:每一个非主属性完全依赖于任何一个候选码
- 三范式:消除非主属性与码之间的传递函数依赖关系
第七章数据库设计
- 数据库设计的6个阶段:
- 需求分析
- 概念结构设计:它通过对用户需求进行综合、归纳和抽象,形成独立于具体数据库管理系统的概念模型(E-R图)
- 逻辑结构设计:将概念结构转化为对应的数据类型
- 物理结构设计:设计存储结构,存取路径(对应于内模式)
- 数据库实施:组织数据
- 数据库运行和维护
- 概念结构设计(绘制E-R图)
- 实体型用矩形:表
- 属性用椭圆:列
- 联系用菱形:外码,(菱形在两个矩形之间)
第八章数据库编程
-
填空:SQL语句负责操纵数据库,高级语言语句负责控制逻辑流程
-
主语言为C语言时:EXEC SQL <SQL语句>;主语言为JAVA:# SQL <SQL语句>
-
简答:为什么使用游标
答:SQL是面向集合的,一条SQL语句可以产生或处理多条记录;而主语言是面向记录的,一组主变量一次只能存放一条记录。所以只是用主变量并不能满足SQL语句输出要求。游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,用户可以通过游标逐一获取记录并赋值给主变量。
-
指示变量
- 主变量后没有逗号的就是指示变量。当查询某个数据项为空值时,系统自动将相应主变量后面的指示变量设置为负值,而不再向主变量赋值。所以当指示变量为负值时,不管主变量为何值,均认为值为NULL。
-
存储过程的优点
- 它提供在服务器端快速执行SQL语句的有效途径;降低客户机与服务器之间的通信量,只有最终的处理结果才返回客户端;便于集中控制和维护
第十章数据库恢复技术
-
事务的4个特性:原子性、一致性、隔离性、持续性;数据库恢复机制和并发控制机制是数据库管理系统的重要组成部分
-
故障的种类(选择判断故障的种类)
- 事物内部的故障:如账户转钱的异常情况,事务故障大都指非预期故障
- 系统故障(软故障):硬件错误(CPU故障),OS故障,系统断电等,并未破坏磁盘数据,在系统重启后,先撤销UNDO再重做REDO可以恢复数据库的一致性
- 介质故障(硬故障):磁盘损坏,瞬间强磁场干扰等,破坏数据库
- 计算机病毒
-
恢复的实现技术
-
日志文件:是用来记录事务对数据库的更新操作的文件,分为以记录为单位的日志文件和以数据块为单位的日志文件。
-
事务故障恢复和系统故障恢复必须使用日志文件;动态转储必须建立日志文件,后备副本和日志文件结合才可以有效的恢复数据库
-
登记日记文件的两条原则:
-
登记的次序严格按并发事务执行的时间顺序
-
必须先写日志文件,后写数据库(为什么?)
答:如果数据库修改了,日志文件没有登记,则以后无法恢复这个修改。如果先写日志文件,但没有修改数据库,恢复时只是多执行一次UNDO,不影响数据库的正确性,为了安全,一定要先写日志再写数据库的修改。
-
-
第十一章并发控制
-
为什么采取并发控制?
答:当多个用户并发的存取数据库时就会产生多个事务同时存取同一数据的情况,若对并发操作不加控制可能会存取和存储不正确的数据,破坏事务的一致性和数据库的一致性。数据库管理系统必须提供并发控制机制。(保证事务的隔离性和一致性)
-
并发操作的影响:丢失修改(w-w)、不可重复读(r-w)、读脏数据(w-r-rollback)
-
封锁
- 写锁:事务T对数据对象A加写锁,其他事务不允许加任何锁,则只允许T读取和修改A,解决丢失修改、读脏数据
- 读锁:其他事务只能加读锁,解决了不可重复读
-
不同级别的封锁协议
- 一级封锁协议:读数据不加S锁,不丢失修改
- 二级:读数据前加上S锁,读完释放,不读脏数据
- 三级:读数据前加S锁,事务结束释放,不读脏数据,可重复读。
-
冲突可串行化调度是可串行化调度的充分条件,不是必要条件,事务遵循两段锁协议是可串行化调度的充分条件,不是必要条件