☰
数据库系统概论复习指南:三级模式、SQL与事务并发核心考点
2026/10/27 11:55:45 网站建设 项目流程

简介:这份完整Word版数据库系统概论期末考试试题,面向高校计算机专业学生及备考数据库原理类课程的读者,用于期末复习自测与知识点查漏补缺。压缩包内共1个doc文档,约170KB,内容按章节组织,覆盖数据库系统基础知识、关系数据库、数据库设计、数据库管理系统、SQL语言、数据安全、事务处理、并发控制与数据库恢复等模块。试题题型包含选择题、填空题、判断题、简答题与应用题,涉及物理数据独立性、候选码、投影与选择运算、视图安全性、封锁机制、事务原子性及无损连接分解等典型考点,并附有部分参考答案与解析思路,便于对照理解概念、梳理答题逻辑。已有3502人学习下载,适合作为考前模拟练习与重点回顾的参考材料。

1. 数据库系统概论:一张从三级模式到事务并发的复习地图

翻开任何一份《数据库系统概论》的期末卷子,你会发现它考的东西高度集中:选择题抠概念边界,填空题抠术语定义,判断题抠反例,大题则几乎固定落在关系代数、SQL、范式分解、ER 转换和并发这几块。很多人复习时按教材章节从头翻,翻到事务隔离级别已经忘了前面的三级模式,效率极低。真正省力的做法是先建立一张地图:数据库这门课其实只有三条主线——数据怎么描述(数据模型、三级模式两级映像、关系模型)、数据怎么操作(关系代数、SQL、视图)、数据怎么管好(完整性、安全性、事务、并发控制、恢复)。前两条线是"静态"的,后一条线是"动态"的,而范式与 ER 转换则是把静态结构做规范化的桥梁。这份试题资料把 2003 到 2005 学年多套期末卷整合在一起,覆盖的正是这三条主线的全部考点。适合已经学过一遍、需要系统串起来查漏补缺的人,也适合刚开始复习、想先看清全局再下手的同学。

2. 数据描述线:三级模式、两级映像与数据独立性

2.1 三级模式结构是整门课的地基

数据库系统的体系结构用三级模式来刻画:外模式(用户视图)、模式(全局逻辑结构)、内模式(物理存储结构)。三者之间靠两级映像连接——外模式/模式映像保证逻辑数据独立性,模式/内模式映像保证物理数据独立性。这两个独立性是选择题的高频陷阱,因为选项会把"应用程序与 DBMS 独立""数据库与 DBMS 独立"这类明显错误的说法混进来。物理数据独立性的准确表述是:应用程序与存储在磁盘上的数据库物理模式相互独立,即内模式改变时,模式和应用程序不必改。逻辑数据独立性则是模式改变时,外模式和应用程序不必改。

梳理下来会发现,数据独立性之所以能成立,本质是"映像"这一层抽象在兜底。考试里凡是问"某层改变,谁不用改",答案永远指向映像上层的对象。把这条规律记住,比死背定义可靠得多。

2.2 数据模型与关系模型的关键术语

数据模型分三层:概念模型(ER 模型)、逻辑模型(关系、层次、网状)、物理模型。关系模型建立在集合论和谓词演算基础上,用二维表表示,这是它区别于其他模型的根本。关系模型里几个术语必须分清:

术语含义易混点
候选码能唯一标识元组的最小属性组可由一个或多个属性组成,不是"至多一个"
主码从候选码中选定的一个一个关系只有一个主码
外码本关系中非码属性,但是另一关系的码取值或为空,或在参照关系中存在
主属性包含在任一候选码中的属性不是"主码中的属性"

候选码那道选择题几乎年年出现,正确项是"可由一个或多个其值能唯一标识该关系模式中任何元组的属性组成"。干扰项"至多由一个属性组成"错在忽略了组合码,"可由多个任意属性组成"错在"任意"二字——候选码的属性必须能唯一标识,不能随便凑。

2.3 关系代数:三类运算的分工

关系代数分传统集合运算(并、交、差、笛卡尔积)和专门关系运算(选择、投影、连接、除)。专门运算里最容易被考的是三者的区分:从表中取出满足条件的属性叫投影(π),取出满足条件的元组叫选择(σ),按共同属性值拼接叫连接。注意投影是纵向切列、选择是横向切行,这个方向感错了,后面写关系代数表达式会全盘皆输。

