一、典型题目
闫中敏最后一节课如是说:er图一道、规范化一道、写sql、计算关系代数式、数据库基本概念题、查询处理、查询优化、事务管理一两道
往年题目汇总:
年份 | 链接 |
2022 | |
2021 | |
2019 | |
2018 | |
2017 | |
ㅤ | ㅤ |
数据库规范化
可能出现的问题有:
- 验证无损分解:两个关系时使用快速法,多个关系使用列表法
- 验证保持依赖:通过一个算法
- 判断多值依赖
- 验证BCNF:只需要验证F
- 验证BCNF子模式:需要验证F+,是一个NP问题
- 验证3NF模式:只需要验证F,但是需要先找候选码
- BCNF分解(无损性):可以不先求正则覆盖
- 3NF分解(保持依赖性):需要先求正则覆盖
- 寻找候选码
判断无损分解
有快速法和表格法,两个关系时可以使用快速法。
判断保持依赖
验证是否符合范式
根据定义,主要是3NF和BCNF:
- 3NF:找到候选码;的每一个属性都在候选码内
- BCNF:函数依赖左侧都是主码
寻找候选码
寻找没有在函数依赖右侧出现过的属性。这些属性构成候选码的真子集;然后找就完事儿了。
计算正则覆盖/最小覆盖
范式分解
主要分解3NF和BCNF,根据口诀分解即可。
- 3NF分解:
本质上是拆分具有依赖的关系集合。
- BCNF分解:
本质上是不断将不符合BCNF的关系分解。需要注意分解的是+F+,否则结果会分解不完。
SQL
基本语句的编写
对“全部”的表示
其实就是对关系代数里除法的实现和理解,一般:
- 使用
NOT EXISTS (B EXCEPT A)
- 使用
NOT IN ( NOT IN )
- 使用
NOT EXISTS (NOT EXISTS)
需要注意的是通常需要在进行除法之前先将数据投影出来。
空值
使用
IS NULL
进行判断。使用聚集函数的一些子查询
例如求平均成绩最高的学生等计算,需要注意
GROUP BY
和HAVING
等关键字的使用。索引
在一个关系R(A,B,C)上建立索引(B,C),我们采用B+树实现相应索引,问在执行下列SQL语句的时候是否用到了这个索引,为什么?
或者考察对
LIKE
子句,%
加在匹配字符串左侧时无法使用索引。关系代数
对关系和集合的理解
请说明一个关系中的元组之间是否存在顺序,为什么?
优化语法树
例如,已知instructor(ID,sname,dept_name,salary). 写出下列SQL语句的语法树及其优化后的语法树。
ER图
设计ER图
需要注意的是ER图中的多对多关系书写方式
给出关系模式
事务
分析事务
这种问题需要分类讨论:
- 立即修改
- 延迟修改
判断事务是否可串行化
绘制优先图
判断事务回滚情况
需要根据延迟修改还是立即修改进行判断,写出日志画表即可。
分析两阶段封锁协议和时间戳排序协议
首先是给定事务和要求的协议,给出调度结果。例如:
- 时间戳排序协议:给出
R
和W
两个记号向后根据时间戳推演
- 两阶段封锁:按规则封锁,检查有无死锁