简介:这份资源是面向高校计算机专业学生的《数据库系统概论》期末复习试题文档,适用于课程备考、知识点自测与查漏补缺。内容覆盖数据库系统基础知识、关系数据库与关系代数、SQL语言、数据库设计流程、DBMS功能组成、数据安全与事务处理、并发控制及数据库恢复等核心章节,题型包含选择题、填空题、判断题、简答题与应用题,并附有参考答案与解析思路。资源包共1个doc文件,约170KB,为完整Word版试题,排版清晰、便于打印与批注。已有3502人学习下载,适合需要系统梳理考点、熟悉考试题型与检验掌握程度的读者使用。通过逐题练习,可加深对物理数据独立性、候选码、投影与选择运算、封锁机制、事务ACID特性等概念的理解,并借助简答与应用题训练外码判定、视图授权、无损连接分解等综合解题能力。
1. 数据库系统概论:一张从物理独立性铺到事务并发的复习地图
翻开任何一份《数据库系统概论》的期末卷子,你会发现它考的不是零散名词,而是一条完整的链路:数据怎么存(物理独立性)、怎么查(关系代数与 SQL)、怎么设计(E-R 到关系模式)、怎么保证不出乱子(完整性、安全性、事务与封锁)。这条链路里,最容易被低估的是前半段的概念辨析,最容易翻车的是后半段的范式分解和并发判断。很多人复习时把 SQL 写得滚瓜烂熟,却在“物理数据独立性到底独立了谁”这种选择题上丢分,血泪经验就是:这门课的分数分布很均匀,任何一个模块塌方都会拖垮总分。这份试题资料把选择题、填空题、判断题、简答题、应用题、综合题六种题型都覆盖到了,正好可以当作一张知识地图来用——先看清整体骨架,再逐块填肉。下面按模块拆开梳理,最后落到一份能直接照着走的复习清单。
2. 基础概念与三级模式:物理独立性、DBMS 与数据独立性
2.1 物理数据独立性与逻辑数据独立性到底独立了谁
这是整门课第一个高频易混点。物理数据独立性指的是应用程序与存储在磁盘上的数据库物理模式相互独立,也就是当存储结构、存取方法、索引方式改变时,全局逻辑结构和应用程序不用改。逻辑数据独立性则是全局逻辑结构改变时,用户视图和应用程序不用改。两者常被放在同一道选择题里互相干扰,判断的关键是看“变的是哪一层”:变内模式对应物理独立性,变概念模式对应逻辑数据独立性。
数据库系统的特点可以归成一句话记忆:数据共享、数据独立、减少数据冗余、避免数据不一致、加强数据保护。这五点几乎每年都以选择题或填空题出现,其中“数据共享”是最根本的出发点,其余四点都是共享带来的收益或必须配套的保障。
DBMS 的功能要按语言分类记牢:DDL 负责定义(建表、建视图、建索引),DML 负责操纵(查询、插入、修改、删除),DCL 负责控制(授权、回收权限)。题目里问“实现对数据查询、插入、修改、删除的语言”,答案就是 DML,不要被“数据管理语言”这种干扰项带偏。
2.2 三级模式与两级映像的对应关系
三级模式是外模式、概念模式、内模式,两级映像是外模式/概念模式映像和概念模式/内模式映像。前者保证逻辑数据独立性,后者保证物理数据独立性。复习时建议画一张三层结构图,把“哪级映像对应哪种独立性”标死在图上,考场上就不需要现场推理。
提示:判断题里常出现“视图可串行化的调度一定也是冲突可串行化的调度”,这是错的。视图可串行化是比冲突可串行化更宽的概念,存在视图可串行但非冲突可串行的调度,答题时要能举出反例方向,而不是只写“错误”两个字。
2.3 数据管理三阶段与数据库系统的核心
数据管理经历人工管理、文件系统、数据库系统三个阶段,数据独立性最高的是数据库系统阶段。数据库系统的核心是数据库管理系统,不是数据库本身,这个点几乎每年都考,属于送分题但错的人不少。数据库是长期存储在计算机内、有组织、可共享的数据集合,强调“长期存储”“有组织”“可共享”三个限定词,简答题按这三个词展开就能拿分。
3. 关系模型与关系运算:候选码、投影选择连接与 SQL 落地
3.1 候选码、主码与外码的判定
候选码的定义要背准:可由一个或多个其值能唯一标识该关系模式中任何元组的属性组成。注意“一个或多个”和“唯一标识”两个关键词,选项里“至多由一个属性组成”“必须由多个属性组成”都是典型干扰项。外码的定义是:关系模式 R 中属性或属性组 X 并非 R 的码,但 X 是另一个关系模式的码,则 X 是 R 的外码。学生库里的经典例子是 SC 关系中 SNO 参照 STUDENT、CNO 参照 COURSE,答简答题时把这个例子写出来基本满分。
求候选码有一个很实用的技巧:如果属性 X 在函数依赖的左右都不出现,则候选码中必包含 X,因为只有 X 能函数决定 X。判断题里常把它改成“必不包含 X”来设陷阱,看到就要警觉。
3.2 关系代数专门运算:投影、选择、连接的区别
专门的关系运算有三个:投影是从表中取出满足条件的属性(列),选择是选出满足条件的元组(行),连接是把两个关系中具有共同属性值的元组连成新表。记忆口诀是“投影取列、选择取行、连接拼表”。等值连接与自然连接的区别是简答常客:自然连接一定是等值连接,但等值连接不一定是自然连接;自然连接要求相等的分量必须是公共属性并去掉重复属性,等值连接不要求公共属性也不去重。
传统的集合运算“并、交、差”施加于两个关系时有两个前提:属性个数必须相等,相对应的属性值必须取自同一个域。这两条填空几乎原样出现,属于必背。
3.3 SQL 的两种使用方式与典型查询写法
SQL 具有交互式 SQL 和嵌入式 SQL 两种使用方式,是关系数据库语言。数据操纵语句里 SELECT 使用最频繁。复习时把几个典型查询写成模板,考场上直接套:
-- 检索比“王华”年龄大的学生姓名、年龄、性别(嵌套子查询) SELECT SN, AGE, SEX FROM S WHERE AGE > (SELECT AGE FROM S WHERE SN = '王华'); -- 检索选修 C2 课程中成绩最高的学生学号 SELECT S# FROM SC WHERE C# = 'C2' AND GRADE = (SELECT MAX(GRADE) FROM SC WHERE C# = 'C2'); -- 检索选修四门课程的学生总成绩(分组 + having 过滤) SELECT S#, SUM(GRADE) FROM SC GROUP BY S# HAVING COUNT(C#) = 4;第一段是相关子查询的典型结构,内层依赖外层比较值;第二段用聚合函数配合等值条件找最高分,注意 MAX 只作用于同课程;第三段的关键是 HAVING 作用于分组之后,COUNT 统计的是选课门数而不是成绩。参数上唯一要小心的是字符串常量的引号和列名大小写,考试手写时写清楚即可。
3.4 关系演算与关系代数的等价表达
元组关系演算表达式形如{T(1) | (∃U)(∃V)(...) },本质是把“要找什么”写成谓词逻辑。复习时不必追求写得多漂亮,抓住三点:结果元组的列数、存在量词绑定的关系、连接条件用等号串起来。比如检索选修了某老师课程的学生姓名,就是把 S、SC、C 三个关系用学号、课程号串起来,再加教师名条件。关系代数和 SQL 能互译的题,优先写 SQL,再回头补关系代数表达式,正确率更高。
4. 数据库设计与规范化:E-R 转换、函数依赖与范式分解
4.1 E-R 图转关系模型的规则与主外键计数
E-R 图转换有三条基本规则:每个实体类型转成一个关系模式;一个 1:N 联系可以合并到 N 端实体的关系模式中,把 1 端的主码作为外码;一个 M:N 联系必须单独转成一个关系模式,主码是两端实体主码的组合。M:N:P 三元联系同理单独成表,主码是三端主码的组合。
主键和外键的计数是综合题里的送分小问,但容易数漏。方法是:每个关系模式一个主键,实体数加联系数就是主键总数;外键则逐个关系模式看它引用了谁,每引用一个主码算一个外键。以车辆管理那类 ER 图为例,7 个实体加 3 个多联系共 10 个关系模式,主键 10 个,外键要顺着每个联系的两端或三端逐一数,最后得到 13 个。数的时候建议在草稿上列表打勾,不要心算。
4.2 函数依赖、闭包与 Armstrong 公理
函数依赖是规范化的地基。Armstrong 公理三条:自反律、增广律、传递律。合并规则“若 X→Z、X→Y,则 X→YZ”的证明就是两次增广加一次传递:由 X→Y 得 X→XY,由 X→Z 得 XY→ZY,再由传递律得 X→YZ。这个证明过程要能默写。
闭包计算是必考技能,方法是迭代:从 X 出发,反复扫描 F 中左部已被包含的依赖,把右部并入,直到不再增长。例如 F={D→G, C→A, CD→E, A→B},则 D+=DG,(AC)+=ABC,(ACD)+=ABCDEG。计算时每一步都写出来,既拿过程分又避免漏项。
4.3 1NF 到 BCNF 的分解路径
范式的判断顺序是:先找候选码,再区分主属性和非主属性,然后看非主属性对码的依赖类型。1NF 要求属性不可再分;2NF 要求消除非主属性对码的部分函数依赖;3NF 要求消除非主属性对码的传递函数依赖;BCNF 要求所有函数依赖的决定因素都包含候选码。
以职工日产量那个经典模式 R(职工编号,日期,日产量,车间编号,车间主任)为例,基本 FD 是(职工编号,日期)→日产量、职工编号→车间编号、车间编号→车间主任,关键码是(职工编号,日期)。因为存在职工编号→车间编号这种局部依赖,R 不是 2NF,分解为 R1(职工编号,车间编号,车间主任)和 R2(职工编号,日期,日产量)。R1 中又有职工编号→车间编号、车间编号→车间主任的传递依赖,再拆成 R11(职工编号,车间编号)和 R12(车间编号,车间主任),最终得到 3NF 模式集。
注意:分解到 BCNF 时,每一步都要写明“消除了哪类函数依赖”,只写结果不写理由会丢过程分。另外,分解后要检查是否保持无损连接,用表格法逐列填 a 符号,能全填成 a 才是无损。
4.4 无损连接判定的表格法
无损连接判定用初始二维表:每个子模式一行,每个属性一列,子模式含该属性填 a 下标,不含填 b 下标。然后按函数依赖反复修改:若某依赖左部各列在若干行上相同,则把这些行右部列改成一致(优先改 a)。最终若某一行全是 a,则分解无损。这个方法的易错点是改 b 时要统一成同一个符号,以及依赖要反复扫描到表不再变化为止。
5. 事务、并发控制与恢复:ACID、封锁与故障类型
5.1 事务的 ACID 与并发三类问题
事务的原子性指事务中所有操作要么都做要么都不做;一致性指事务使数据库从一个一致状态变到另一个一致状态;隔离性指一个事务内部的操作及使用的数据对并发其他事务是隔离的;持久性指事务一旦提交,对数据库的改变是永久的。四个特性各对应一句定义,选择题常把定义互换来设陷阱。
并发操作不加控制会带来数据不一致问题,具体分三类:丢失修改、不能重复读、读脏数据。判断给图题时看时间线:两个事务都读同一数据再各自写回,后写的覆盖先写的,是丢失修改;一个事务读后另一个事务修改并提交,前者再读发现变了,是不能重复读;读到了别的事务尚未提交后来又回滚的数据,是读脏数据。
5.2 封锁机制与 S 锁 X 锁的相容性
封锁是并发控制的主要方法。S 锁是共享锁,事务 T 对 A 加 S 锁后可以读 A 但不能修改 A,其他事务只能再对 A 加 S 锁而不能加 X 锁。X 锁是排他锁,加了之后其他事务既不能加 S 也不能加 X。相容矩阵要背熟:S 与 S 相容,S 与 X 不相容,X 与 X 不相容。选择题里“加 S 锁后能否修改”是高频陷阱,答案永远是不能。
封锁会带来活锁和死锁。活锁用先来先服务策略解决,死锁用预防(一次封锁法、顺序封锁法)或诊断解除(超时法、等待图法)解决。这部分常以简答或填空出现,答出方法名加一句解释即可。
5.3 故障类型与恢复策略
数据库运行中可能产生的故障有三类:事务故障、系统故障、磁盘故障。系统故障是系统停止运行、内存信息丢失但外存数据不受影响的情况,恢复靠日志和检查点,撤销未提交事务、重做已提交事务。磁盘故障靠数据备份加日志重做。恢复的基本单位是事务,依据是日志文件,原则是“先写日志后写数据库”。
授权和合法性检查机制一起组成安全性子系统;完整性指数据的正确性和相容性;安全性指保护数据库防止不合法使用造成泄露和破坏。安全性靠存取控制和视图机制,完整性靠实体完整性和参照完整性约束。这两组概念在选择题里经常对调,记法是“安全防外人、完整防错数”。
6. 易错点清单:五处最容易翻车的地方
易错点一:把物理数据独立性和逻辑数据独立性搞反。为什么漏:两个定义句式几乎一样,只差“物理模式”和“逻辑结构”几个字,快速阅读时容易滑过去。怎么补:记死“内模式变→物理独立性,概念模式变→逻辑独立性”,做题时先问“变的是哪一层”再选答案。
易错点二:候选码判定时把“左右都不出现的属性”排除掉。为什么漏:直觉上觉得没参与函数依赖的属性无关紧要,实际上它必须出现在候选码里,否则无法函数决定自身。怎么补:遇到求候选码的题,先把所有属性按“只在左部、只在右部、两边都有、两边都无”分类,两边都无的属性直接放进候选码候选集。
易错点三:范式分解只写结果不写消除的依赖类型。为什么漏:复习时只看最终模式集,忽略了过程分。怎么补:每拆一步都写一句“消除非主属性对码的部分函数依赖”或“消除传递函数依赖”,并注明当前达到第几范式。
易错点四:S 锁与 X 锁的相容性记混。为什么漏:S 和 X 的字母含义不直观,靠死记容易串。怎么补:用一句话锚定“共享锁只能读、排他锁独占写,读读可共存、读写和写写都不行”,再画 2×2 相容矩阵默写一遍。
易错点五:无损连接判定时依赖没有反复扫描。为什么漏:只扫一遍 F 就下结论,漏掉后续依赖被触发后的连锁修改。怎么补:把“反复扫描直到表不再变化”写成固定步骤,每次修改后从头再扫,最后检查是否出现全 a 行。
7. 复习清单:从知识地图到查漏补缺的落地方法
复习这门课,我自己的习惯是先按题型倒推知识点,而不是按章节顺序从头看。选择题和填空题覆盖的是概念辨析,重点在物理独立性、候选码、S/X 锁、故障类型这几处;判断题考的是边界条件,视图可串行化与冲突可串行化的关系、候选码中不出现属性的处理都是常客;简答题集中在数据独立性、外码举例、视图与授权保安全、等值连接与自然连接的区别;应用题和综合题则是 SQL 编写、闭包计算、范式分解、E-R 转换四件套。
下面这张表可以当作查漏补缺的对照单,每复习完一块就打勾,错过的题在备注里写一句错因:
| 模块 | 必会动作 | 自检标准 |
|---|---|---|
| 基础概念 | 默写三级模式与两级映像对应关系 | 能说清哪种映像保哪种独立性 |
| 关系运算 | 手写投影、选择、连接三类查询 | SQL 与关系代数能互译 |
| 规范化 | 求闭包、判范式、写分解过程 | 每步注明消除的依赖类型 |
| 事务并发 | 画相容矩阵、判三类并发问题 | 看时间线能说出问题名称 |
| 恢复安全 | 区分安全性、完整性、恢复 | 能对应到具体措施 |
具体操作上,我建议每天做三件事:第一,挑五道选择题限时做,错题当场回教材定位概念,不隔夜;第二,手写一道综合题,从 E-R 图到关系模式再到主外键计数完整走一遍,写完对照答案只看过程分丢在哪;第三,把当天错的点用一句话记在一张纸上,第二天开头先看这张纸再看新内容。闭包和范式分解这类计算题,光看答案没用,必须自己动笔算到不再变化为止,算错一次比看十遍都记得牢。
从那以后我每次复习这类考试,都强制先做一张知识地图再刷题,地图上标出每个模块的分值权重和我的薄弱点,刷题只刷薄弱点对应的题型,不再平均用力。希望这份梳理能帮到你,把散落的知识点串成一条能走通的线。
本文还有配套的精品资源,点击获取