[toc]
软件设计师笔记09_数据库技术基础_精简考点
科目一考试有6分左右。科目二考试占一道大题。
知识点结构图 
基本概念
数据库管理系统的分类
- 关系型数据库系统(RDBS):是指采用关系模型作为数据组织的数据库系统,如MySQL、Oracle、SQL Server等。
- 面向对象的数据库系统(OOBS):是指采用面向对象模型作为数据组织的数据库系统,如ObjectDBMS、VisualFoxPro等。
- 对象关系数据库系统(ORDBS):是指采用对象关系模型作为数据组织的数据库系统,如PostgreSQL、Oracle等。
数据库三级模式两级映像 ⭐️
数据库体系结构大多采用"三级模式和两级映像"。
如图所示 
三级模式 总结
- 外模式 → 视图(用户看到的。对接用户的)
- 概念模式(也称模式) → 基本表(中间层。连接外模式和内模式的)
- 内模式 → 物理文件(存储层。对接数据库系统的。)
两级映像 总结
- 外模式/模式(概念模式)映射,保证数据逻辑独立性,即数据的逻辑结构发生变化后,用户程序也可以不修改。只需要修改外模式和概念模式之间的映像。
- (概念模式)模式/内模式映射,保证数据物理独立性,即当数据的物理结构发生改变时,应用程序不用改变。只需要修改概念模式和内模式之间的映像。
E-R 模型图 ⭐️⭐️⭐️
E-R 模型图
E-R模型图,所采用的3个主要概念是实体、联系和属性。
- 实体:用矩形表示,每个实体由一组属性表示,包括主键、候选键、外键。
- 联系:用菱形表示,分为一对一(1:1)、一对多(1:n)、多对多(m:n)。
- 属性:用椭圆表示,是实体某方面的特性。E-R 模型中的属性分为:①简单和复合属性;②单值和多值属性;③null 属性;④派生属性

两个不同实体集之间的3种联系类型
如图所示 
两个以上不同实体集之间的联系类型
两个以上不同实体集之间存在 1:1:1、1:1:n、1:m:n 和 r:m:n 的联系。
如图表示了3个不同实体集之间的联系。例如图(b)表示病房、病人和医生之间一对多对多(1∶n:m)的联系,联系名为PD。表示了一个病房有多个病人和多个医生,一个医生只负责一个病房,一个病人只属于一个病房的语义 
例题: 假设学校有若干个系,每个系有若干名教师和学生;每个教师可以担任若干门课程,并参加多个项目;每个学生可以同时选修多门课程。请设计该学校教学管理系统的E-R模型,要求给出每个实体、联系的属性。
解题:该学校教学管理系统的E-R模型应该有5个实体,即系、教师、学生、项目和课程。
- (1)设计各实体属性如下:
- 系(系号,系名,主任名)
- 教师(教师号,教师名,职称)
- 学生(学号,姓名,年龄,性别)
- 项目(项目号,名称,负责人)
- 课程(课程号,课程名,学分)
- (2)各实体之间的联系如下:
- 教师担任课程的 1∶n“任课”联系;
- 教师参加项目的 n:m“参加”联系;
- 学生选修课程的n:m“选修”联系;
- 教师、学生与系之间所属关系的1:n:m“领导”联系。其中“参加”联系有一个排名属性,“选修”联系有一个成绩属性。
则对应的E-R模型图如下所示。 
范式 ⭐️⭐️⭐️
- 1NF:每个属性不可分割。
- 2NF:满足 1NF,而且消除非主属性对候选键的部分依赖。即联合主键问题
- 3NF:满足 2NF,而且消除非主属性对候选键的传递依赖。即非主键字段间接依赖主键。
第一范式(1NF):原子性
第一范式要求表中的所有字段值都是不可分解的原子值,即每个字段都是最小的数据单位,不可再分。
第二范式(2NF):唯一性
在满足第一范式的基础上,第二范式进一步要求表中的每个字段都必须与主键完全相关,而不能仅与主键的一部分相关。
这主要针对联合主键的情况,即一个表中只能保存一种数据类型,不可以将多种数据类型保存在同一张表中。
第三范式(3NF):独立性
第三范式要求表中的每个字段都必须直接与主键相关,而不能间接相关。
也就是说,非主键字段之间不能存在依赖关系,它们必须直接依赖于主键。
例题
[2025年上半年] 在关系数据库中,第三范式的主要目的是消除( )类型的问题。
正确答案:传递依赖
SQL语言
查询语句常用语句
SELECT 列名
FROM 表名
WHERE 条件
GROUP BY 分组字段
HAVING 分组条件
ORDER BY 排序字段
LIMIT 偏移量, 行数增删改查SQL语句示例
# 插入数据
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);
# 删除数据
DELETE FROM 表名 WHERE 条件;
DELETE FROM 表名;
# 更新数据
UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2, ... WHERE 条件;
# 查询语句
SELECT 列表1,列表2, ... FROM 表名 WHERE 条件;
SELECT * FROM 表名 WHERE 条件;
SELECT * FROM 表名;
SELECT * FROM 表名 WHERE 条件 ORDER BY 排序字段;
SELECT * FROM 表名 WHERE 条件 GROUP BY 分组字段 HAVING 分组条件;
SELECT * FROM 表名 WHERE 条件 GROUP BY 分组字段 HAVING 分组条件 ORDER BY 排序字段;
SELECT * FROM 表名 WHERE 条件 GROUP BY 分组字段 HAVING 分组条件 ORDER BY 排序字段 LIMIT 偏移量, 行数;SQL访问控制(授权与收回权限)
SQL访问控制是指控制用户对数据访问的权限。
GRANT 权限 ON 对象 TO 用户 [WITH GRANT OPTION]
REVOKE 权限 ON 对象 FROM 用户
## 授权与收回权限的示例
GRANT SELECT, INSERT, UPDATE, DELETE ON 表名 TO 用户名;
GRANT ALL PRIVILEGES ON 表名 TO 用户名;
REVOKE SELECT FROM 用户名;事务并发 ⭐️⭐️⭐️
事务特性
事务具有原子性、一致性、隔离性和持久性。这4个特性也称事务的 ACID 性质。
- 原子性(Atomicity):一个事务中的所有操作在数据库中要么全做,要么全都不做
- 一致性(Consistency):一个事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。
- 隔离性(Isolation):事务与事务之间相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。
- 持久性(Durability):一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也将永久有效。
事务恢复的3个步骤
- 反向扫描文件日志,查找该事务的更新操作
- 对事务的更新操作执行逆操作
- 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志
数据库的并发控制的问题 ⭐️
并发操作带来的数据不一致性有三类:丢失修改、不可重复读和读脏数据。如图 9-30 所示。

