
简介这是一份数据库系统概论课程的期末复习试题文档面向计算机、软件工程等专业本科学生以及需要系统梳理数据库核心概念的自学者。内容覆盖数据库系统基础知识、关系代数与SQL语言、数据库设计流程、DBMS组成与功能、数据安全、事务处理、并发控制、封锁机制及数据库恢复方法等常考模块。试卷包含选择题、填空题、判断题、简答题和应用题配有部分参考答案与解题思路如关系模型候选码判定、外码实例、视图与授权机制保障安全性、无损连接分解判断等。文档为完整Word版共1个doc文件压缩包大小约170KB便于直接编辑打印或对照复习。目前已有3502人学习下载适合在期末备考阶段用于知识点自查、题型演练与重点难点梳理也可作为教师命题或课程复习的参考资料。1. 数据库期末考试拿分的关键先看懂这张卷子的考点分布数据库系统概论期末考试试题这份资源把整门课的考试套路一次性摊开了。很多同学复习时把时间花在背概念定义上上了考场才发现真正拉开分数的是范式分解、无损连接判断和 ER 图转关系模式这几类计算与设计题。这几类题不是靠背能答对的它有固定的推导步骤步骤对了分数就到手步骤错一步整题全丢。这套试卷的价值就在于它把概念选择题、SQL 应用题、范式综合题、事务并发题全部按真实考试格式排好照着练一遍等于提前走了三遍考场流程。无论你是期末备考还是准备面试中的数据库基础题把这份试题里的高频题型吃透比盲目刷十套模拟题都管用。2. 高频考点关系代数、SQL 与视图的组合考查套路2.1 关系代数四类运算选择、投影、连接怎么区分怎么答这套试卷里选择题反复考一个点从表中取出满足条件的属性是投影从表中选出满足条件的元组是选择把两个关系中共同属性值的元组连到一起是连接。很多考生在这道送分题上栽跟头不是因为不会而是因为题干用语换了说法就懵了。比如题目不说“投影”而说“取出满足条件的属性的操作”你要立刻反应过来它问的是列方向的筛选题目说“选出满足某种条件的元组”说的是行方向的筛选对应选择运算。这类题在面试里也常以概念辨析形式出现。面试官可能会问“自然连接和等值连接有什么区别”参考这套试卷里的简答题标准答法是自然连接一定是等值连接但等值连接不一定是自然连接等值连接要求相等的分量不一定是公共属性自然连接要求相等的分量必须是公共属性等值连接不消除重复属性自然连接会自动去掉重复属性。记住三个关键词公共属性、去重、方向。另外注意选择题里关于笛卡尔积的一句话关系运算中花费时间最可能最长的是笛卡尔积。这属于基础理论送分点但很多人因为没理解“笛卡尔积是把两个关系的所有元组两两组合”而选错。组合数量是两表元组数相乘数据量指数级增长运算代价大这是它耗时最长的根本原因。2.2 SQL 子查询与分组统计必考的 4 种写法SQL 应用题在这套试卷中出现频率极高题目本身不难但书写规范决定得分。先看第一种必考写法子查询比较。原题“检索所有比王华年龄大的学生姓名、年龄和性别”标准答案是先用子查询查出王华的年龄再在外层查询中做比较。SELECT SN, AGE, SEX FROM S WHERE AGE ( SELECT AGE FROM S WHERE SN 王华 );这段 SQL 的关键在于子查询只返回一个值外层用比较。如果子查询可能返回多行就必须换成 ANY或 ALL这是面试时面试官最爱追问的变体。 ANY表示大于其中任意一个即可 ALL表示大于所有值。本题王华只有一个直接用标量子查询即可。第二种必考写法最大值筛选。原题“检索选修课程 C2 的学生中成绩最高的学生的学号”除了用子查询套MAX函数还可以用排序加LIMIT的方式但期末试卷通常要求前者。SELECT S# FROM SC WHERE C# C2 AND GRADE ( SELECT MAX(GRADE) FROM SC WHERE C# C2 );这道题的易错点在于内外层都要写C# C2条件。内层查的是 C2 课程的最高分外层筛选的是 C2 课程里成绩等于该最高分的学生。如果外层漏写课程条件就可能把其他课程同分的学生也选出来。第三种必考写法两表连接。原题“检索学生姓名及其所选修课程的课程号和成绩”注意S表和SC表都有S#列必须写表名前缀否则报列名歧义错误。SELECT SN, C#, GRADE FROM S, SC WHERE S.S# SC.S#;第四种必考写法分组加过滤。原题“检索选修四门课程的学生总成绩”这是GROUP BY与HAVING的组合很多考生会误用WHERE去过滤分组条件这是语法错误。SELECT S#, SUM(GRADE) FROM SC GROUP BY S# HAVING COUNT(C#) 4;WHERE过滤的是分组前的行HAVING过滤的是分组后的组。题目要求“选修四门课程”是对组的约束必须放在HAVING里。这是 SQL 题最经典的一个失分点。2.3 视图与授权安全类简答题的固定答题结构安全类简答题在这套试卷里给了完整范例答题结构非常清晰先解释机制原理再写 SQL 举例。比如“如何通过定义视图和存取控制保证数据库安全性”高分答卷分成两段第一段说明视图能把机密数据隐藏在用户不可见的范围内第二段说明GRANT语句能控制用户操作权限。CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept IS;GRANT SELECT ON TABLE Student TO U1;这两条 SQL 对应两种不同安全策略。视图解决的是“数据可见范围”问题用户查询视图时只能看到视图中定义的列和行看不到表里的其他数据授权解决的是“操作权限”问题即使能看到表没有SELECT权限也无法查询。面试时如果被问到数据库安全措施把这两层一起答出来比只答一个更完整。还有一个高频选择题考点数据库中只存放视图的定义不存放视图对应的数据。视图是虚表数据仍然来自基本表。这个知识点常以判断题或填空题出现记住了就能稳定拿分。3. 范式大题拆解从闭包、候选码到 2NF/3NF/BCNF 的完整答题链3.1 闭包计算与候选码求解先算对这一步全题才会对范式综合题的第一步几乎都是计算属性闭包。这套试卷里有个典型题目F { D→GC→ACD→EA→B }要求计算 D、(AC)、(ACD)。闭包的计算逻辑是从初始属性集出发不断检查函数依赖只要依赖左侧属性都在当前集合里就把右侧属性加入集合直到集合不再变化。以(ACD)为例计算过程如下X(0) ACD X(1) ACD ∪ B ∪ G ABCD G 依据 A→BD→GC→A 的闭包传递 X(2) ABCD G ∪ E ABCDEG 依据 CD→E此时 CD 已在集合中 X(3) ABCDEG 集合不再增长终止最终(ACD) ABCDEG说明 ACD 能决定全部属性。这里要注意计算顺序C→A 使得 C 的决定能力扩展到 A而 A→B 又让 B 进入集合形成链式传递。很多考生算到 X(1) 就停了漏掉后面依赖的连锁反应导致闭包结果不完整候选码判断随之出错。候选码求解是另一道必考题。给定 U {A,B,C,D,E}F { A→BCCD→EB→DE→A }求所有候选码。标准做法是逐个试探先看 E因为 E→A而 A 又能推出 BC所以 E 能推出 ABCDEE 是候选码再看 CDCD→EE→AA→BC所以 CD 也能推出全部属性CD 是候选码同理 A 是候选码BC 也是候选码。最终候选码为 A、BC、CD、E。这类题有一个考场经验候选码通常藏在函数依赖右侧从未出现过的属性组合里。如果一个属性只出现在依赖左侧或者完全没出现它往往是候选码的组成部分。比如本题里 C、D 都没出现在任何依赖的右侧所以包含它们的组合 CD 成为候选码。3.2 判断范式并逐步分解考场上的标准操作顺序范式判断题最怕凭感觉写结论。以职工日产量那道综合题为例正确顺序是先写出所有函数依赖确定候选码再检查是否存在部分依赖和传递依赖。题目给出的依赖是职工编号日期→ 日产量 职工编号 → 车间编号 车间编号 → 车间主任候选码是职工编号日期。这里能清楚看到职工编号单独就能决定车间编号、车间主任而这两个属性是候选码职工编号日期的真子集决定的所以存在部分函数依赖R 不是 2NF。分解策略是把部分依赖涉及的属性单独拿出来成表去掉冗余。第一轮分解结果R1职工编号车间编号车间主任 R2职工编号日期日产量此时 R1 中职工编号 → 车间编号车间编号 → 车间主任存在传递依赖还不是 3NF。继续分解 R1R11职工编号车间编号 R12车间编号车间主任最终得到的 { R11R12R2 } 是 3NF 模式集。分解的关键在于每一步都要说明“消除了什么依赖”。第一轮说明消除局部依赖第二轮说明消除传递依赖阅卷时这两个说明是采分点只写分解结果不写理由会扣一半分。3.3 无损连接判断初始二维表与函数依赖推导无损连接判断题在应用题里占 10 分方法固定构造初始二维表逐行检查函数依赖把能推导出的符号填进去。原题中 R 分解为 R1(ABC)、R2(CD)、R3(DE)函数依赖 F { AB→CC→DD→E }。初始表按关系分组填a和b符号然后根据依赖逐轮推导。比如 C→D在 R1 行中 C 列有a3D 列初始是b4因为 C 能决定 D所以把b4改为a4。推导完成后只要某一行所有属性都变成a1到a5的完整行就说明该分解具有无损连接性。原题最终 R1 行全为 a 符号因此是无损分解。这个方法的本质是检查分解后的关系能否通过自然连接恢复原关系。面试中如果被问到面试官想听的是先用依赖推导填表再看是否存在全 a 行。不要跳过推导过程直接写结论过程本身就是得分点。4. 事务与并发控制ACID、S 锁/X 锁、可串行化判断题的答题套路4.1 事务 ACID 四大特性与提交回滚事务这一章的选择题和简答题交替出现考法集中在概念辨析。事务的原子性是指事务中包括的所有操作要么都做要么都不做一致性指事务使数据库从一个一致状态变到另一个一致状态隔离性指一个事务内部的操作对并发其他事务是隔离的持久性指事务一旦提交对数据库的改变是永久的。简答题常考“提交和回滚是什么意思”。提交是把事务中所有对数据库的更新写回到磁盘上的物理数据库事务正常结束回滚是在事务运行过程中发生故障系统撤消事务对数据库的所有已完成更新使数据库回到事务开始时的状态。这里要补充一句回滚只针对未提交的事务已经提交的事务无法回滚这是两个动作的本质区别。4.2 封锁机制与并发异常选择题怎么选不丢分并发控制部分的选择题有固定套路。题目问“若事务 T 对数据对象 A 加上 S 锁则”你要判断的是 S 锁的兼容性S 锁是共享锁事务 T 可以读 A 但不能修改 A其他事务只能再对 A 加 S 锁不能加 X 锁。反过来X 锁是排他锁加 X 锁后其他事务不能加任何锁。锁类型当前事务能否读当前事务能否写其他事务能否加 S 锁其他事务能否加 X 锁S 锁可以不可以可以不可以X 锁可以可以不可以不可以这张兼容表是解答封锁题的唯一依据建议直接背下来。并发控制的反面案例也常考两个事务同时读同一数据并分别修改后提交的覆盖了先提交的这叫丢失修改一个事务读到另一个事务未提交的数据之后该事务回滚这叫读脏数据同一事务两次读取同一数据结果不同这叫不可重复读。试卷里给了两个并发操作图让你判断问题类型看到两个事务都写回同一数据优先考虑丢失修改看到有事务回滚优先考虑读脏数据。4.3 可串行化判断题为什么 view 可串行化不等于 conflict 可串行化这套试卷里有一道证明题判断“view 可串行化的调度一定也是冲突可串行化的调度”是否正确答案是否定的。这题超出多数人的复习范围很多考生直接懵掉。关键在于理解两种可串行化的定义差异冲突可串行化要求调度通过交换不冲突操作的顺序能转换成某个串行调度而视图可串行化只要求调度的执行结果与某个串行调度等价。存在这样的调度它满足视图等价但无法通过交换冲突操作变成串行调度因此只是 view 可串行化而非 conflict 可串行化。这道题难在教材里的反例构造面试时考官更可能以判断题形式考概念你只要记住“view 可串行化是比 conflict 可串行化更宽泛的条件二者不是充要关系”就能答对。5. 失分点5 种看似会做却拿不到分的写法与纠正5.1 选择题候选码与外码概念混用错在哪题目问“关系模型中一个候选码”有人看到“多个任意属性”就选忽略“唯一标识元组”这个核心条件。为什么错候选码强调功能是唯一标识元组一个或多个属性都可以但前提是“其值能唯一标识该关系模式中任何元组”。外码则是另一个关系的码是参照完整性概念。二者一个是标识能力一个是跨表引用关系混在一起就全乱了。怎么答对看到候选码先想唯一标识看到外码先想它是不是另一个表的主码。比如 SC 表里的 SNO 本身不是 SC 的码但在 STUDENT 表里是主码所以 SNO 是 SC 表的外码。5.2 SQL 题多表连接忘写表名前缀错在哪写了SELECT SN, C#, GRADE FROM S, SC WHERE S# S#没带表别名。为什么错S表和SC表都有S#列DBMS 无法判断取哪个直接报列名歧义错误。阅卷时看到没写前缀的 SQL即使逻辑对也会扣分。怎么答对多表查询时凡是公共列必须写表名.列名例如WHERE S.S# SC.S#。这是一个不需要动脑就能规避的语法规范写 SQL 时强制自己养成带前缀的习惯。5.3 候选码求解只靠看函数依赖左部不算闭包错在哪认为候选码只由函数依赖左部属性组成把所有左部属性组合列一遍漏掉了单属性候选码。为什么错候選碼的判定标准是闭包能否覆盖全集而非是否出现在依赖左部。比如 F { A→BCCD→EB→DE→A } 里E 出现在左部A 也出现在左部但 A 和 E 都单独是候选码靠直觉列组合很容易漏。怎么答对每个候选属性组合都计算闭包闭包等于全部属性才是候选码。算完闭包后再检查真子集是否也能覆盖全集去掉冗余才算完整。5.4 ER 图转换M:N 和 M:N:P 联系漏转关系模式错在哪把 M:N 联系直接并入某一端实体表或者把三元联系当成两个二元联系分别处理。为什么错转换规则明确规定M:N 联系必须单独转成一个关系模式M:N:P 三目联系同样要单独转换。如果把联系属性塞进实体表外键没法正确表达关系模式的数量也会数错。怎么答对数关系模式总数时按公式实体数 M:N 联系数 M:N:P 联系数。原题中 7 个实体、1 个 M:N 联系、2 个 M:N:P 联系总计 10 个关系模式主键数就是 10 个外键数按每个联系引入的外键逐一累加原题答案为 13 个。这类题的关键是先把联系类型数清楚再动手写模式。5.5 范式判断题把“部分依赖”和“传递依赖”混为一谈错在哪看到“职工编号 → 车间编号车间编号 → 车间主任”就说存在部分依赖。为什么错部分依赖的前提是依赖左侧是候选码的真子集传递依赖是依赖链中中间属性不是候选码。职工编号对车间主任的依赖是传递依赖不是部分依赖因为职工编号不是候选码候选码是职工编号 日期。怎么答对先写候选码再按顺序检查非主属性对候选码是否存在部分依赖存在就是 1NF不存在就检查是否存在传递依赖存在则只到 2NF都消除才是 3NF。分解时每一步都要指明消除了哪种依赖这和范式等级是一一对应的。6. 考场时间分配与押题方向拿到综合题先做哪一步最稳这套试卷的题型分布其实很稳定选择填空概念题占 30 到 40 分简答题占 15 分范式与 ER 综合题占 40 到 45 分。时间分配上概念题控制在 15 分钟内完成不会的先跳过简答题每题 5 分钟内答完重点写定义加例子综合题每题留 10 到 15 分钟闭包计算、无损连接、范式分解是必须拿满分的三大块。押题方向上最值得反复练的是三类题第一类是函数依赖集和候选码求解题目一变依赖你就要能重新算闭包这是必考且不可靠记忆完成的第二类是 ER 图转关系模式重点数清楚联系类型和主外键数量原题里 10 个主键 13 个外键这种数字细节只要数对就一定得分第三类是 SQL 分组统计GROUP BY加HAVING的组合写法每次考试都会出现变体。我自己的习惯是拿到综合题先写函数依赖把所有依赖列出来再开始做判断。这一步写清楚后面所有结论都有依据依赖写错后面全是白做。从那以后我每次做范式题都强制自己第一步先列依赖再算闭包再判断范式等级三步缺一不可。希望这套思路能帮你在考场上少丢冤枉分把该拿的分全部拿到。本文还有配套的精品资源点击获取