简介:面向数据库系统概论课程学习者的一份完整复习试题合集,适用于期末备考、考研复习、自学巩固或日常章节自测。内容按章节组织,覆盖数据管理技术发展、数据库概念模型、三级模式与两级映射、数据库管理系统核心功能、关系数据模型、完整性约束、安全性控制、并发控制与数据库恢复等重点,同时兼顾数据库设计、数据定义与操纵语言、分布式与云数据库等拓展知识点,并包含大量选择题、填空题和简答题,便于逐章巩固、查漏补缺并检验掌握程度。资源为单个PDF文件,体积约1.08MB,结构清晰、题目附有参考答案,可直接作为系统化复习提纲与题库使用。当前已有360人学习下载,内容难度覆盖基础概念与进阶专题,适合需要快速回顾数据库基础理论并配合题目练习的读者。
1. 数据库系统概论复习题:这份 PDF 到底覆盖了什么考点
「数据库系统概论」这门课最折磨人的地方,不是知识点有多深,而是你永远不知道哪些概念会变成选择题、哪些细节会写进 SQL 大题。这份《数据库系统概论各章复习试题及答案》PDF 属于典型的章节复习资源,按绪论、关系数据库、SQL、安全性、完整性、关系数据理论六章排布,每章先用选择题和填空题把概念过一遍,再配简答题和综合设计题,题后直接给答案。对期末备考的学生、考研专业课复习的人,以及互联网公司里做数据、后端、运维相关岗位但想系统补一遍数据库基础的从业者来说,它最大的价值不是「背答案」,而是告诉你怎么判断一道题到底在考什么。下面几章我按这份资源的实际内容拆开讲,把概念题、ER 图设计题、SQL 手写题和范式题分别说透。
2. 三级模式与数据独立性:把选择题拆成一套判断流程
翻开这份 PDF 的第一章,二十多道选择题里有超过一半在围着「数据独立性」打转,比如数据独立性最高的阶段、物理独立性的定义、三级模式结构中哪个描述全局逻辑结构。这类题不用死记答案,只要理清一条主线:数据库系统凭什么能做到数据独立?答案是三级模式加两级映射。
2.1 数据管理三阶段:独立性的来源
第 1 题问数据独立性最高的阶段,答案是数据库系统。人工管理阶段程序和数据完全绑定,文件系统阶段数据能以文件形式长期保存,程序通过文件系统读写,但文件之间互相独立,数据结构一旦调整,程序就得跟着改。数据库系统引入了三级模式结构,把用户视图、全局逻辑结构、物理存储分开,每一层之间留出映射接口,这才把独立性做到了最高。
做题时遇到「哪个阶段数据独立性最高」「哪个阶段数据冗余最小」这类题,直接往数据库系统上选,因为它的核心设计目标就是让应用与数据解耦。文件系统虽然比人工管理进步,但它在数据共享性和结构性上仍然不足,这是两个阶段的分水岭。
2.2 三级模式与两级映射:一张表理清「谁变谁不变」
数据库体系结构按外模式、模式、内模式三层组织,对应三种角色视角。我把每层的变化影响整理成了一张表:
| 模式层 | 对应视角 | 描述对象 | 这一层变了,谁受影响 |
|---|---|---|---|
| 外模式 | 用户或应用 | 局部逻辑结构 | 通过外模式/模式映射隔离,应用可以不变 |
| 模式(概念模式) | 全局 | 全体数据的逻辑结构和特征 | 通过外模式/模式映射隔离,外模式和应用可以不变 |
| 内模式 | 存储 | 物理存储结构和存取方法 | 通过模式/内模式映射隔离,模式和外部应用可以不变 |
第 19 题问「描述数据库中全体数据的全局逻辑结构和特征」,答案就是模式。第 6 题问物理独立性,题干说「用户的应用程序与存储在磁盘上数据库中的数据相互独立」,这就是内模式变化不影响应用层的意思。第 11 题说把数据库结构划分成多个层次是为了提高数据独立性和物理独立性,其实对应的是两级映射各自承担的任务。
2.3 概念题辨析技巧:两种独立性怎么一眼分清
很多人在选择题上翻车,是把逻辑独立性和物理独立性混在一起。我总结的判断方法是:题干出现「存储结构、存取方法、磁盘、物理存储」这些词,说的是物理独立性;题干出现「全局逻辑结构、概念视图、数据定义变更、增加新数据类型」这些词,说的是逻辑独立性。
第 7 题问「数据共享」的含义,答案是多种应用、多种语言、多个用户相互覆盖地使用数据集合,这里容易错选成「多个用户共享一个数据文件」。共享的深度不在于文件本身,而在于同一份数据能被不同应用以不同视图使用,这正是外模式存在的意义。
2.4 简答题模板:数据独立性怎么答不丢分
第一章的两道简答题都是「什么是数据库」「什么是数据独立性」,这类题按定义加两层展开的套路答就稳。先写定义:数据独立性表示应用程序与数据库中存储的数据不存在依赖关系。再拆两层:逻辑数据独立性指全局逻辑结构变化时局部逻辑结构不受影响,应用程序不必修改;物理数据独立性指存储结构或存取方法改变时,全局逻辑结构和应用程序保持不变。最后补一句:数据独立性由三级模式结构和两级映射保证,映射由 DBMS 自动处理。
提示:简答题里出现「DBMS 处理这种改变」这类表述时,要明确这是数据库管理系统在做映射工作,不是应用层手动适配。
3. 从 ER 图到关系模式:三类转换规则与主外码自检
这份 PDF 在第一章补充作业里放了两道 ER 图大题,一道是学生选课教师授课,另一道是工厂产品职工管理。很多复习资料只给选择和填空,把设计题放进来是这批题很有价值的地方。ER 图转关系模式是有固定套路的,掌握了套路,这类题就是送分。
3.1 从题干中抽取实体、属性和联系
拿到一段业务描述,先找名词性实体,再找属性,最后找联系及类型。以「学生选修课程、教师讲授课程」这道题为例:
| 元素类型 | 提取结果 |
|---|---|
| 实体 | 学生、课程、教师 |
| 属性 | 学生:学号、姓名;课程:课程号、课程名;教师:教师编号、教师姓名 |
| 联系 | 学生-课程:选修(m:n),属性为成绩;教师-课程:讲授(1:n) |
容易漏的是「成绩」这个属性。成绩既不属于学生,也不属于课程,它是「选修」这个联系上的属性,画 ER 图时必须挂在联系上。很多参考答案把成绩写成课程或学生的属性,遇到这类题要格外留意联系属性这个考点。
3.2 联系类型判断:从「一个」和「若干」里找线索
判断 1:1、1:n 还是 m:n,就看题干两边怎么描述。两边都是「一个…多…」就是 m:n;一边是「一个…多…」,另一边是「一个…只有一个…」就是 1:n。教师和课程的关系就是典型的 1:n——一个教师可讲授多门课,但一门课只有一个教师讲授。
这道题还用到了「一个学生选修一门课,仅有一个成绩」,它限定了选修联系上的属性是单值的,不影响联系类型本身。如果题干说学生和课程是 m:n,那转换时就必须单独生成一个选课关系,不能把选修直接并入学生或课程任意一端。
3.3 ER 图转关系模式的合并规则:1:n 并入 n 端,m:n 单独成表
转换规则可以整理成一张表,做题时照着套:
| 联系类型 | 转换策略 | 外码位置 |
|---|---|---|
| 1:1 | 外码放在任意一端 | 一端加另一端主码 |
| 1:n | 外码并入 n 端实体关系 | n 端加 1 端主码 |
| m:n | 单独转换为一个关系模式 | 关系主码为两端主码组合 |
工厂产品职工题目里的转换就很有代表性。工厂和生产产品之间是 m:n,因为每个工厂生产多种产品、每种产品可在多个工厂生产,所以「生产」必须单独成关系,主码是(工厂编号,产品编号),计划数量这个联系属性也放在这里。职工和工厂之间是 1:n,所以职工关系里直接并入工厂编号作为外码。最终得到三个关系:
- 工厂(工厂编号,厂名,地址)
- 职工(职工号,姓名,工厂编号,聘期,工资)
- 生产(工厂编号,产品编号,计划数量)
3.4 转换后的主码外码自检三步
做完关系模式转换,我习惯按三步检查。第一步,每个关系的主码是否能唯一标识记录,组合主码要确认每个组成部分都有存在意义;第二步,外码一定指向被参照表的主码,比如职工表里的工厂编号必须能对应工厂表的工厂编号;第三步,m:n 转换出来的关系里,联系属性不能丢,也不能把实体属性错误地塞进联系关系中。
除了 ER 图转换,第二章的关系代数概念也容易出选择题。关系模型里一个关键字是可以由「一个或多个能唯一标识元组的属性」组成,这点在第 2 章第 3 题里反复出现;而关系模式的任何属性必须不可再分,这正是第一范式的基本要求。
4. 关系运算与 SQL:从单表查询到 NOT EXISTS 的落笔顺序
第三章是整份 PDF 中实务性最强的一章。SQL 题没有太多理论好讲,关键在于熟悉书写习惯和常见写法陷阱。我在这一章把选择题和书面作业里的 SQL 整理成几类,按从简到难的顺序写清楚。
4.1 关系代数基本运算与「最耗时」的选项
第二章第 4 题问关系运算中花费时间可能最长的运算,答案是笛卡尔积。原因很简单:两个关系做笛卡尔积,结果行数是两个关系行数的乘积,一旦基数大了,中间结果会爆炸。五种基本运算是并、差、选择、投影、笛卡尔积,注意自然连接不是基本运算,它是笛卡尔积加选择再加投影的复合操作。
选择题里还考了专门的关系运算包括哪些,答案选择、投影、连接。这里的关系运算分类常和集合运算混在一起,集合运算是并、交、差,关系运算是选择、投影、连接,分开记不容易错。
4.2 SELECT 书写顺序与执行顺序:两套顺序别混
书面作业第(1)题检索选修「MATHS」课程的学生学号与姓名,标准写法是先把三张表连接起来再筛选:
SELECT S.S#, S.SNAME FROM S, SC, C WHERE S.S# = SC.S# AND C.C# = SC.C# AND C.CNAME = 'MATHS';这是旧式写法,连接条件和筛选条件都放在 WHERE 里。执行顺序并不是从 SELECT 开始,而是先 FROM 生成笛卡尔积,再 WHERE 做连接和筛选,最后 SELECT 投影出需要的列。写多表查询时,WHERE 里先写连接条件再写筛选条件,既清晰也不容易漏。现在更推荐用 JOIN 写法:
SELECT S.S#, S.SNAME FROM S JOIN SC ON S.S# = SC.S# JOIN C ON C.C# = SC.C# WHERE C.CNAME = 'MATHS';两种写法结果一样,JOIN 写法把连接逻辑从筛选里剥离出来,可读性更好。复习时建议两种都练一遍,因为笔试里两种形式都可能出现。
4.3 聚合查询:GROUP BY 与 HAVING 的分工
书面作业第(4)题要求检索平均成绩超过 80 分的学生学号和平均成绩,关键是分组后过滤:
SELECT S#, AVG(GRADE) AS 平均成绩 FROM SC GROUP BY S# HAVING AVG(GRADE) > 80;WHERE 和 HAVING 的区别是高频考点。WHERE 在分组前过滤行,不能使用聚合函数;HAVING 在分组后过滤组,可以使用聚合函数。如果把条件写成WHERE AVG(GRADE) > 80,数据库直接报错,因为 WHERE 执行时聚合结果还不存在。第 11 题还考了「按总成绩降序排列,不统计不及格课程」,写法是WHERE GRADE >= 60 GROUP BY S# HAVING COUNT(*) >= 4 ORDER BY 2 DESC,这里 ORDER BY 2 是按 SELECT 列表第二项排序,在笔试里这种用序号排序的写法偶尔会出现,要能看懂。
4.4 双重 NOT EXISTS:选修全部课程的两种思路
书面作业第(5)题检索选修了全部课程的学生姓名,这是 SQL 里典型的「除法」操作,最标准也是最难理解的是双重 NOT EXISTS 写法:
SELECT SNAME FROM S WHERE NOT EXISTS ( SELECT * FROM C WHERE NOT EXISTS ( SELECT * FROM SC WHERE S# = S.S# AND C# = C.C# ) );逻辑要从内往外读:最内层查的是「某学生是否选了某门课」,中间层查的是「是否存在一门课这个学生没选」,最外层筛选的是「不存在任何一门课没选」的学生。整体就是双重否定表肯定。这类题理解思路后要多手写几遍,考场上现推很容易卡壳。
4.5 视图与触发器:虚表不存数据
第三章最后还有一道视图题,创建计科系学生信息视图再通过视图改名。视图是虚表,数据库里只存视图定义,不存视图对应的数据。通过视图修改数据,实际修改的是基本表。这道题的考点在于:视图定义来自WHERE Sdept='CS',更新视图里的名字会直接作用到 Student 表,只要更新不违反视图定义的约束就能生效。
5. 安全、完整性与范式避坑:五个高频翻车现场与修复
第四章到第六章的安全权限、完整性约束、关系规范化理论,在考试里经常以选择和填空出现,但也是复习时最容易「背了就忘」的部分。这一章我把常见的错误分成五类,每类都按现象、原因、解决三步写,方便对号入座。
5.1 授权与回收:列级权限的细微差别
第四章第 7 题要求把对 SC 表 GRADE 列的修改权授给用户 ZHAO,正确答案是:
GRANT UPDATE(GRADE) ON TABLE SC TO ZHAO;注意列级授权要写成UPDATE(GRADE),不是GRANT GRADE ON SC TO ZHAO,也不是UPDATE ON SC(GRADE) TO ZHAO。权限的粒度是先确定操作类型,再确定作用在哪些列上,语法是操作类型加括号列名加表名加用户。收回权限用 REVOKE,同样要指定列:
REVOKE UPDATE(XH) ON TABLE STUD FROM ZHAO;题干里有一个干扰项是把FROM ZHAO写成FROM PUBLIC。PUBLIC 表示所有用户,收回指定用户权限不能用 PUBLIC,这两个概念经常被混在一起出题。
5.2 完整性约束的三个层次
完整性保证了数据的正确性和相容性,和安全性是两个方向的概念。安全性防止非法用户做非法操作,完整性防止合法用户输入不合语义的数据。三种完整性约束整理如下:
| 约束类型 | 约束内容 | 违反时的处理 |
|---|---|---|
| 实体完整性 | 主属性不能取空值;主码值必须唯一 | DBMS 拒绝该操作 |
| 参照完整性 | 外码要么是空值,要么是被参照表主码的有效值 | DBMS 拒绝该操作 |
| 用户定义完整性 | 按业务规则限定取值,如成绩 0~100 | DBMS 拒绝该操作 |
选择题里「限制成绩取值 0 到 100」属于用户定义完整性,这类题只要看清是对某个具体字段的取值约束,就不要往实体完整性和参照完整性上选。
5.3 范式判断的操作顺序
关系数据理论整章的核心就是范式判断。正确顺序是:先写函数依赖集合,再找候选码,之后按范式定义逐级判断。判断 1NF 看属性是否可再分;判断 2NF 看是否存在非主属性对候选码的部分函数依赖;判断 3NF 看是否存在非主属性对候选码的传递函数依赖。复合题里,S(Sno, Sname, SD, Sdname, Course, Grade) 的分解过程就是标准模板:先按部分依赖拆成 S1 和 S2,再在 S1 里按传递依赖拆成 S11 和 S12。
5.4 五个高频翻车现场
翻车现象 1:把传递依赖当成部分依赖。第 6 章综合题里 R 有函数依赖「课程名→教师名,教师名→教师地址」,有同学判断为部分依赖,得出 1NF 的结论。原因是没先确认候选码是课程名,课程名没有真子集,不存在部分依赖,真正存在的是课程名到教师地址的传递依赖。解决方法是先写出全部函数依赖,再圈出候选码,之后才谈部分还是传递。
翻车现象 2:参考资料给的候选码可能不是最小超码。第 6 章第三题里,(商店编号,商品编号) 能推出部门编号,(商店编号,部门编号) 能推出负责人,所以 (商店编号,商品编号) 已经能推出全部属性,候选码是 (商店编号,商品编号)。有些资料会把部门编号也写进码里,但加入多余属性的就不是候选码,而是超码。做这类题要按闭包自己推一遍,别盲目信答案。
翻车现象 3:m:n 联系转换时丢掉联系属性。工厂和产品的生产联系里,计划数量是联系属性,转换时放在单独的生产关系里。有同学把它放到产品关系或工厂关系里,导致转换出来的模式语义不对。m:n 联系必然单独成关系,属性只能放这里。
翻车现象 4:授权对象和粒度搞混。GRANT 和 REVOKE 题里,要么把列级权限写错,要么把用户写成 PUBLIC。列级权限必须体现列名,回收时对象要和授权时一致。
翻车现象 5:触发器激活条件记不全。插入、删除、更新会激活触发器,创建不会。表结构变化属于 DDL,触发器监听的是 DML 操作。选择题里问「除了哪一项以外都会激活触发器」,选 CREATE 就对了。
6. 把 PDF 变成自己的复习系统:错题重做与口述检查
这份 PDF 题目量不算特别大,但如果只是做一遍对答案,价值会大打折扣。我备考数据库时把每一章的题都拆成三轮来刷,效果比反复重刷整本好很多。
第一轮按章节顺序做题,选择题填空直接写,简答题先自己组织语言再对照答案,SQL 题不看答案完整写一遍。做完给每道错题打一个标签,标签分三种:概念混淆、写法错误、逻辑没通。第二轮只刷错题标签,概念混淆类重新读知识点,写法错误类把 SQL 重写三遍,逻辑没通类对着答案拆解执行步骤。第三轮做逆向出题——把选择题的选项盖住,只看题干,尝试自己补全正确答案和另外三个错误选项。
以「数据库的基本特点是」这道题为例,逆向出题就变成了简答题:「请说明数据库的基本特点,并说明它与文件系统的主要区别」。答题要点是数据共享、数据结构化、数据独立性、冗余小易扩充、统一管理和控制五条。这样一道选择题能同时复习五六个知识点,复习效率高很多。
我第一次考数据库时只刷选择题,感觉什么都见过,一到手写 SQL 就卡住,GROUP BY 和 HAVING 的顺序想了很久才写出来。从那以后,我每次刷这种章节复习 PDF 都强制走一遍完整流程:选择题用来过概念,SQL 题全部手写,ER 图转换和范式判断按固定步骤口述给自己听。数据库这类课程,看得懂和写得出是两回事,希望帮到你。
本文还有配套的精品资源,点击获取