资讯动态

数据库期末考试复习:SQL、范式与事务高频考点全解析

发布时间:2026/10/16 0:54:07 来源:尧图企业网站定制
简介数据库期末考试试题及答案资料包面向高校计算机及相关专业备考数据库课程期末考试的本科生、专科生也适合需要快速梳理数据库核心概念的自学者。内容覆盖数据库系统核心、概念模型与数据独立性、关系数据模型、E-R模型转换、关系规范化、事务处理、数据库恢复与并发控制等高频考点题型包含单项选择题、填空题等并配有参考答案便于对照练习与查漏补缺。资源共1个文件为doc格式文档整体大小约118KB内容精炼集中可配合教材或课堂笔记使用。该资料已被3788人浏览学习适用于考前冲刺、知识点自测及教师出题参考。通过本套试题读者可以系统检验对数据库基础理论的理解掌握典型题目的解题思路提升应试能力。1. 数据库期末考试到底在考什么数据库期末考试那份卷子表面上是在考概念题、SQL题和设计题实际上只问三件事你能不能把一段业务需求写成正确的SQL能不能把一个烂关系模式按范式拆干净能不能说清楚事务、并发和锁之间的关系。多数人是折在第二问和第三问上的——SQL还能靠刷题找手感范式判断需要把函数依赖闭包算到肌肉记忆事务那块的丢分点更是五花八门。这份笔记照着「考前一个月怎么复习最划算」来组织按照数据库原理课程最常见的大纲把高频题型、答题模板和改卷时最容易扣分的写法逐条拆开。选课表、学生表、成绩表是这类试卷的御用素材下面所有例题都围绕这三张表展开你跟着走一遍就能直接套用到其他题目上。懂SQL的可以直接跳到第2.3节看分组统计的坑只复习范式的人可以直接看第3章想搞懂事务调度的看第4章时间紧的先把第5章过一遍再回去补细节。2. 关系代数与SQL期末考试的分值核心2.1 关系代数的四个高频考点与答题模板关系代数在试卷里一般是一道独立大题或者跟SQL题合并出现占10到15分。期末卷子考它不是因为数据库系统还真的用关系代数做查询优化而是因为它能干净地检验你懂不懂「集合操作」这个底层思维。常见的题型就那么几类选择、投影、连接、除法。选择和投影是送分题符号别写反就行。选择是选行用希腊字母σ条件是写在右下角投影是选列用π后面跟属性列表。这里有个坑很多人在写投影的时候忘了去重关系代数的运算结果是集合重复元组在理论上不存在阅卷时如果你对同一个答案写了两次SELECT DISTINCT会被当成概念不熟扣分。连接操作用⋈表示自然连接会自动去掉重复属性而θ连接要自己写条件。期末最喜欢考的写法是这样给出一个查询需求让你先用关系代数写再转成SQL。这时候你只需要按「先选、再连、后投影」的固定顺序套答案。除法运算比较少见但一旦出现就是拉开差距的题目它的含义是「找出满足所有条件的人」解法分两步先把被除关系里涉及除数的属性投影出来再用除数里的所有值逐一比对落成SQL就是NOT EXISTS嵌套。给定查询「查询所有选了数据库原理课程且成绩不低于85分的学生姓名」关系代数写法是先做选择得到成绩达标的记录再做连接取课程表里的课程名最后投影姓名。这个顺序就是你答题时写步骤的顺序一笔都不能省。2.2 用一张学生选课表把SQL常考语法一次写透SQL大题一般用学生表、课程表、选课表三张基础表来出题偶尔加一张教师表或学院表。先给一个最常用的建表结构拿来当你的复习基准-- 学生表学号是主键姓名非空 CREATE TABLE student ( sid CHAR(8) PRIMARY KEY, sname VARCHAR(20) NOT NULL, dept VARCHAR(20) ); -- 课程表课程号是主键 CREATE TABLE course ( cid CHAR(6) PRIMARY KEY, cname VARCHAR(50) NOT NULL, credit INT ); -- 选课表联合主键外键分别引用学生和课程 CREATE TABLE sc ( sid CHAR(8), cid CHAR(6), score DECIMAL(5,2), PRIMARY KEY (sid, cid), FOREIGN KEY (sid) REFERENCES student(sid), FOREIGN KEY (cid) REFERENCES course(cid) );这里的关键是选课表的主键必须用(sid, cid)联合主键因为一个学生选多门课、一门课被多个学生选单靠任何一列都无法唯一标识一条选课记录。外键会保证你写连接查询时不会因为脏数据翻车这也是试卷里默认成立的约束条件。试卷里最常考的查询有两种。第一种是连接查询查「选了某门课并且分数超过多少的学生名单」写法上注意表别名的使用-- 查询选修了数据库原理且成绩大于85的学生姓名和成绩 SELECT s.sname, sc.score FROM student s JOIN sc ON s.sid sc.sid JOIN course c ON c.cid sc.cid WHERE c.cname 数据库原理 AND sc.score 85;写连接查询的时候SELECT列前面一定要带表别名。不带别名的答案在语法上没问题但在改卷时会被认为可读性差而且一旦两个表有同名字段不带别名会直接报错属于考场上的低级失分。第二种是分组统计查「每门课的选课人数和平均分」这类题有一半人会在GROUP BY的位置上翻车-- 统计每门课的选课人数和平均分按选课人数降序 SELECT c.cid, c.cname, COUNT(sc.sid) AS cnt, AVG(sc.score) AS avg_score FROM course c LEFT JOIN sc ON c.cid sc.cid GROUP BY c.cid, c.cname ORDER BY cnt DESC;统计每门课的人数必须用LEFT JOIN而不是INNER JOIN因为没有学生选的课程也要出现在结果里。GROUP BY后面只能放分组列或聚合函数你不能在SELECT里写一个既没被分组也没被聚合的列这是最高频的报错来源。2.3 WHERE、GROUP BY、HAVING最容易写错的三个地方过滤条件分两块这是数据库SQL题里最经典的丢分点。WHERE是在分组之前过滤行HAVING是在分组之后过滤组。判卷时我最常看到的一种错误是有人用WHERE去过滤聚合结果比如「筛选出平均分大于80的课程」SQL的标准答案必须用HAVING-- 筛选出平均分大于80的课程正确写法 SELECT c.cid, AVG(sc.score) AS avg_score FROM course c JOIN sc ON c.cid sc.cid GROUP BY c.cid HAVING AVG(sc.score) 80;为什么不能用WHERE AVG(sc.score) 80因为WHERE子句的执行时机在分组之前此时聚合函数还没有计算出来。这是SQL执行顺序的底层约束死记硬背不如把执行顺序写下来FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。你按这个顺序去推导题目几乎不会再错。第二个高频坑是COUNT的语义。COUNT()统计行数COUNT(sid)统计非空的sid个数COUNT(DISTINCT sid)统计去重后的学生数。题目问「有多少学生选课」和「有多少条选课记录」答案可能是不同的前者要加DISTINCT后者直接COUNT()就行。还有COUNT(NULL)恒等于0这一点平时不注意遇到选课表里成绩为NULL的题目就会写错。第三个坑是子查询和JOIN怎么选。同样一句查询有人习惯写嵌套子查询有人习惯写JOIN。改卷的参考标准通常两种情况都给分但嵌套子查询在某些特殊题目里会写得非常臃肿判卷老师还会因为可读性扣分。比如「查询选了所有课程的学生」只能用NOT EXISTS双重否定来写此时用JOIN反而别扭。我建议你把NOT EXISTS这个关键字彻底练熟它几乎是每张数据库期末卷子里的必考题。3. 范式与函数依赖简答题和计算题的送分题3.1 从第一范式到BCNF判断一个关系模式该拆到第几级范式题在期末试卷里一般占15到20分题型有两种给一个关系模式和一组函数依赖让你判断它属于第几范式或者直接给你一张设计得很烂的表让你规范化到3NF或BCNF。范式层级这件事理解起来不复杂关键在于判断顺序不能乱。判断一个关系模式的范式等级标准流程是固定四步。第一步看所有属性是否都是不可再分的原子值如果哪一列里存了逗号分隔的多个值连1NF都不满足第二步找主键找主键的前提是算函数依赖的闭包第三步看是否存在非主属性对候选键的部分依赖存在就是1NF第四步看是否存在非主属性对候选键的传递依赖存在就是2NF最后再看决定因素是否都包含候选键不满足就是3NF。BCNF比3NF更严格它要求所有决定因素必须是超键这个区别在卷子上经常被单独拎出来考。这里有一个很实用的答题技巧考试时不需要把每个范式背得滚瓜烂熟只需要会判断「部分依赖」和「传递依赖」这两个词。部分依赖指的是非主属性只依赖候选键的一部分通常发生在联合主键的场景传递依赖指的是非主属性经由另一个非主属性间接依赖候选键。能准确指认这两种依赖规范化题目就完成了一半。我在实际做数据库设计的时候也沿用这个判断顺序。很多初学者喜欢一上来就喊「拆表」但表拆得太碎会导致查询需要绕过多个连接层性能损失远大于规范化收益。考试归考试工程上的通行做法是拆到3NF就收手BCNF只在实际遇到异常更新时才继续拆。3.2 一道函数依赖计算题的完整推演函数依赖计算题是所有范式题的地基。给一道期末考试最常见的例子关系模式R(A, B, C, D, E)函数依赖集F {A→B, AB→D, C→E}问你R的候选键是什么R属于第几范式。第一步求候选键。从F里看A不在任何函数依赖的右边所以A必在候选键里C同样不在右边也必在候选键里。接着先试AC的闭包A推出B得到ABCAB可以推出D得到ABCDC推出E得到ABCDE覆盖全部属性所以AC是唯一候选键。第二步判断范式。候选键是AC是联合主键。B对候选键AC是不是部分依赖A→BB只依赖A而不依赖整个AC这属于非主属性对候选键的部分依赖。只要存在部分依赖R最多只能到1NF连2NF都不满足。解答这类题的关键在于闭包计算必须按顺序写清楚。阅卷老师看的是过程分你闭包推导每多写一步就能多拿一步的分数。直接在草稿纸上心算然后只写一个「候选键是AC」的答案一旦算错就是整题覆灭连补救的机会都没有。我建议你每次做这类题都在答题纸上留下这样的推演轨迹「由A→B得到AB由AB→D得到ABCD由C→E得到ABCDE」。3.3 规范化答题的标准话术把关系模式从1NF一路规范到3NF期末卷子要求你写出每一次分解的详细步骤。很多人的答案逻辑正确却拿不到满分因为步骤写得模棱两可缺了分解依据。规范化的标准答案要包含三个要素当前存在的问题、分解后的关系模式、每个新模式的候选键和范式级别。给你一个可以直接套用的模板。假设原来的关系是选课表R(学号, 姓名, 课程号, 课程名, 成绩)函数依赖有学号→姓名课程号→课程名(学号,课程号)→成绩。候选键是(学号, 课程号)但姓名只依赖学号课程名只依赖课程号都存在部分依赖所以R是1NF。答题时这样写R存在非主属性对候选键的部分依赖故需分解。将R分解为R1(学号, 姓名)和R2(学号, 课程号, 成绩)以及R3(课程号, 课程名)三个关系模式。这里为什么拆成三张表而不是两张因为R2如果保留课程名就还存在课程号→课程名的传递依赖。每一层分解都要回答「为什么这样拆」而不是只写结果改卷时这部分过程分就占到一半以上。注意一个考场细节规范化以后的每个关系模式都要顺手标注主键否则阅卷老师无法判断你是否真的理解了依赖关系。用「主键学号」这样明确标注即可。工程上做表结构设计时我一般把这种拆解过程当作评审表的工具而不是直接生成建表语句因为最后的物理设计还要结合索引和查询模式调整。4. 事务、并发控制与锁简答题的必背板块4.1 事务的四个特性和四种隔离级别事务这块在期末卷子里主要以简答题和辨析题出现占10到15分。简答题最大的问题不是不会背而是背了却答不到阅卷人想要的点子上。事务的ACID特性、每一种隔离级别能解决什么问题、会产生什么问题这三件事必须形成一个完整的知识链条不能孤立地背名词。ACID四个字母对应原子性、一致性、隔离性和持久性。这里最常见的丢分点是概念描述太短比如只写「原子性就是要么全做要么全不做」正确答题应该加上触发场景事务内部某个操作失败时需要通过回滚日志将已执行的操作全部撤销使数据库恢复到事务开始前的状态。阅卷看的是你是否理解每个特性的实现机制。隔离级别这道题是辨析题的重灾区。四种隔离级别从低到高分别是读未提交、读已提交、可重复读和串行化。它们与三类异常现象的关系值得你用一张对照表记牢隔离级别脏读不可重复读幻读读未提交可能可能可能读已提交不会可能可能可重复读不会不会可能串行化不会不会不会这张表不是背下来就完事你要能说清楚每一挡之间的差别。读未提交允许读到别人尚未提交的数据所以脏读是它的典型问题读已提交只读已提交内容脏读解决但同一查询在事务内两次执行可能返回不同结果这就是不可重复读可重复读保证行级别一致但无法阻止其他事务插入新行这就是幻读。能把这个推导过程讲顺简答题基本不会扣分。4.2 死锁、活锁与两段锁协议的答题角度并发控制的简答题围绕的是锁机制和调度的合法性判断。先说锁共享锁和排他锁的兼容关系是必背内容共享锁与共享锁可以共存共享锁与排他锁不能共存排他锁与任何锁都不能共存。题目如果给一个锁矩阵让你填空本质上考的就是这张兼容关系表。两段锁协议和死锁是两道单独的经典简答题。两段锁协议的核心是事务分两个阶段扩展阶段只加锁不放锁收缩阶段只放锁不加锁。它的价值在于保证调度的可串行化这是考点本身。但要注意两段锁协议不能防止死锁只能保证一旦出现死锁回滚后依然能得到正确结果。很多人在这一点上混淆把两段锁当成死锁的解决方案这是一分都拿不到的硬伤。死锁的产生需要四个条件同时满足互斥、持有并等待、不可剥夺、循环等待。答题时把这四个条件逐一列出来再讨论破坏其中一个条件就能预防死锁。检测死锁的方法是等待图有环则死锁。活锁则完全不同它不是阻塞而是一直拿不到锁典型的比喻是事务T1反复申请锁但总是被更高优先级的事务抢先。解决活锁的最简方案是先来先服务。4.3 一道并发调度小题的完整解析调度类大题通常这样出给出两个事务T1和T2的操作序列让你判断它是否冲突可串行化。这种题有固定解法按步骤做就能拿全分。冲突操作指的是两个事务对同一个数据项的操作并且至少有一个是写操作且两个操作来自不同事务。先给出一道典型例题。事务T1读A、写A、读B、写B事务T2读A、写A、读B、写B。如果调度序列是T1读A、T2读A、T1写A、T2写A、T1读B、T2读B、T1写B、T2写B让你判断是否冲突可串行化。解题第一步把每个操作按事务分开列出两个串行调度即T1T2顺序和T2T1顺序第二步找目标调度里的每一对冲突操作看它们在目标调度中的顺序是否与某个串行调度完全一致。目标调度里T1和T2在A上的冲突操作T1写A在T2写A之前和T1T2串行顺序一致但看B上的冲突操作同样T1写B在T2写B之前方向一致。再看读写的交叉方向T1读A在T2写A之前同样一致。因此这个调度与T1T2串行顺序等价是冲突可串行化的。答题模板就是先定义冲突操作再画两个串行调度的顺序对照表最后下结论。这种题每一步都写出来即使最后判断错过程分也能拿一半。5. 备考踩坑那些改卷时被扣分最多的答案5.1 现象SQL题里SELECT后面的列名没带表别名某次模拟题里查「选了数据库原理的学生姓名和成绩」有人写SELECT sname, score FROM student, course, sc WHERE…直接在改卷时被扣了分。原因在于三表连接查询不加别名的情况下course和sc里如果有同名字段数据库无法确定你指的是哪一列而且阅卷时也看不出你对表结构的意图。解决方法是答题时所有SELECT的列名统一带表别名这个习惯一旦养成连真机执行时都不会因为列名歧义翻车。5.2 现象函数依赖闭包算错导致候选键推错很多人在计算闭包的时候只在草稿上心算答题纸直接写候选键结果算错一步就全盘覆灭。题目R(A, B, C, D)依赖为A→BB→C有人直接把A的闭包算成ABC却漏掉了D然后得出A是候选键的结论。这个答案默认了D不依赖A但你没把D放在闭包里验证过。解决方法是把闭包的每一步都写在答题纸上A→B推出ABB→C推出ABC检查ABC无法推出D因此A不是候选键需要再尝试AB、AC、AD等组合。过程写全即使结果错也能拿步骤分。5.3 现象把隔离级别的解决能力答反了简答题问「可重复读能防止哪种异常」有人写「能防止幻读」这是最典型的概念混淆。可重复读通过锁住已读取的行来保证行数据不变但它无法阻止别的事务在范围内插入新行因此幻读仍然可能。解决方法是把每一档隔离级别对应的「能防什么、防不了什么」列成一张表考前默写一遍。这张表不要临时背要按脏读、不可重复读、幻读的顺序横着推直到能不用看表直接说出每一种组合。5.4 现象ER图中实体与联系的基数标反设计题里画「一个学生可选多门课程一门课程可被多个学生选」的ER图有人把学生到课程的连线上标成了1:N语义完全反了。这个错误的原因是把「一个学生能选几门课」和「一门课有几个学生选」搞混了。解决方法是画图前先写一句自然语言约束「每个学生可以对多门课程产生选课关系每门课程可以被多个学生选择」然后再把这句话转成M:N标注。考试时先写这句白话再画图能避免大部分基数错误。5.5 现象索引概念的辨析题答得太笼统问「为什么对经常出现在WHERE条件里的列建立索引能加快查询」时只写「为了更快找到数据」没有得分点。加分答案是提到索引的结构以及它如何减少扫描的数据页数。解决方法是把索引的底层结构当成复习重点要知道在B树索引下查询执行器可以从根节点往下走经过三层左右就能定位到叶子节点上的数据指针而不需要对整张表的每一行做全表扫描。回答辨析题时写清楚数据访问路径的变化阅卷人就会认为你真正理解了索引机制而不是背了结论。6. 临考一周用真题结构反推复习顺序冲刺提分考前最后一周不适合再从头翻教材最适合做的是「按题型刷真题」。一张典型期末卷子题型分布相对稳定选择题或填空题考概念、SQL大题考查询书写、设计题考ER图、计算题考范式、简答题考事务与并发。你按这个结构去做三套题会发现自己的薄弱点基本集中在两类一类是SQL的分组统计一类是范式判断中的闭包计算。这两类占据的分数比重最大优先补。冲刺阶段的技巧是按分值来分配时间。SQL大题的书写速度靠练真题提升建议每天手写两道连接查询、一道分组统计、一道子查询写完逐行对照执行逻辑。关系代数题每天练一道转SQL的对照题。范式题每天把闭包计算完整走一遍流程就是上面说的候选键推演和依赖判断。事务题把隔离级别表和两段锁协议每天默写一遍直到停笔不卡壳。做题时给自己设一个真实的答题环境手写而不是直接在编辑器里敲因为考试不允许带环境。手写SQL的时候我习惯先在旁边写出FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY的执行顺序再照着顺序填内容这能避免一半以上的语法顺序错误。范式题则在草稿上把候选键的第一遍推算完整写出再誊到答题纸上。还有一个亲测有用的验证方法把做过的错题整理成一行一个考点的小清单考前最后一晚只看清单不看题。比如「COUNT(DISTINCT)用在哪」「HAVING不能替WHERE」「闭包每一步写出来」「死锁四条件少一个都不行」。这些短期记忆非常牢固上午进考场前再扫一遍当场的准确率提升明显。我自己当年复习数据库期末时吃过亏的地方是看了大量资料却不动手写上了考场才发现在白纸上手写SQL的节奏跟看答案完全不是一回事。动手写、写完整、按步骤给分点检验自己写的答案才是这个科目最划算的投入方式。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