传统集合运算施加于两个关系时有前提:属性个数必须相等,对应属性值必须取自同一个域。这条在填空题里以"①属性个数必须相等、②相对应的属性值必须取自同一个域"的形式出现,属于送分但也容易漏的点。

提示:等值连接与自然连接的区别是简答题常客。自然连接一定是等值连接,但等值连接不一定是自然连接;自然连接要求相等的分量必须是公共属性,且要去掉重复属性,等值连接不要求公共属性、也不去重复属性。

3. 数据操作线:SQL、视图与关系演算的复习重点

3.1 SQL 的三种语言分类不能混

SQL 按功能分三类:数据定义语言 DDL(CREATE、DROP、ALTER)、数据操纵语言 DML(SELECT、INSERT、UPDATE、DELETE)、数据控制语言 DCL(GRANT、REVOKE)。选择题常问"实现对数据查询、插入、修改、删除的语言叫什么",答案是 DML,不是 DDL。SQL 的两种使用方式是交互式 SQL 和嵌入式 SQL,这个填空点也反复出现。SQL 支持三级模式,视图对应外模式,基本表对应模式,存储文件对应内模式。

3.2 视图:只存定义,不存数据

视图是虚表,从一或多个基本表导出,数据库中只存放视图的定义,不存放视图对应的数据。这句话是选择题和填空题的双料考点。视图的价值有两个:一是逻辑独立性,基本表结构变了可以用视图屏蔽;二是安全性,对不同用户定义不同视图,让机密数据不出现在无权查看者的视图里。资料里给的例子很典型:

-- 建立信息系学生视图,只暴露本系数据 CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept = 'IS'; -- 把查询权限授予用户,配合视图实现存取控制 GRANT SELECT ON TABLE Student TO U1;

第一段用 WHERE 过滤系别,把其他系的数据挡在视图外;第二段用 GRANT 把权限精确到表和操作。两段合起来就是"视图 + 存取控制"保证安全性的完整链路。复习时要把 GRANT/REVOKE 的语法位置记牢:权限在前、ON 表在后、TO 用户收尾。

3.3 关系演算与 SQL 的等价改写

元组关系演算表达式看着吓人,其实套路固定:用{T(1) | (∃U)(∃V)...}的形式,把"存在某个元组满足条件"翻译成量词加谓词。比如检索选修了某老师课程的学生姓名,就是"存在学生元组 U、选课元组 V、课程元组 W,满足连接条件且课程教师等于目标值"。写这类题的关键是先确定结果元组的目数(T(1) 还是 T(2)),再把连接条件逐条用 ∧ 串起来。

SQL 多表查询则要盯住连接条件和过滤条件分开写。资料里"找出程序设计课程成绩 90 分以上学生姓名"给了两种写法:一种是三表连接加 WHERE,另一种是嵌套 IN 子查询。两种都对,但考试时如果题目要求"用 SQL 完成",优先写连接形式,因为阅卷时连接条件清晰、不易被判错。

-- 写法一:三表连接,连接条件与过滤条件分离 SELECT SNAME FROM S, SC, C WHERE S.S# = SC.S# AND SC.C# = C.C# AND SCORE >= 90 AND CNAME = '程序设计';

这段里S.S# = SC.S#和SC.C# = C.C#是连接条件,SCORE >= 90和CNAME = '程序设计'是过滤条件。漏掉任何一个连接条件都会变成笛卡尔积,结果行数爆炸——这是上机和大题都最常见的翻车点。

4. 结构规范化线:函数依赖、范式分解与 ER 转换

4.1 函数依赖与 Armstrong 公理

函数依赖是范式理论的骨架。基本概念要分清:完全函数依赖、部分函数依赖、传递函数依赖。Armstrong 公理三条——自反律、增广律、传递律,是证明其他规则的基础。资料里用公理证明合并规则的写法值得抄下来:若 X→Y、X→Z,则由增广律得 X→XY、XY→ZY,再由传递律得 X→YZ。证明题的关键是每一步都标明用了哪条公理,不能跳步。

闭包计算是求候选码的前置技能。计算 X+ 的流程是:初始 X(0)=X,反复用 F 中的函数依赖往右扩充,直到不再变化。比如 F={A→BC, CD→E, B→D, E→A},求 B+:B(0)=B,由 B→D 得 B(1)=BD,再无新属性可加,故 B+=BD。这个"迭代到不动点"的思路要形成肌肉记忆。

