原文筆記

本課程筆記資料庫系統 · 30 篇
数据库补充习题 70+100 复习索引cs/db/100+70/00-复习索引Day 01 - 数据库100题:单项选择 1-20cs/db/100+70/Day01-数据库100题-选择01-20Day 02 - 数据库100题:单项选择 21-40cs/db/100+70/Day02-数据库100题-选择21-40Day 03 - 数据库100题:单选 41-50,填空 51-60cs/db/100+70/Day03-数据库100题-选择41-50填空51-60Day 04 - 数据库100题:填空 61-80cs/db/100+70/Day04-数据库100题-填空61-80Day 05 - 数据库100题:填空 81-100cs/db/100+70/Day05-数据库100题-填空81-100Day 06 - 数据库70题:试题 1-11cs/db/100+70/Day06-数据库70题-试题01-11Day 07 - 数据库70题:试题 12-25cs/db/100+70/Day07-数据库70题-试题12-25Day 08 - 数据库70题:综合题 1-8cs/db/100+70/Day08-数据库70题-综合01-08Day 09 - 数据库70题:综合题 22-33cs/db/100+70/Day09-数据库70题-综合22-33Day 10 - 数据库70题:综合题 37-47cs/db/100+70/Day10-数据库70题-综合37-47Day 11 - 数据库70题:综合题 48-61cs/db/100+70/Day11-数据库70题-综合48-61Day 12 - 数据库70题:综合题 62-71cs/db/100+70/Day12-数据库70题-综合62-71基础概念与题型全文cs/db/notes/01-基础概念与题型全文SQL语句与数据库操作全文cs/db/notes/02-SQL语句与数据库操作全文数据库编程全文cs/db/notes/03-数据库编程全文数据库设计与规范化全文cs/db/notes/04-数据库设计与规范化全文查询优化、恢复、并发控制全文cs/db/notes/05-查询优化恢复并发控制全文数据库规范化流程cs/db/notes/normalization2025-2026-2 计科数据库系统期末cs/db/pastpapers/25-26cs2024-2025-2 计科数据库系统期末cs/db/pastpapers/db-pastpaper-1数据库系统完整讲义总览与考试题型地图cs/db/tutorial/00-总览与考试题型地图01 数据库基础与关系模型cs/db/tutorial/01-数据库基础与关系模型02 SQL 与关系代数cs/db/tutorial/02-SQL与关系代数03 数据库编程专项:存储过程、触发器、游标、嵌入式 SQLcs/db/tutorial/03-数据库编程专项04 数据库设计、E-R 图与规范化cs/db/tutorial/04-数据库设计ER与规范化05 查询优化专项:关系代数、查询树、优化树cs/db/tutorial/05-查询优化专项06 事务、并发控制与数据库恢复cs/db/tutorial/06-事务并发控制与恢复07 填空选择速记清单cs/db/tutorial/07-填空选择速记清单08 大题答题模板cs/db/tutorial/08-大题答题模板

Day 10 - 数据库70题:综合题 37-47

参考重点:教材第 6 章关系数据理论。原文件中综合题 34-36 缺失,保留源文件跳号。

37. 指出下列关系模式是第几范式,并说明理由。

默认所有关系都已满足 1NF,即属性值不可再分。

37.1 R(X, Y, Z),F={XY -> Z}

答案:BCNF。

讲解:候选码为 XY。唯一非平凡依赖 XY -> Z 的左部是超码,所以满足 BCNF。

37.2 R(X, Y, Z),F={Y -> Z, XZ -> Y}

答案:3NF,但不满足 BCNF。

讲解:候选码有 XY 和 XZ,所以 X、Y、Z 都是主属性。依赖 Y -> Z 中 Y 不是超码,违反 BCNF;但右部 Z 是主属性,所以满足 3NF。

37.3 R(X, Y, Z),F={X -> Y, Y -> X, X -> YZ}

答案:BCNF。

讲解:X+ = XYZ,所以 X 是候选码;Y -> X 且 X -> YZ,所以 Y+ = XYZ,Y 也是候选码。非平凡依赖左部都是超码,因此满足 BCNF。

37.4 R(X, Y, Z),F={X -> Y, X -> Z}

答案:BCNF。

讲解:X+ = XYZ,候选码为 X。所有非平凡依赖左部都是候选码 X,满足 BCNF。

37.5 R(X, Y, Z),F={XY -> Z}

答案:BCNF。

讲解:与 37.1 相同,候选码为 XY,决定因素是超码。

37.6 R(W, X, Y, Z),F={X -> Z, WX -> Y}

答案:1NF,不满足 2NF。

讲解:候选码为 WX,因为 WX+ = WXYZ。非主属性 Z 依赖于候选码的一部分 X,存在部分依赖,所以不满足 2NF。

