数据库系统工程师属于软考中级资格,考试分为**上午基础知识(选择题)和下午应用技术(案例分析题)**两部分。下面按模块进行重点、难点分析及示例。
一、计算机系统基础知识(约占上午题 10-15%)
重点考点
| 考点 | 重要程度 | 难度 |
|---|---|---|
| 数据表示(原码/反码/补码/浮点数) | ★★★★ | ★★★ |
| CPU组成与指令系统 | ★★★ | ★★ |
| 存储系统层次结构 | ★★★ | ★★ |
| 操作系统基础(进程/死锁/存储管理) | ★★★★ | ★★★ |
难点示例:补码运算
例题:已知 X = -45,求其8位补码。
解析:
- -45 的原码:
1 0101101 - 反码(符号位不变,其余取反):
1 1010010 - 补码(反码+1):
1 1010011,即D3H
二、关系数据库理论(核心重点,约占 20-25%)
重点考点
| 考点 | 重要程度 | 难度 |
|---|---|---|
| 关系代数(选择、投影、连接、除法) | ★★★★★ | ★★★★ |
| 函数依赖与Armstrong公理 | ★★★★★ | ★★★★★ |
| 范式判断(1NF→BCNF) | ★★★★★ | ★★★★ |
| 候选键求解 | ★★★★★ | ★★★★ |
| 无损连接分解与依赖保持 | ★★★★ | ★★★★★ |
难点1:候选键求解
方法:将属性分为L(仅出现在左边)、R(仅出现在右边)、LR(左右都出现)、N(不出现在任何FD中)。
- L类和N类属性一定在候选键中
- R类属性一定不在候选键中
- 从L∪N出发求闭包,若能推出全部属性U,则L∪N就是唯一候选键;否则逐步加入LR类属性试探
例题:R(A, B, C, D, E),F = {A→B, BC→D, E→A},求候选键。
解析:
- L类(仅左):E, C
- R类(仅右):D
- LR类:A, B
- N类:无
- 求 {E, C}⁺:E→A, A→B, BC→D → {E, C}⁺ = {A, B, C, D, E} = U
- 候选键为 EC
难点2:范式判断
核心判断依据:
| 范式 | 条件 |
|---|---|
| 1NF | 属性不可再分(原子性) |
| 2NF | 满足1NF + 非主属性完全函数依赖于候选键(无部分依赖) |
| 3NF | 满足2NF + 非主属性不传递依赖于候选键 |
| BCNF | 所有函数依赖 X→Y 中,X 必须包含候选键 |
例题:R(学号, 课程号, 成绩, 教师, 教师职称),F = {(学号,课程号)→成绩, (学号,课程号)→教师, 教师→教师职称}
解析:
- 候选键:(学号, 课程号)
- 教师→教师职称:非主属性"教师职称"传递依赖于候选键(通过"教师"传递)
- 满足2NF(无部分依赖),不满足3NF(有传递依赖)
- 应分解为:R1(学号, 课程号, 成绩, 教师) 和 R2(教师, 教师职称)
难点3:关系代数------除法运算
例题:查询选修了全部课程的学生学号。
设 SC(Sno, Cno, Grade),Course(Cno, Cname)
- 关系代数:π_Sno,Cno(SC) ÷ π_Cno(Course)
- 含义:在SC的(Sno, Cno)投影中,找出Cno集合能覆盖Course全部Cno的Sno
三、SQL语言(核心重点,上午+下午必考,约占 25-30%)
重点考点
| 考点 | 重要程度 | 难度 |
|---|---|---|
| 多表连接查询(内连接/外连接) | ★★★★★ | ★★★ |
| 嵌套子查询(IN/EXISTS/ANY/ALL) | ★★★★★ | ★★★★ |
| 分组聚合(GROUP BY + HAVING) | ★★★★★ | ★★★ |
| 视图创建与更新 | ★★★★ | ★★★ |
| 授权(GRANT/REVOKE) | ★★★★ | ★★ |
| 触发器/存储过程 | ★★★★ | ★★★★ |
| 嵌入式SQL / 动态SQL | ★★★ | ★★★ |
难点1:相关子查询(EXISTS)
例题:查询选修了全部课程的学生姓名。
sql
SELECT Sname FROM Student S
WHERE NOT EXISTS (
SELECT * FROM Course C
WHERE NOT EXISTS (
SELECT * FROM SC
WHERE SC.Sno = S.Sno AND SC.Cno = C.Cno
)
);
解读:双重NOT EXISTS = "不存在某门课使得该学生没有选"= "选了全部课程"。这是关系代数除法在SQL中的等价实现。
难点2:分组聚合经典题型
例题:查询至少选修了3门课程的学生学号和平均成绩。
sql
SELECT Sno, AVG(Grade) AS AvgGrade
FROM SC
GROUP BY Sno
HAVING COUNT(*) >= 3;
易错点:WHERE 对分组前的行过滤,HAVING 对分组后的组过滤。聚合函数只能出现在 SELECT/HAVING/ORDER BY 中。
难点3:授权语句
-- 将查询Student表和修改Sname的权限授予用户U1,并允许其转授
GRANT SELECT, UPDATE(Sname) ON Student TO U1 WITH GRANT OPTION;
-- 收回权限(级联回收)
REVOKE SELECT ON Student FROM U1 CASCADE;
四、数据库设计(下午题核心,约占 20-25%)
重点考点
| 考点 | 重要程度 | 难度 |
|---|---|---|
| E-R模型设计(实体/联系/属性识别) | ★★★★★ | ★★★★ |
| E-R图转关系模式 | ★★★★★ | ★★★ |
| 1:1 / 1:N / M:N 联系的转换 | ★★★★★ | ★★★ |
| 概念设计→逻辑设计→物理设计 | ★★★★ | ★★★ |
关键转换规则
| E-R联系 | 转关系模式规则 |
|---|---|
| 1:1 | 联系可合并入任一实体,外键取任一方主键 |
| 1:N | 联系合并入N端实体,外键取1端主键 |
| M:N | 联系必须独立成一个关系,主键为两端主键的组合 |
例题:教师(教师号, 姓名) 与 课程(课程号, 课程名) 之间存在 M:N 的"讲授"联系,联系属性为"学期"。
转换结果:
- 教师(教师号, 姓名)
- 课程(课程号, 课程名)
- 讲授(教师号, 课程号, 学期) ------ 主键为(教师号, 课程号)
五、事务与并发控制(重点+难点)
重点考点
| 考点 | 重要程度 | 难度 |
|---|---|---|
| ACID特性 | ★★★★★ | ★★ |
| 并发问题(脏读/不可重复读/幻读) | ★★★★★ | ★★★ |
| 封锁协议(一级/二级/三级/两段锁) | ★★★★★ | ★★★★ |
| 可串行化调度判断 | ★★★★ | ★★★★★ |
| 隔离级别 | ★★★★ | ★★★ |
核心知识对照表
| 并发问题 | 封锁协议 | 隔离级别 |
|---|---|---|
| 丢失修改 | 一级封锁(写加X锁到事务结束) | Read Uncommitted |
| 脏读 | 二级封锁(一级 + 读加S锁读完释放) | Read Committed |
| 不可重复读 | 三级封锁(一级 + 读加S锁到事务结束) | Repeatable Read |
| 幻读 | --- | Serializable |
难点:两段锁协议(2PL)与可串行化
两段锁协议要求事务分为"增长阶段"(只加锁不放锁)和"缩减阶段"(只放锁不加锁)。
遵循2PL是可串行化调度的充分非必要条件(常考判断题)。
例题:判断以下调度是否可串行化。
T1: R(A) → W(A) → R(B) → W(B)
T2: R(A) → W(A) → R(B) → W(B)
调度S: R1(A) R2(A) W1(A) W2(A) R1(B) R2(B) W1(B) W2(B)
方法:画优先图(冲突可串行化判断)
- 对于A:R1(A) < W2(A)(T1→T2),R2(A) < W1(A)(T2→T1)
- 出现环 T1→T2→T1,不可串行化
六、查询优化与索引(上午常考)
重点考点
| 考点 | 重要程度 | 难度 |
|---|---|---|
| B+树索引结构 | ★★★★★ | ★★★★ |
| 查询优化策略(选择下推、投影下推) | ★★★★ | ★★★ |
| 哈希索引 | ★★★ | ★★ |
| 聚集索引与非聚集索引 | ★★★★ | ★★ |
B+树关键性质
- 所有数据都在叶节点,叶节点通过指针顺序链接
- 非叶节点仅存索引键值
- m阶B+树:非根内部节点至少 ⌈m/2⌉ 个子节点,至多 m 个
- 常考计算:给定记录数和阶数,求B+树层数
例题:若B+树的阶为100,有10^6条记录,则B+树最少需要几层?
解析:
- 叶节点最多存99个键值(m-1)
- 叶节点数 ≥ 10^6 / 99 ≈ 10102
- 非叶节点至少50个子节点
- 第2层:至少 10102 / 100 ≈ 102 个节点
- 第3层:至少 102 / 100 ≈ 2 个节点
- 第4层:根节点 1个
- 至少需要4层(含叶节点层)
七、数据库恢复技术
重点考点
| 考点 | 重要程度 | 难度 |
|---|---|---|
| 日志(Undo/Redo/Undo-Redo日志) | ★★★★★ | ★★★★ |
| 检查点(Checkpoint)恢复 | ★★★★★ | ★★★ |
| 故障类型与恢复策略 | ★★★★ | ★★ |
检查点恢复------经典分析题
场景:系统故障时的事务状态分析:
时间线: ─────────────────────────▶ 故障点
Tc(检查点)
T1: ────────┤
T2: ───────────────┤
T3: ──────────────────────────→(未完成)
T4: ├──────────────┤
T5: ├────────────→(未完成)
恢复策略:
- T1:检查点前已提交 → 不需要处理
- T2:检查点后提交 → REDO(重做)
- T3:故障时未完成 → UNDO(撤销)
- T4:检查点后开始、故障前提交 → REDO
- T5:检查点后开始、故障时未完成 → UNDO
八、数据库安全与完整性
重点考点
| 考点 | 重要程度 | 难度 |
|---|---|---|
| 完整性约束(实体/参照/用户自定义) | ★★★★ | ★★ |
| 参照完整性的违约处理 | ★★★★ | ★★★ |
| 安全控制(自主/强制访问控制) | ★★★ | ★★ |
参照完整性违约处理
当删除/修改被引用表的元组时:
| 策略 | 说明 |
|---|---|
| CASCADE | 级联删除/修改引用表中对应元组 |
| SET NULL | 将引用表中外键设为NULL |
| SET DEFAULT | 将外键设为默认值 |
| NO ACTION / RESTRICT | 拒绝操作(默认) |
九、网络与信息安全基础(上午题约 5-10%)
常考点
- OSI七层模型 / TCP/IP四层模型
- IP地址/子网划分计算
- 对称加密(DES/AES) vs 非对称加密(RSA)
- 数字签名与数字证书
十、备考建议
- 关系理论 + SQL = 半壁江山:范式判断、候选键求解、SQL综合查询是上午和下午的绝对核心
- 下午题套路固定:通常为 E-R图设计 → 转关系模式 → SQL查询 → 规范化理论分析
- 事务与并发控制:几乎每年必考封锁协议或可串行化判断
- 多做历年真题:考题重复率高,近5年真题覆盖约70%以上考点
- 计算题不能丢:B+树层数、补码运算、子网划分都是送分计算题
希望以上分析对你的备考有所帮助!如果需要某个具体考点的更深入讲解或更多例题,请随时告诉我。