4.2 求候选码的快捷判断

候选码只可能由函数依赖左边的属性组成。资料里给了一个很实用的排除法:在 F 中左右都不出现的属性,必包含在候选码中(因为只有它能函数决定自己);只在左边出现的属性也必包含;只在右边出现的属性必不包含。判断题里"左右都不出现的属性必不包含在候选码中"是错的,正确说法是必包含——这个反直觉点几乎每年都有人栽。

求候选码时,先按上述规则锁定必含属性,再逐个尝试加入其他属性,算闭包看是否等于全集 U。资料中 R(U,F)、U={A,B,C,D,E}、F={A→BC, CD→E, B→D, E→A} 的候选码是 A、BC、CD、E 四个,逐个验证闭包都等于 ABCDE,且去掉任一属性后闭包不再等于全集,才满足"最小性"。

4.3 范式分解:从 1NF 到 BCNF 的逐步拆解

范式的判定链条是:1NF 要求属性不可再分;2NF 在 1NF 基础上消除非主属性对候选码的部分函数依赖;3NF 在 2NF 基础上消除非主属性对候选码的传递函数依赖;BCNF 要求每个决定因素都包含候选码。资料里职工日产量那个综合题是标准模板:

R(职工编号, 日期, 日产量, 车间编号, 车间主任) FD: (职工编号,日期)→日产量, 职工编号→车间编号, 车间编号→车间主任 关键码: (职工编号, 日期) 分解到 2NF(消除部分依赖): R1(职工编号, 车间编号, 车间主任) R2(职工编号, 日期, 日产量) 分解到 3NF(消除传递依赖 职工编号→车间编号→车间主任): R11(职工编号, 车间编号) R12(车间编号, 车间主任) R2(职工编号, 日期, 日产量)

每一步都要写清"消除了什么类型的函数依赖",这是评分点。R1 里职工编号→车间编号、车间编号→车间主任,于是职工编号→车间主任是传递依赖,拆成 R11 和 R12 后每个决定因素都是候选码,达到 3NF 也满足 BCNF。注意 3NF 只约束非主属性,BCNF 约束所有属性,这是两者最本质的差别。

4.4 ER 图转关系模型的规则与主外键计数

ER 转关系模型的规则可以浓缩成三句话:每个实体型转一个关系模式;1:N 联系把 1 端的主键放进 N 端作外键;M:N 联系单独转一个关系模式,主键是两端主键的组合。M:N:P 三元联系同理,单独成表,主键是三端主键的组合。

资料里车辆管理系统的综合题问"主键和外键的总数",这类计数题最容易错。方法是:先数关系模式个数(7 个实体 + 1 个 M:N + 2 个 M:N:P = 10 个),主键数等于关系模式数(每个模式一个主键),外键数则逐个模式数参照关系。10 个主键、13 个外键这个结果,靠的是把每个外键列都标出来再累加,不能凭感觉估。

注意:无损连接分解的判定用表格法(Chase 算法)。初始表每行对应一个子模式、每列对应一个属性,有该属性的填 a_i,没有的填 b_ij;然后反复用函数依赖把 b 改成 a,若最终某行全是 a,则分解无损。资料里 R1(ABC)、R2(CD)、R3(DE) 的分解最终第一行变成全 a,判定为无损连接。

5. 数据管控线:安全性、完整性、事务与并发恢复

5.1 安全性 vs 完整性:一字之差,方向相反

安全性和完整性是选择题最爱设的对照。安全性是保护数据库防止不合法使用造成泄露和破坏,主要手段是存取控制(授权);完整性是保证数据的正确性和相容性,主要手段是完整性约束(实体完整性、参照完整性、用户定义完整性)。一个防"外人乱来",一个防"数据本身不对",方向完全不同。授权编译系统和合法性检查机制一起组成安全性子系统,这个填空点要记。

参照完整性的含义用例子最好记:成绩表中课程号是外码,它的值要么为空,要么必须在课程表的课程号中找得到。找不到就说明这条选课记录指向了一门不存在的课,数据不一致。

5.2 事务的 ACID 与并发三大问题

事务是 DBMS 的基本工作单位,是用户定义的一组逻辑一致的程序序列。ACID 四个特性要能对号入座:原子性指操作要么都做要么都不做;一致性指数据库从一个一致状态变到另一个一致状态;隔离性指并发事务之间互不干扰;持久性指提交后改变永久。选择题常把四个定义打乱让你选,比如"事务一旦提交对数据库的改变是永久的"对应持久性,不是原子性。

