
简介这份《数据库系统概论复习期末试题及答案》PDF面向高校计算机专业学生及备考数据库相关课程的考生用于期末冲刺与知识点自测。内容以单项选择题、填空题为主覆盖DBMS核心地位、三级模式与两级映像、E-R模型、关系代数、SQL授权与建表、事务隔离性、封锁协议及数据库恢复等高频考点并附有参考答案与简要解析便于对照查漏补缺。资源包共1个PDF文件约174KB轻量易携带适合打印或移动端随时翻阅。目前已有151人学习下载可作为考前快速过一遍概念、检验掌握程度的辅助材料尤其适合需要梳理数据独立性、规范化与并发控制等易混知识点的读者。1. 从一份期末试题拆解数据库系统概论的知识骨架期末周前两周实验室里几个同学围着一份 PDF 对答案场面一度非常热闹。这份《数据库系统概论复习期末试题及答案.pdf》就是当时被翻得最多的一份材料——它把单项选择题、填空题、简答题、设计题和综合题五类题型压在一份文档里每道题都带标准答案和部分解析。如果你正在准备数据库相关课程的期末考试或者想用一套完整的题目快速检验自己对关系模型、SQL、范式、事务这些核心概念的掌握程度这份试题的价值不在于“押题”而在于它把考点密度拉得很高20 道选择题覆盖了 DBMS 核心地位、三级模式、关系代数、SQL 授权、事务隔离、封锁协议等高频考点后面的大题则直接考 E-R 图转换、BCNF 分解和视图创建。换句话说它是一份能让你在短时间内暴露知识盲区的诊断工具而不是一本需要从头读到尾的教材。下面我按“先理解考点逻辑再动手做题验证最后避开常见翻车点”的顺序把这份资源拆开讲清楚。2. 选择题里的高频考点从 DBMS 核心到封锁协议2.1 数据库系统核心与数据独立性第 1 题问“数据库系统的核心是什么”答案是数据库管理系统DBMS。这个点看起来简单但很多人在复习时会把它和“数据库”混为一谈。数据库是数据的集合DBMS 是管理这些数据的软件层用户通过 DBMS 来定义、操纵和控制数据。第 4 题和第 5 题考的是数据独立性物理独立性指应用程序与磁盘上的数据相互独立逻辑独立性指应用程序与数据库的逻辑结构相互独立。保证逻辑独立性需要修改模式与外模式之间的映像这一点在填空题和简答题里也会反复出现。我一般会这样记三级模式外模式、模式、内模式对应两层映像外模式/模式映像、模式/内模式映像。逻辑独立性靠外层映像物理独立性靠内层映像。考试时如果问“修改哪个映像”先判断问的是逻辑还是物理再对应到映像层级基本不会错。2.2 关系代数与 SQL 语句的对应关系第 8 题考的是 R∩S 的等价表达式答案是 S-(S-R)。这个推导过程值得动手写一遍S-R 表示属于 S 但不属于 R 的元组再从 S 中减去这部分剩下的就是同时属于 R 和 S 的元组也就是交集。第 9 题考全外联接场景是学生和宿舍两个关系有的学生不住宿有的床位空闲要列出所有情况就得用全外联接。这里容易翻车的地方是左外联接只保留左表全部记录右外联接只保留右表全部记录只有全外联接才能同时保留两侧的不匹配记录。SQL 授权题第 11 题考的是GRANT UPDATE(QTY) ON SPJ TO 李勇注意列级权限要写在权限后面的括号里表名和用户名不要加引号除非用户名本身是字符串常量。第 10 题考插入元组的合法性主键 Sno 和非空列 Sname 必须给值Sex 和 Age 可以为 NULL所以只有 D 选项合法。2.3 事务隔离性与封锁协议第 16 题到第 20 题集中考事务和并发控制。事务的隔离性指一个事务内部的操作及使用的数据对并发的其他事务是隔离的。第 18 题考 S 锁事务 T 对数据 A 加 S 锁后可以读 A 但不能修改 A其他事务只能再加 S 锁不能加 X 锁。第 19 题给了两个事务的并发操作图T1 读 A100T2 也读 A100T1 写回 A95T2 写回 A92最终 A92T1 的修改被覆盖了这就是典型的丢失修改。第 20 题考两段锁协议选项 D 中 Slock A 之后直接 Unlock A然后又 Slock B违反了“所有加锁操作必须在所有解锁操作之前”的规则。两段锁协议的核心就一句话事务分为扩展阶段和收缩阶段扩展阶段只能加锁不能解锁收缩阶段只能解锁不能加锁。做题时先找 Unlock 后面还有没有 Lock有就违反。提示选择题里凡是涉及“等价”“正确评价”“违反协议”的题不要凭语感选把每个选项代入定义走一遍尤其是关系代数和封锁协议这两类。3. 填空题与简答题把碎片知识串成可复述的答案3.1 关系模型三要素与候选码判定填空题第 1 题问关系数据模型由哪三部分组成答案是关系数据结构、关系操作和关系完整性约束。这三要素是关系模型的理论骨架简答题里问参照完整性规则时本质上也是在考完整性约束这一要素。参照完整性的表述要抓住几个关键词外码 F 与基本关系 S 的主码 Ks 对应F 的取值要么为空要么等于 S 中某个元组的主码值。填空题第 5 题给了一个函数依赖集 {A→B, A→C, A→D, (B,C)→A}要求判断候选码和范式等级。候选码是 A 和 (B,C)因为 A 能推出所有其他属性(B,C) 也能推出 A 进而推出所有属性。R 属于 BCNF因为每个函数依赖的决定因素都包含候选码。这里容易错的地方是判断范式等级时要先找候选码再看函数依赖的决定因素是否都是候选码或包含候选码不要一上来就数属性个数。3.2 日志登记原则与视图作用简答题第 3 题问登记日志文件的原则答案是两条登记的次序严格按并发事务执行的时间次序必须先写日志文件后写数据库。第二条是恢复机制的核心如果先写数据库再写日志一旦系统在写日志前崩溃数据库的修改就无法回滚或重做。我一般会把这个原则记成“日志先行”write-ahead logging考试时展开成两句就行。简答题第 2 题问视图的作用标准答案给了四条简化用户操作、多角度看待同一数据、对重构数据库提供逻辑独立性、对机密数据提供安全保护。这四条在选择题和设计题里也会以不同形式出现比如设计题第 4 题要求创建视图 VIEW6考的就是视图的定义和子查询的结合。3.3 设计题里的 SQL 与关系代数转换设计题第 1 题给了一个 SQL 查询要求用汉语阐述含义并用关系代数表示。SQL 是SELECT CNO FROM C WHERE CNO NOT IN ( SELECT CNO FROM S, SC WHERE S.SNO SC.SNO AND SNAME 张三 );这段 SQL 的含义是“查询张三同学没有选修的课程的课程号”。关系代数表达式为 πCNO(C) - πCNO(σSNAME张三(S) ⋈ SC)。这里的关键是理解 NOT IN 对应差集运算子查询先找出张三选修的课程号再从全部课程号中减掉。设计题第 2 题要求写两个 SQL 查询。第一个是“找出店员人数不超过 100 人或者在长沙市的所有商店的代号和商店名”SELECT A#, ANAME FROM A WHERE WQTY 100 OR CITY 长沙;第二个是“找出至少供应了代号为 256 的商店所供应的全部商品的其它商店的商店名和所在城市”这个查询用到了双重 NOT EXISTS是 SQL 里比较难写的部分SELECT ANAME, CITY FROM A WHERE NOT EXISTS ( SELECT * FROM B WHERE EXISTS ( SELECT * FROM AB AB1 WHERE A# 256 AND B# B.B# ) AND NOT EXISTS ( SELECT * FROM AB AB2 WHERE A# ! 256 AND A# A.A# AND B# B.B# ) );逻辑说明外层查询遍历每个商店内层第一个 EXISTS 找出 256 号商店供应的所有商品第二个 NOT EXISTS 检查当前商店是否缺少其中任何一种商品。如果不存在“256 供应了但当前商店没供应”的商品说明当前商店至少供应了 256 的全部商品。参数说明A# 是商店代号B# 是商品号AB 是供应关系表。注意写双重 NOT EXISTS 时别名不要重复AB1 和 AB2 要区分清楚否则子查询里的 A# 和 B# 会指向错误的表。4. 综合题拆解E-R 图转换与 BCNF 分解的完整流程4.1 E-R 图到关系模型的转换规则综合题给了一个企业集团的语义描述工厂生产产品产品可在多个工厂生产每个工厂按固定计划数量生产工厂聘用职工每名职工只能在一个工厂工作聘用有聘期和工资。要求画 E-R 图、转换为关系模型、指出主码和外码。转换规则是这样的每个实体型转换为一个关系模式实体的属性就是关系的属性实体的码就是关系的码。1:n 联系可以合并到 n 端的关系中m:n 联系必须转换为独立的关系模式其属性为两端实体的码加上联系本身的属性。按照这个规则工厂、产品、职工三个实体各转换为一个关系。工厂和产品之间是 m:n 联系一个工厂生产多种产品一种产品可在多个工厂生产所以要单独建一个“生产”关系属性包括工厂编号、产品编号和计划数量主码是工厂编号产品编号两个外码分别指向工厂和产品。工厂和职工之间是 1:n 联系一个工厂聘用多名职工每名职工只能在一个工厂工作所以可以把工厂编号合并到职工关系中职工关系的主码是职工号外码是工厂编号。最终的关系模型是工厂工厂编号厂名地址产品产品编号产品名规格职工职工号姓名工厂编号聘期工资生产工厂编号产品编号计划数量。主码和外码的标注要一一对应考试时漏写外码会扣分。4.2 BCNF 分解的逐步推导设计题第 5 题给了一个关系 R(A, B, C, D, E) 和函数依赖集 F {ABC→DE, BC→D, D→E}要求求候选码、判断范式等级并逐步分解为 BCNF。第一步找候选码。ABC 能推出 DE所以 ABC 能推出全部属性是候选码。BC 能推出 DD 能推出 E但 BC 不能推出 A所以 BC 不是候选码。候选码只有 ABC。第二步判断范式等级。R 中存在非主属性 D 和 E 对候选码 ABC 的部分函数依赖BC→D 中 BC 是 ABC 的真子集所以 R 属于 1NF不属于 2NF。第三步分解。先消除部分函数依赖把 R 分解为 R1(A, B, C) 和 R2(B, C, D, E)。R1 的候选码是 ABC不存在非平凡函数依赖已经是 BCNF。R2 的候选码是 BC但存在 D→EE 传递依赖于 BC所以 R2 不属于 BCNF。继续分解 R2消除传递函数依赖得到 R21(B, C, D) 和 R22(D, E)。R21 的候选码是 BC函数依赖 BC→D 的决定因素包含候选码属于 BCNF。R22 的候选码是 D函数依赖 D→E 的决定因素就是候选码也属于 BCNF。最终分解结果是 R1(A, B, C)、R21(B, C, D)、R22(D, E)三个关系模式都满足 BCNF。每一步分解要写清楚消除了什么类型的函数依赖第一步消除部分函数依赖第二步消除传递函数依赖。4.3 视图创建与更新操作的 SQL 写法设计题第 3 题要求为工资低于 1000 元的女职工加薪 200 元UPDATE EMP SET SALARY SALARY 200 WHERE SALARY 1000 AND SEX 女;设计题第 4 题要求创建有关女车间主任的视图 VIEW6结构为ENO, ENAMECREATE VIEW VIEW6 AS SELECT ENO, ENAME FROM EMP WHERE SEX 女 AND ENO IN ( SELECT MGR_ENO FROM DEPT );逻辑说明先从 DEPT 表中找出所有车间主任的职工号再在 EMP 表中筛选性别为女且职工号在其中的记录。参数说明ENO 是职工号ENAME 是姓名MGR_ENO 是车间主任的职工号。注意视图定义中的子查询不能引用视图本身否则会报循环依赖错误。提示BCNF 分解题不要跳步每一步都要写出当前关系的候选码、函数依赖集和所属范式阅卷时按步骤给分跳步容易丢分。5. 用这份试题做自测的四个避坑习惯5.1 现象选择题正确率忽高忽低同一知识点换问法就错原因对定义的理解停留在“眼熟”层面没有形成条件反射式的判断链路。比如数据独立性知道有物理和逻辑之分但问到“修改哪个映像”时就开始犹豫。解决每做完一道选择题不要只看答案把每个错误选项为什么错写出来。比如第 5 题问保证逻辑数据独立性需要修改什么错误选项包括模式、内模式、模式与内模式映像你要能说出每个选项对应的是哪种独立性或哪种操作。我一般会准备一张 A4 纸左边写题号右边写“考点 错误选项分析”考前只看这张纸。5.2 现象SQL 设计题能看懂答案但自己写就卡壳原因平时看题多、动手少尤其是双重 NOT EXISTS 和关系代数转换这类需要多步推理的题光看答案觉得“懂了”实际写的时候别名一多就乱。解决把设计题第 2 题和第 5 题单独拎出来关掉答案在空白文档里从头写一遍。写完再对照答案重点检查别名是否冲突、子查询的嵌套层级是否正确、关系代数的投影和选择顺序是否合理。写三遍以上手感就出来了。5.3 现象BCNF 分解题每一步都觉得自己对了最后结果和答案不一致原因分解过程中没有严格按“先找候选码、再判断依赖类型、再决定分解方式”的顺序走有时候凭直觉拆关系拆到后面发现依赖丢了或者多出来了。解决分解前先把函数依赖集画成有向图标出哪些是部分依赖、哪些是传递依赖。每分解一步把新的函数依赖集写出来确认没有丢失原有的依赖。最后验证每个关系模式的决定因素是否都是候选码或包含候选码。这个流程走两遍基本不会出错。5.4 现象综合题 E-R 图转换时漏写外码或主码标注错误原因转换规则记不全尤其是 1:n 联系合并到 n 端之后外码的指向容易搞反。解决转换前先把实体和联系列成表格标出联系类型1:1、1:n、m:n。1:n 联系合并到 n 端外码指向 1 端的主码m:n 联系独立成表主码是两端主码的组合外码分别指向两端。转换完成后逐表检查每个关系模式的主码是否唯一标识元组外码是否指向正确的关系模式。这个检查习惯能帮你捡回不少分。5.5 现象简答题写了很多字但得分不高原因没有踩到得分点或者把定义和例子混在一起写阅卷时找不到关键词。解决简答题按“定义 要点 简短例子”的结构写。比如参照完整性规则先写定义再写“取空值或等于 S 中某个元组的主码值”这两个要点最后用一句话举例。不要写大段铺垫直接上关键词。平时练习时对着答案数得分点养成按点答题的习惯。注意这份试题的答案里有个别笔误比如设计题第 4 题的视图定义中表名写成了 EMP但前面给的职工基本表名是 ERP做题时以题目正文的表名为准不要被答案里的笔误带偏。6. 从试题到知识体系用错题反推复习优先级做完这份试题之后最有价值的动作不是对答案而是把错题按知识点归类反推自己的复习优先级。我一般会把错题分成三类概念模糊型、计算失误型、表达不全型。概念模糊型对应选择题和填空题说明定义没记牢需要回到教材重新梳理计算失误型对应关系代数和 BCNF 分解说明步骤不熟练需要动手重写表达不全型对应简答题和综合题说明答题结构有问题需要按得分点重新组织语言。具体操作上我会建一个三列的表格第一列写题号第二列写考查的知识点第三列写错误原因和正确思路。比如第 19 题考丢失修改错误原因可能是“没有画出两个事务的执行时序”正确思路是“先读后写、后写覆盖先写”。这个表格填完之后复习优先级自然就出来了错得多的知识点排前面错得少但反复错的排后面。还有一个技巧是把这份试题里的 SQL 语句全部复制到一个可执行的数据库环境里跑一遍。比如建一个 Student 表、一个 SC 表、一个 C 表把设计题里的查询逐条执行观察结果是否符合预期。跑通之后再改条件比如把“张三”换成其他名字把“女”换成“男”看看结果怎么变。这种动手验证比单纯看答案印象深得多。最后说一个我自己的习惯每次做完一套试题我会挑三道最有代表性的题合上答案从头到尾讲一遍解题过程假装在给同学讲题。如果讲到某一步卡住了说明那里就是我的薄弱点。这个办法看起来笨但对我这种一看答案就懂、一合答案就懵的人特别管用。从那以后我每次复习数据库都强制走一遍“做题、归类、重讲”的流程希望帮到你。本文还有配套的精品资源点击获取