notion image

一、典型题目

闫中敏最后一节课如是说: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+,否则结果会分解不完。
notion image

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语句的语法树及其优化后的语法树。
notion image
notion image
notion image

ER图

设计ER图

需要注意的是ER图中的多对多关系书写方式
notion image

给出关系模式

事务

分析事务

notion image
这种问题需要分类讨论:
  • 立即修改
  • 延迟修改

判断事务是否可串行化

绘制优先图

判断事务回滚情况

需要根据延迟修改还是立即修改进行判断,写出日志画表即可。

分析两阶段封锁协议和时间戳排序协议

首先是给定事务和要求的协议,给出调度结果。例如:
notion image
  • 时间戳排序协议:给出RW两个记号向后根据时间戳推演
  • 两阶段封锁:按规则封锁,检查有无死锁

处理死锁

Loading...