综合题练习

1. 第一题:范式与规范化 (8分)
题目分析:
给定的关系 $R$ 包含属性:课程号 (Cno)、教师号 (Tno)、教师地址 (Taddr)。
数据依赖关系很明显:
- 课程号 $\to$ 教师号 (一门课只有一个老师教)
- 教师号 $\to$ 教师地址 (一个老师只有一个地址)
- 由此构成了传递依赖:课程号 $\to$ 教师号 $\to$ 教师地址。
(1) 该关系最高满足第几范式?请说明理由。(3分)
- 答案: 第二范式 (2NF)。
- 理由:
- 候选键是 课程号。
- 满足 1NF:所有属性都是原子的(不可再分)。
- 满足 2NF:因为主键只有“课程号”一列,不存在非主属性对码的部分函数依赖。
- 不满足 3NF:因为存在非主属性对码的传递函数依赖(课程号 $\to$ 教师号,教师号 $\to$ 教师地址,即 $Course \to Teacher \to Address$)。所以最高只到 2NF。
(2) 请说明在什么情况下会发生删除操作异常?(2分)
- 答案:
当某个教师暂时没有教授任何课程(或者删除了该教师教授的唯一一门课程)时,由于元组的删除,该教师的教师号和教师地址信息也会随之丢失,导致无法保存该教师的基本信息。- 例如:如果删除了课程 C003,那么 T3 老师住在 Room2 的信息就从数据库中彻底消失了。
(3) 请将它分解为高一级范式,说明分解后如何解决分解前可能存在的删除操作异常?(3分)
答案:
为了达到 3NF,需要消除传递依赖。我们将关系 $R$ 分解为两个关系模式:- 课程安排表 (课程号, 教师号) —— 主键:课程号
- 教师信息表 (教师号, 教师地址) —— 主键:教师号
解决异常说明:
分解后,教师的信息独立存储在“教师信息表”中。即使删除了“课程安排表”中的某门课程(例如 C003),只要不主动删除“教师信息表”中的记录,T3 及其地址 Room2 的信息依然保留在数据库中,从而解决了删除异常。

2. 第二题:E-R图与数据库设计 (7分)
题目关键点梳理:
- 实体:图书、借书人、出版社。
- 关系:
- 借阅:借书人与图书是 多对多 (m:n) 关系(任何书可被多人借,任何人可借多本书)。属性:借书日期、还书日期。
- 出版:出版社与图书是 一对多 (1:n) 关系(一个出版社出多种书,同一本书仅为一个出版社出版)。
(1) 设计系统的 E-R 图。(3分)
- 矩形(实体):
- 图书 (属性:书号、书名、数量)
- 借书人 (属性:借书证号、姓名、单位)
- 出版社 (属性:出版社名、地址、电话)
- 菱形(联系):
- 借阅 (连接“借书人”和“图书”,连线上注明 m 和 n)。该菱形上挂属性:借书日期、还书日期。
- 出版 (连接“出版社”和“图书”,出版社侧写 1,图书侧写 n)。
(2) 将 E-R 图转换为关系模式。(2分)
根据转换规则:1:n 关系将 1 端的码并入 n 端;m:n 关系须新建一个表。
- 出版社 (出版社名, 地址, 电话)
- 图书 (书号, 书名, 数量, 出版社名)
- 注:“出版社名”是外键,体现出版关系
- 借书人 (借书证号, 姓名, 单位)
- 借阅 (借书证号, 书号, 借书日期, 还书日期)
- 注:这里是多对多产生的中间表
(3) 指出转换后的每个关系模式的主键。(2分)
- 出版社:主键是 出版社名
- 图书:主键是 书号
- 借书人:主键是 借书证号
- 借阅:主键是 (借书证号, 书号) 组合键

3. 第三题:查询优化与语法树 (5分)
SQL 语句分析:
1 | SELECT Sno |
(1) 画出关系代数表示的语法树。(3分)
这是未优化的初始树,逻辑是:先做笛卡尔积,再做选择,最后投影。
- 根节点:$\pi_{Sno}$ (投影 Sno)
- 下一层:$\sigma$ (选择条件:Student.Lno=Linfo.Lno $\land$ Linfo.Bno=Book.Bno $\land$ Bname=”数据库系统”)
- 下一层:$\times$ (笛卡尔积)
- 左子树:$\times$ (笛卡尔积)
- 左子树:Student
- 右子树:Linfo
- 右子树:Book
- 左子树:$\times$ (笛卡尔积)
1 | [投影] π Sno |
(2) 用关系代数表达式优化算法对语法树进行优化,并画出优化后的语法树。(2分)
优化原则:
- 选择运算下移:尽早把
Bname="数据库系统"做掉,减少数据量。 - 笛卡尔积转连接:把 $\times$ 加上选择条件变为连接 $\bowtie$。
优化步骤:
- 先对
Book表做 $\sigma_{Bname=’数据库系统’}$。 - 将处理后的 Book 与 Linfo 进行连接(条件 Bno)。
- 将结果与 Student 进行连接(条件 Lno)。
- 最后投影 Sno。
优化后的语法树结构:
1 | [投影] π Sno |