简介:面向江西理工大学数据库原理课程期末备考的复习资料,内含完整考试复习题与参考答案,系统覆盖数据库基础概念、关系数据库模型、数据库模式设计、ER图绘制、SQL增删改查语句、范式理论、索引机制、事务ACID特性、并发控制、备份恢复与安全管理等核心考点,适合该校本科生期末冲刺复习,也可供其他高校数据库原理学习者自测与查漏补缺。资源包共1个doc文档,大小约1006KB,内容按知识点模块编排,便于对照教材逐章巩固、快速检索。目前已有268人学习下载。通过刷题与答案对照,可帮助读者快速定位知识薄弱环节,理解数据库设计流程与SQL语句的实际运用,掌握事务、索引、范式等高频考点的答题思路,是一份针对性较强的考前复习材料。
1. 某理工高校的数据库原理复习题:一份能反推考纲的文档
考前一周最怕的不是题难,是不知道题库长什么样。手头这份数据库期末复习题及答案文档,来自一所理工类高校的数据库原理课程,题型覆盖选择、填空、简答、关系代数计算、SQL 编写和 ER 图设计,参考答案给得很完整。它的价值不是让你背答案,而是拿它反推这门课的出题边界:哪些知识点老师认为必须掌握,哪些只要求能判断对错。数据库原理的教材版本五花八门,但考点主干的交集很大,这份资料对正在备考期末、或者想系统过一遍数据库基础的学生都适用。下面按我的使用经验拆开讲。
2. 知识点覆盖拆解:从关系代数到并发控制,常见考点分布
拿到任何一份数据库复习题,我做的第一件事不是刷题,而是把题按知识点分类,看看分值往哪儿集中。数据库原理这类课的出题格局,几十年没大变过:基础概念、关系代数与 SQL、函数依赖与范式、事务与并发、ER 模型与设计、索引与优化。下面是我从这类复习题文档里提炼出的常见模块和各自的“必考理由”。
2.1 关系模型与关系代数:投影、选择、连接为什么年年考
关系代数是 SQL 的理论地基,也是期末卷子里的送分题和拉分题的分水岭。基础操作用投影(π)选列、选择(σ)选行、自然连接(⋈)合并表,难题会叠加重命名和除法运算。
复习题里这类题通常有两种面孔:一种是给两张表的实例,让你写出某个关系代数表达式的执行结果;另一种是给你一句业务需求,比如“找出选修了全部课程的学生学号”,要你写出等价表达式。后者难在“全部”两个字,正规解法是用除法,但很多人只知道用 NOT EXISTS 的 SQL 来写,代数表达式就卡住了。
答题时我一般按三步走:
- 先明确输出是“列”还是“行”,决定先投影还是先选择。
- 再看要不要做连接,连接条件写清楚是等值还是自然。
- 对“全部”“至少”这类量词,优先想除法或差运算。
2.2 SQL:从基础查询到嵌套子查询的答题套路
SQL 题在期末卷里通常占四分之一到三分之一,题型从写 SELECT 语句到补全 WHERE 条件都有。复习题里最常出现的几个考点是:GROUP BY 与聚合函数的搭配、HAVING 与 WHERE 的过滤时机区别、相关子查询与 EXISTS 的用法、视图的创建与更新限制。
有一类题很能拉开差距:找出“部门平均工资高于全体平均工资的部门”。低分写法是把所有行查出来然后在程序里算,卷面上要求用 SQL 完成,那就要写成:
SELECT dept_id, AVG(salary) FROM employee GROUP BY dept_id HAVING AVG(salary) > ( SELECT AVG(salary) FROM employee );这里的关键是理解 WHERE 在分组前过滤、HAVING 在分组后过滤。复习题答案里通常会把这两者的区别单独拎出来考填空或判断,我见过不少人把过滤条件写进 WHERE,导致聚合结果对不上。
子查询部分,最常迷惑人的是把相关子查询和非相关子查询搞混。相关子查询每处理一行就执行一次,非相关子查询只执行一次。判断标准是:子查询内部是否引用了外层表的列名。复习题中有一个经典例子是“查询工资高于本部门平均工资的员工”,这类题必须用相关子查询。
2.3 函数依赖与范式:3NF 与 BCNF 判断的边界条件
范式判断题是整张卷子里最容易“感觉自己对了但分全扣”的部分。判断流程本身不复杂:求候选码,找部分依赖,找传递依赖。但一到具体题目,学生通常栽在三个地方——多属性候选码漏选、部分依赖定义模糊、BCNF 与 3NF 的边界没分清。
我的做题顺序是固定的:
- 把所有函数依赖列出来,计算属性集的闭包,求出全部候选码。
- 拿着候选码看非主属性是否部分依赖候选码:有则不属于 2NF。
- 再看非主属性是否传递依赖候选码:有则不属于 3NF。
- 最后看每个函数依赖的左侧是否都包含任一候选码:只要有一条不满足,就只能算 3NF 不能算 BCNF。
复习题里常见的一道题是关系模式 R(A,B,C,D),函数依赖为 AB→C、C→D、D→B。很多人一眼觉得 AB 是候选码就算完了,忘了求一下 A 和 B 的单属性闭包。实际上从 C→D 和 D→B 能推出 C→B,再结合 AB→C,这里暗藏了别的候选码。这种题就是拿来提醒你:闭包计算一步都不能跳。
2.4 事务、ACID 与并发控制:锁、日志、隔离级别的关键点
事务这一章复习题大多来自概念记忆,但也会有一道调度分析题。ACID 里最难理解的是隔离性和持久性,对应到并发控制就是封锁协议和日志恢复。
复习题里常见的简答题是:“说明两段锁协议为什么能保证冲突可串行性。”参考答案的核心是两句话:任何事务的加锁操作都在解锁操作之前;两段锁协议只保证可串行性,不保证不发生死锁。第二句很多人都会漏写,但正是这句才是评分点。
隔离级别与并发异常的对应关系,复习资料里通常给成一张对应表,最常见的是四级隔离:
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| Read Uncommitted | 可能 | 可能 | 可能 |
| Read Committed | 不可能 | 可能 | 可能 |
| Repeatable Read | 不可能 | 不可能 | 可能 |
| Serializable | 不可能 | 不可能 | 不可能 |
背这张表要讲方法,不要死记格子。规律是:级别越高,被禁止的异常越多。但请注意,这里的“幻读”在有些教材里定义为对数据量变化(INSERT/DELETE)的不可重复读,而 MVCC 下的“可重复读”在特定数据库里是能防幻读的,考试要按课件定义来答。
2.5 ER 图转关系模式:实体、联系与主键的映射规则
设计题里 ER 图转关系模式是高频题型,评分看三点:主键标对没有、外键加对没有、多对多关系有没有被拆成单独的表。我在这个点上的做法是画一张映射表:
| 联系类型 | 关系模式处理方式 |
|---|---|
| 1:1 | 可在任一侧表里加对方主键做外键 |
| 1:N | 在 N 侧表里加入 1 侧的主键做外键 |
| M:N | 必须单独建一张联系表,主键是双方主键组合 |
复习题的参考答案里出现比例最高的问题是把 M:N 联系合并进某个实体表,导致主键不唯一。另一个常见坑是弱实体:弱实体必须依赖强实体存在,它的主键要包含强实体的主键,很多人把弱实体当作独立实体处理,关系模式就错了。
至于属性要不要继续拆,规则是复合属性要分拆成原子属性,多值属性要单独建表。复习题里涉及“电话号码可多个”这种需求时,大多数初学者直接在实体表里加一列,真实做法是新建“电话表”,外键指向实体主键。
2.6 索引与查询优化:B+ 树、聚簇索引的常见选择题
索引部分的复习题以选择、判断和简答为主。B+ 树的几个结论经常出现在卷面上:B+ 树的非叶结点不存数据只存索引项;叶结点之间通过指针相连形成链表;B+ 树比 B 树更适合做数据库索引,原因是扫表时沿叶结点链表顺序遍历即可,不需要中序遍历整棵树。
聚簇索引与非聚簇索引的判断也常考:聚簇索引决定数据行的物理存储顺序,一个表只能有一个;非聚簇索引不改变物理顺序,查询时先找索引再回表。对应场景是,范围查询用聚簇索引效率高,等值查询用非聚簇索引配合覆盖索引也能接受。
复习题里的简答题通常是“给定一条慢 SQL,分析如何优化”。参考答案固定套路是先看执行计划,确认有没有走全表扫描,磁盘 I/O 是不是瓶颈,再加索引、改写连接条件、避免在索引列上做函数运算。注意一点:索引列上写WHERE YEAR(create_time) = 2024会让索引失效,正确的是WHERE create_time >= '2024-01-01' AND create_time < '2025-01-01',这个改写思路几乎每年都有一道题。
2.7 约束与安全性:触发器、视图权限与断言的考察角度
这一模块的分值不大,但性价比高,因为考的就是名词解释和简单应用。完整性约束有三种:实体完整性、参照完整性、用户自定义完整性,三者对应到 SQL 就是主键约束、外键约束和 CHECK 约束。
触发器的典型考点是区分语句级触发器和行级触发器,以及 AFTER 与 INSTEAD OF 的适用场景。复习题里常让考生写出“在插入订单记录后自动更新库存表”的触发器逻辑,考核点在于你知不知道要处理多行插入的情况——如果是行级触发器,每一行都触发一次;如果用语句级触发器,则要处理更新前后的集合差异。
安全性部分的简答题通常是对比视图和授权机制,常见结论:视图不仅能简化查询,还能作为安全屏障,隐藏表的敏感列;GRANT 与 REVOKE 的组合使用可以实现列级权限控制。复习题答案里对这个知识点的表述很标准,我在背的时候会额外注意:视图更新有限制,带 GROUP BY 或 DISTINCT 的视图不可更新。
3. 三轮刷题法:让复习题不再只是“背答案”
文档资源最大的风险是“打开、浏览、合上、忘光”。同样是这份复习题,有人能考到九十多,有人翻完一遍等于没看,差别不在智力,在刷题方法。我把这个过程拆成三轮,每一轮的侧重点完全不同。
3.1 第一轮:做旧题,建立个人错误档案
第一轮不看答案,先把全部题目裸做一遍。不要在意正确率,只做一件事:把每道题对应的知识点写在题号旁边,并在做错的题上做一个标记。这个动作的产出是一个“错误档案”,里面记录的其实不是错误本身,而是你知识树上的窟窿。
我一般会建一个三列表格:题号、考点、错误原因。
| 题号 | 考点 | 错误原因 |
|---|---|---|
| 5 | 关系代数除法 | 忘记除法适用场景 |
| 14 | BCNF 判断 | 候选码漏算 |
| 27 | 两段锁协议 | 忽略死锁可能性 |
第一轮的常见心态问题是一上来就翻参考答案,看到答案觉得“原来如此”,就以为掌握了。这是典型的“虚假熟悉”,考场上换个数字换个表名就暴露了。裸做一遍,哪怕错一半,也比直接看答案有效。
3.2 第二轮:合上答案,重做错题
第二轮的素材只有错题。方法很简单:把错题重新抄一遍题干,不看第一轮的答案,闭卷重写。这一轮会收获一个很不舒服的体验——同一道题第二次做,可能还是错在同一个地方。比如函数依赖的闭包求错,可能是步骤习惯的问题,不是理解问题。
这时候要做的事情是打开参考答案,只看“过程”不看“结果”。对计算题、推导题来说,过程在哪一步断掉,比结果错在哪儿更重要。如果是范式判断,看看参考答案有没有列出候选码的完整推导;如果是 SQL,看看答案的写法是单层查询还是子查询,跟自己思路的差异在哪。
我自己的习惯是给重做仍然错的题打两个标记,并在知识点旁补一行“我为什么又错了”的具体原因。这个原因要写得非常具体,比如“闭包计算时漏了对函数依赖右侧属性的继续推导”,而不是“不熟”。
3.3 第三轮:按题号反推考点,重建知识树
第三轮不看题,只看你前两轮在题干旁边写下的一列考点关键词。从这些关键词反推知识结构,把零散的点连成一张网。比如“关系代数”这一支,往下展开是并、差、交、笛卡尔积、选择、投影、连接、除法;然后连接再展开成等值连接、自然连接、外连接。
完成这个重建后,你在考场上遇到没见过的题就不会慌,因为你已经把“这道题到底在考什么”的映射关系训练出来了。这一步才是复习题文档最有价值的用法:它不是题库,是考点清单。
4. 四类题型的答题模板:基础分的稳定性从哪来
复习题看多了会发现,题型翻来覆去就那么几种。每种题型都有对应的答题框架,按框架写,不一定拿满分,但一定不会漏掉评分点。下面是四类高分值题型的常用模板。
4.1 简答题的“定义+特性+例子”三段式
简答题最怕写得“太散文”,想到哪写到哪。我见过的参考答案几乎都是一个路子:先给出严格定义,再列要点,最后补一个小例子。
以“什么是事务的原子性”为例,答题框架是:
- 定义:事务是一个不可分割的工作单位,其中的操作要么全部执行,要么全部不执行。
- 特性解释:如果事务未提交就失败,系统要回滚到事务开始前的状态。
- 例子:银行转账中扣款与入账必须同时成功或同时失败。
这样写的好处是评分老师按点找关键词,三段各对应一两个得分点,不会因为遗漏而扣分。复习题里的简答全部可以套这个模板,背答案的时候也按三段来记,比逐字背轻松很多。
4.2 设计题(ER 图与关系模式)的评分点拆解
ER 图设计题分值大,但评分点相对固定。我在阅卷角度观察得出的经验是,老师主要看四处:
| 评分点 | 常见失分表现 |
|---|---|
| 实体是否穷举完整 | 漏掉弱实体、多值属性对应的实体 |
| 联系类型是否标注正确 | 1:1 写成 1:N,M:N 漏标 |
| 主键是否选对 | 复合主键只写一半 |
| 关系模式转换是否规范 | M:N 联系没拆成独立表 |
答题时要先在草稿纸上把实体、联系、属性列全,确认没有遗漏后再作图。每个联系都要标注基数(1:1、1:N、M:N),因为判卷时看的就是这个标注。转换成关系模式时,一条条对照我前面给的映射表来写,写完检查每个关系模式里有没有外键、外键指向谁。
4.3 计算题(范式判断、事务调度)的步骤化求解
计算题是最好拿分的,因为过程可以训练成机械化操作。范式判断题我已经在前面给过四步流程,这里补充事务调度的答题模板。
事务调度题通常给你两个事务 T1 和 T2,各有一串读写操作,问该调度是否冲突可串行化。我的标准做法是:
- 标出所有冲突操作对(读写冲突、写写冲突,且针对同一数据项)。
- 画出优先图,结点是事务,冲突对中先执行的事务指向后执行的事务。
- 优先图无环则冲突可串行化,序列按拓扑排序得到。
这个流程每步都有分数,只要你按步骤写,即使最后串行化序列判断错了,前面的冲突标记和优先图还能拿到过程分。复习题答案里通常会直接给结论,但你在分析时要自己把三步的痕迹写出来。
5. 备考避坑指南:背答案、钻牛角尖、倒序做题的教训
考前刷复习题,最常见的几种翻车现场,我按自己的血泪经验整理成四条,每一条都是具体的现象加原因加解决办法。
5.1 现象:一道 SQL 题换了下表名就不会做了
原因是复习时只背了参考答案,没有理解查询逻辑的结构。解决:合上答案,把每道 SQL 题的题干读一遍,自己写一遍,然后对比参考答案看差异点。对比时不要只看结果是否一致,要看表达式的思路——是先用 WHERE 过滤还是先用 GROUP BY 分组。如果只是换了表名和列名,说明你根本没理解这条语句的执行顺序。
5.2 现象:范式判断题结果对了,过程分被扣了一半
原因是只写了结论,没有把候选码推导、闭包计算这些中间过程写上去。期末卷的判分是按步骤给的,结果错了过程还能拿分,结果对了过程缺失也会扣分。解决:每次做范式题都在草稿纸上保留完整计算痕迹,试卷上至少写出“候选码为……判断依据是……”的中间结论。复习题答案如果只给了最终范式等级,你要自己补出推导过程,因为那才是考试时真正要写的。
5.3 现象:考前一周开始刷题,发现内容量远超预期
原因是把复习题当“考前速成宝典”,而不是日常资料。解决:这类复习题文档应当提前两周开始第一轮裸做,而不是考前突击。正确节奏是考前两周做第一轮,考前一周做错题,考前两天只看速记卡。我之所以强调节奏,是因为数据库原理的范式判断和事务调度需要时间消化,塞进一个晚上只会增加焦虑。
5.4 现象:迷信复习题里反复出现的题目,把复习范围越收越窄
原因是认为出题老师会从原题里抽题。实际上期末卷里大约只有三成题目与复习题原题接近,其余是变换条件或换角度的变体。解决:以复习题为锚点,把每道题对应的考点扩散开。一道考“事务隔离级别”的题,你要把脏读、不可重复读、幻读的定义全部复习一遍,而不是只背那个选项。把“这题怎么答”转化成“这个考点还有哪些考法”,范围自然就广了。
6. 把复习题变成速记卡:考前最后一天只看一页纸
到了考前最后一天,完整刷题已经没有意义,这时候需要的是把整份复习题压缩成一页纸的速记卡。我在长期拆解这类文档资源时养成的一个习惯是,对每道有价值的题抽取三个要素:题干里的核心名词、对应的考点、最容易踩的坑。
比如“两阶段封锁协议”这道题,速记卡上只写:“加锁和释放分两阶段,扩展阶段只加锁不释放,收缩阶段只释放不加锁;能保证冲突可串行化,不能避免死锁。”再比如 BCNF 判断,只写一句:“每个函数依赖的左侧都包含候选码,才满足 BCNF;只要求消除非主属性对码的部分与传递依赖,是 3NF。”这样一来,原来几十页的文档就压缩成了几十行短句。
速记卡的整理方式建议按章节分组,每组一行知识块,然后用对比表格把最容易混淆的概念放一起:
| 对比项 | 3NF | BCNF |
|---|---|---|
| 要求 | 消除非主属性对候选码的部分依赖和传递依赖 | 每个依赖的决定因素都包含候选码 |
| 允许例外 | 允许主属性对候选码的部分或传递依赖 | 不允许任何例外 |
| 做题判断 | 先求候选码,再看非主属性 | 逐条检查函数依赖左侧 |
考前最后一天只翻这张卡,不做新题,不背完整答案。记忆的规律是临睡前过一遍比白天硬背三小时更牢,所以我把最后一遍速记卡放在晚上睡前。这个习惯帮我把好几次考前焦虑压了下来,从那以后我每次复习文档类资料,都强制自己走一遍“裸做、错题重做、反推考点、压成速记卡”的流程,哪怕时间再紧,至少要把速记卡做出来。希望帮到你。
本文还有配套的精品资源,点击获取