并发不加控制会带来三类问题:丢失修改、不可重复读、读"脏"数据。资料里给了两个并发操作图,判断方法看时间线:T1 读 A 后 T2 也读 A 并写回,T1 再写回覆盖了 T2 的结果,就是丢失修改;T1 读了 A,T2 修改 A 并提交,T1 再读发现值变了,就是不可重复读;T1 修改 A 未提交,T2 读到这个中间值,T1 回滚,T2 读的就是脏数据。把图里的读写顺序画成时间轴,三类问题一眼可辨。

5.3 封锁机制与两段锁协议

封锁是并发控制的主要方法。共享锁 S 锁:加了 S 锁的事务只能读不能改,其他事务还能加 S 锁但不能加 X 锁。排他锁 X 锁:加了 X 锁的事务可读可改,其他事务什么锁都加不了。这道选择题的正确答案是"事务 T 可以读 A 但不能修改 A,其它事务只能再对 A 加 S 锁,而不能加 X 锁"。

可串行化是并发调度的正确性标准。这里有个经典反直觉点:视图可串行化的调度不一定冲突可串行化。冲突可串行化是视图可串行化的充分条件而非必要条件,资料里判断题正是拿这个做文章,结论是"错误",并举了视图可串行化但非冲突可串行化的调度作为反例。复习时要把这个包含关系记死:冲突可串行化 ⊂ 视图可串行化。

5.4 故障类型与恢复手段

数据库运行中可能产生的故障有三类:事务故障(Transaction failure)、系统故障(System crash)、磁盘故障(Disk failure)。系统故障是系统停止运行、内存信息丢失但外存数据不受影响,这个定义在填空题里反复考。恢复的手段包括事务日志、检查点和数据备份:日志记录每个事务对数据的修改,用于 UNDO 未提交事务和 REDO 已提交事务;检查点减少恢复时需要扫描的日志量;备份应对磁盘介质故障。提交 COMMIT 是把更新写回磁盘、事务正常结束,回滚 ROLLBACK 是撤消所有已完成更新、回到事务开始状态,这两个操作的含义要能用一句话说清。

6. 查漏补缺:一份可执行的复习清单与自测方法

复习到这一步,知识点已经铺开,剩下的是把"看过"变成"写得出"。我的做法是把整门课压缩成一张自测表,每行一个考点,右边留空,合上资料默写,写不出来的打勾,第二轮只攻打勾项。下面这张表按错误率从高到低排,你可以直接拿去用:

考点自测动作常见失分
物理/逻辑数据独立性说出哪层变、谁不改混淆两级映像方向
候选码定义判断"至多一个属性"对错忽略组合码
投影 vs 选择各写一个关系代数式行列方向搞反
视图存什么填空"只存放____"答成"数据"
2NF/3NF/BCNF 判定给一个 FD 集判范式漏写消除的依赖类型
无损连接判定画 Chase 表初始表填错
S 锁/X 锁兼容性画相容矩阵记反读写权限
三类并发问题看时间线判类型丢失修改与脏读混淆
冲突 vs 视图可串行化说包含关系认为两者等价
故障三分类对号入座系统故障与事务故障混

默写之外,还有两个动作值得强制走一遍。第一,每道大题写完先回头检查连接条件——SQL 多表查询漏一个S.S# = SC.S#就是笛卡尔积,范式分解漏写"消除部分依赖"就丢步骤分,这两个是血泪经验里最高频的翻车点。第二,判断题遇到"一定""必"这类绝对词先找反例,资料里"视图可串行化一定冲突可串行化""左右都不出现的属性必不包含在候选码中"两道题都是靠反例翻盘的,绝对化表述在数据库判断题里十有八九是错的。

最后说个习惯:我复习范式分解时,每拆一步都在旁边标注"这一步消除了什么依赖、为什么此时还不是下一范式",而不是只写结果。因为考试评分看的是过程,而过程写清楚的前提是你真的理解每一级范式在防什么。从那以后我每次做分解题都强制走一遍"判码—找依赖—拆—验范式"四步,再没在步骤分上栽过。这份试题资料把多套卷子的选择、填空、判断、简答、综合题都收在一起,正好可以按上面的清单逐项对照练手,把地图上的每个节点都落到笔头。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询