丢失修改
如图 9-30(a)所示,事务T1、T2都是对数据 A 做减1操作。事务 T1 在时刻t5 把 A 修改后的值 15 写入数据库,但事务T2 在时刻t7再把它对 A 减1后的值 15 写入。两个事务都是对A的值进行减1操作并且都执行成功,但 A 中的值却只减了 1。
例如火车售票系统,T1与T2各售出了一张票,但数据库里的存票却只减了一张,造成数据的不一致。原因在于T1事务对数据库的修改被T2事务覆盖而丢失了,破坏了事务的隔离性。
不可重复读
如图 9-30(b)所示,事务T1 读取 A、B 的值后进行运算,事务T2在 t6 时刻对 B的值做了修改以后,事务T1又重新读取 A、B的值再运算,同一事务内对同一组数据的相同运算结果不同,显然与事实不相符。同样是事务T2干扰了事务T1的独立性。
读脏数据。
如图 9-30(c)所示,事务T1 对数据C 修改之后,在t3时刻事务T2读取修改后的 C 值做处理,之后事务 T1 回滚,数据C恢复了原来的值,事务T2对C所做的处理是无效的,它读的是被丢掉的垃圾值。
在上面的例子中,在事务并行处理的过程中对相同数据进行访问会导致了数据的不一致性,解决该问题可以从保证事务的隔离性入手。并发控制技术 ⭐️⭐️
有多种技术用来解决并发操作带来的数据不一致性问题,主要有封锁等。
并发控制的主要技术是封锁。封锁的类型有排它锁(简称X锁或写锁)和共享锁(简称S锁或读锁)。
封锁的类型
- 排他锁(X/写锁)。若事务T对数据对象 A加上X锁,则只允许事务T读取和修改 A,其他事务都不能再对 A 加任何类型的锁,直到事务T释放 A上的锁。
- 共享锁(S/读锁)。若事务T对数据对象 A 加上S锁,则只允许事务T读取 A,但不能修改 A,其他事务只能再对A加S锁,直到事务T释放A 上的S锁。这就保证了其他事务可以读 A,但在事务 T 释放A上的S锁之前不能对A进行任何修改。
锁的兼容性
| 锁类型 | 缩写 | 功能 | 兼容性 |
|---|---|---|---|
| 排他锁 | X锁/写锁 | 事务独占数据,可读写 | 与任何锁不兼容 |
| 共享锁 | S锁/读锁 | 事务共享数据,仅可读 | 与S锁兼容,与X锁不兼容 |
即X锁与任何锁不兼容。S锁只与S锁兼容,与X锁不兼容。
三级封锁协议 ⭐️
| 级别 | 操作 | 解决问题 |
|---|---|---|
| 一级封锁协议 | 事务修改数据前加X锁,事务结束释放 | 即可解决丢失修改问题。 |
| 二级封锁协议 | 一级基础上+读前加S锁,读完释放 | 即可解决丢失修改、读脏数据问题。 |
| 三级封锁协议 | 一级基础上+读前加S锁,事务结束释放 | 即可解决丢失修改、读脏数据、不可重复读三个数据不一致的问题。 |
真题
- 采用三级模式结构的数据库系统中,如果对一个表创建聚簇索引,那么改变的是数据库的( 内模式 )。
- 数据的物理独立性和逻辑独立性分别是通过修改( 模式与内模式之间的映像、外模式与模式之间的映像 )来完成的。
- 数据库系统通常采用三级模式结构:外模式、模式和内模式。这三级模式分别对应数据库的视图、基本表和存储文件。
- 以下关于数据库两级映像的叙述中,正确的是( 模式/内模式映像实现了概念模式到内模式之间的相互转换 )。
- 采用三级结构/两级映像的数据库体系结构,如果对数据库的一张表创建聚簇索引,改变的是数据库的( 内模式 )。