38. 有关系模式 R(U, F),其中 U={A, B, C, D, E, P},F={A -> B, C -> P, E -> A, CE -> D}。求 R 的所有候选关键字。

答案:CE。

讲解:

  • 没有出现在任何依赖右部的属性是 C 和 E,它们必须出现在每个候选码中。
  • (CE)+ = C E P A B D,可推出全部属性。
  • C+ = CP,E+ = EAB,都不能推出全部属性。

因此唯一候选码是 CE。

39. 设有关系模式 R(C, T, S, N, G),函数依赖集 F={C -> T, CS -> G, S -> N}。求 R 的所有候选关键字。

答案:CS。

讲解:没有出现在右部的属性是 C 和 S,所以候选码必须包含它们。(CS)+ = C S T G N,可以推出全部属性;C+ = CT,S+ = SN 都不行。因此唯一候选码为 CS。

40. 设 R(U,F),U={A,B,C,D},F={A -> B, B -> C, D -> B},把 R 分解成 BCNF 模式集。

40.1 如果首先把 R 分解成 {ACD, BD},求 F 在这两个模式上的投影。

答案:

  • 在 ACD 上的投影:A -> C,D -> C。
  • 在 BD 上的投影:D -> B。

讲解:A -> C 由 A -> B -> C 推出;D -> C 由 D -> B -> C 推出。BD 上只保留涉及 B、D 的依赖,得到 D -> B。

40.2 ACD 和 BD 是 BCNF 吗?如果不是,进一步分解。

答案:

  • BD 是 BCNF,因为 D -> B 中 D 是 BD 的候选码。
  • ACD 不是 BCNF。ACD 的候选码为 AD,而 A -> C、D -> C 的左部都不是超码。

一种 BCNF 分解为:

  • AC(A, C)
  • AD(A, D)
  • BD(B, D)

讲解:在 AC 中 A 是码,满足 BCNF;AD 上没有非平凡函数依赖,满足 BCNF;BD 已满足 BCNF。

41. 已知关系模式 R(CITY, ST, ZIP) 和函数依赖集 F={CITY, ST -> ZIP; ZIP -> CITY}。找出 R 的两个候选关键字。

答案:(CITY, ST) 和 (ZIP, ST)。

讲解:

  • (CITY, ST)+ = CITY, ST, ZIP。
  • (ZIP, ST)+ = ZIP, ST, CITY。
  • 单独 ZIP 只能推出 CITY,不能推出 ST;单独 CITY 或 ST 也不能推出全部属性。

因此两个候选码是 (CITY, ST) 与 (ZIP, ST)。

42. 教师管理数据库:属性为学号 S#、课程号 C#、成绩 G、任课教师 TN、教师所在系 D。

语义:

  1. 学号和课程分别与其代表的学生和课程一一对应。
  2. 一个学生所修的每门课程都有一个成绩。
  3. 每门课程只有一位任课教师,但每位教师可以有多门课程。
  4. 教师没有重名,每个教师只属于一个系。

42.1 确定函数依赖集。

答案:

  • (S#, C#) -> G
  • C# -> TN
  • TN -> D

由后两条还可推出 C# -> D。

42.2 若用所有属性组成一个模式,该关系模式为几范式?并说明异常。

答案:该模式为 1NF,不满足 2NF。

讲解:候选码是 (S#, C#)。因为 C# -> TN,非主属性 TN 部分依赖于组合码的一部分 C#,所以不满足 2NF;同时还有 C# -> TN -> D 的传递依赖。

异常示例:

  • 插入异常:一门新课程已有任课教师但还没有学生选课时,无法单独插入课程-教师信息。
  • 删除异常:删除某课程最后一条选课记录,可能丢失该课程任课教师及教师所在系信息。
  • 修改异常:教师所在系重复出现在很多选课记录中,修改时容易不一致。

42.3 分解为依赖保持、无损连接的 3NF。

答案:

  • SC(S#, C#, G)
  • CT(C#, TN)
  • TD(TN, D)

讲解:SC 保存选课成绩,CT 保存课程教师,TD 保存教师所在系。三个原始依赖都被保留,并且可通过外键连接恢复原关系。

43. 给出关系 R(工程号, 材料号, 数量, 开工日期, 完工日期, 价格),判断范式并分解。

题面关系:

工程号材料号数量开工日期完工日期价格
P1I1498059902250
P1I2698059902300
P1I31598059902180
P2I1698119912250
P2I41898119912350

答案:

  • 候选码:(工程号, 材料号)。
  • 函数依赖:
    • 工程号 -> 开工日期, 完工日期
    • 材料号 -> 价格
    • (工程号, 材料号) -> 数量
  • 该关系为 1NF,不满足 2NF,因为存在非主属性对组合码的部分依赖。

分解为:

  • 工程(工程号, 开工日期, 完工日期)
  • 材料(材料号, 价格)
  • 用料(工程号, 材料号, 数量)

讲解:分解后,工程日期只存一次,材料价格只存一次,用料数量存放在工程和材料的联系表中,可避免更新、插入、删除异常。

44. 判断给出的数据库集是否可直接作为关系数据库中的关系;若不行,改造为尽可能好的关系形式。

题面表:

系名课程名教师名
计算机系DB李军,刘强
机械系CAD金山,宋海
造船系CAM王华
自控系CTY张红,曾键

答案:

不能直接作为关系数据库中的关系,因为“教师名”列中有多个教师名,属性值不是原子的,违反 1NF。

一种改造方式:

系名课程名教师名
计算机系DB李军
计算机系DB刘强
机械系CAD金山
机械系CAD宋海
造船系CAM王华
自控系CTY张红
自控系CTY曾键

更规范的关系模式可设计为:

  • 系(系名)
  • 课程(课程名, 系名)
  • 授课(课程名, 教师名)

讲解:先让每个属性值原子化,再根据业务语义继续分解,避免把多值属性塞进一个单元格。

45. 设关系 R(课程名, 教师名, 教师地址),判断范式、删除异常,并分解。

题面关系:

课程名教师名教师地址
C1马千里D1
C2于得水D1
C3余快D2
C4于得水D1

答案:

  • 假定一门课程只有一位教师,教师只有一个地址。
  • 函数依赖:课程名 -> 教师名,教师名 -> 教师地址。
  • 候选码:课程名。
  • 该关系满足 2NF,但不满足 3NF,因为存在传递依赖 课程名 -> 教师名 -> 教师地址。

删除异常:若删除于得水老师所教的最后一门课程,会同时丢失“于得水住址为 D1”的信息。

分解为:

  • 课程教师(课程名, 教师名)
  • 教师地址(教师名, 教师地址)

讲解:分解后,即使某教师暂时没有课程,也可以在 教师地址 中保存教师基本信息。

46. 设关系 R(职工号, 职工名, 年龄, 性别, 单位号, 单位名),判断是否属于 3NF;若不是,规范化为 3NF。

题面关系:

职工号职工名年龄性别单位号单位名
E1ZHAO20FD3CCC
E2QIAN25MD1AAA
E3SEN38MD3CCC
E3LI25FD3CCC

答案:

若按常规语义“职工号唯一标识职工”,题面数据中 E3 出现两次且姓名、年龄、性别不同,已经违反实体完整性。忽略该录入错误后,函数依赖可写为:

  • 职工号 -> 职工名, 年龄, 性别, 单位号
  • 单位号 -> 单位名

候选码:职工号。

该关系不属于 3NF,属于 2NF。原因是候选码为单属性,不存在部分依赖;但存在传递依赖 职工号 -> 单位号 -> 单位名。

3NF 分解:

  • 职工(职工号, 职工名, 年龄, 性别, 单位号)
  • 单位(单位号, 单位名)

讲解:单位名是单位的属性,不应在每个职工元组中重复保存。

47. 给出关系 SC(SNO, CNO, CTITLE, INAME, ILOCA, GRADE),判断范式和异常,并分解。

题面关系:

SNOCNOCTITLEINAMEILOCAGRADE
80152C1OS王平D170
80153C2DB高升D285
80154C1OS王平D186
80154C3AI杨杨D372
80155C4CL高升D292

属性含义:SNO 学号,CNO 课程号,CTITLE 课程名,INAME 教师名,ILOCA 教师地址,GRADE 成绩。

答案:

  • 候选码:(SNO, CNO)。
  • 函数依赖:
    • (SNO, CNO) -> GRADE
    • CNO -> CTITLE, INAME
    • INAME -> ILOCA
  • 该关系为 1NF,不满足 2NF,因为 CTITLE、INAME、ILOCA 部分依赖于组合码中的 CNO。

异常:

  • 插入异常:新开课程还没有学生选课时,无法保存课程名、教师和教师地址。
  • 删除异常:删除某课程最后一条选课记录时,会丢失课程和教师信息。
  • 修改异常:教师地址重复保存,修改时可能不一致。

分解到 2NF:

  • 选课(SNO, CNO, GRADE)
  • 课程任课(CNO, CTITLE, INAME, ILOCA)

进一步分解到 3NF:

  • 选课(SNO, CNO, GRADE)
  • 课程任课(CNO, CTITLE, INAME)
  • 教师(INAME, ILOCA)

讲解:只分解到 2NF 后,课程任课 中仍有 CNO -> INAME -> ILOCA 的传递依赖。继续分解到 3NF 才能更好消除教师地址冗余。