☰
数据库原理闭环训练:从范式分解到事务调度的实战题库
2026/11/4 3:03:37 网站建设 项目流程

简介:本资源是一套面向高校计算机及相关专业学生的《数据库系统概论》课程期末复习备考资料,聚焦数据库核心理论与实践能力检验。试题覆盖物理数据独立性、关系模型与代数运算、SQL语法、数据库设计流程、DBMS功能模块(DDL/DML/DCL)、事务ACID特性、并发控制(封锁机制)及数据库恢复策略等关键知识点,题型包括选择、填空、判断、简答与应用题,具备典型教学考核深度与广度。资源为单个Word文档(.doc格式),文件大小170KB,内容完整排版规范,可直接打印或电子学习。目前已有3505人下载学习,适用于考前自测、知识点查漏补缺、教师组卷参考及SQL与事务原理的案例化理解。

1. 这不是一份普通考卷:它是一套能帮你把《数据库系统概论》从“背了就忘”拉回“推导即得”的闭环训练题

你有没有试过:翻完王珊那本厚砖头教材,合上书——脑子里只剩“范式”“封锁”“视图”几个词在飘;做课后习题时卡在“为什么这个分解是无损的”,查答案只看到一行“构造初始表→应用FD→全变a”,却不知道a1/a2/a3到底代表什么、哪一步错了就满盘皆输;期末前突击刷题,发现三套往年卷子反复出现同一类陷阱:比如判断“view可串行化是否必为冲突可串行化”,选项里藏着Schedule 9那个经典反例,但教材里根本没标页码,你只能干瞪眼。这份(完整word版)数据库系统概论期末考试试题,恰恰是从某高校近二十年真实教学沉淀中拆出来的“问题富矿”——它不按章节顺序堆砌知识点,而是用127道题(含选择、填空、判断、简答、应用、综合六大类)把“物理数据独立性”“候选码求解”“ER转关系”“BCNF分解路径”“事务调度判定”这些抽象概念,全部钉死在具体字段名(SNO/CNO/GRADE)、真实函数依赖(AB→C, C→D)、手算步骤(X⁰→X¹→X²)和易错边界(外码是否允许为空?自然连接要不要去重?)上。它适合两类人:一是正在啃教材但总在“理解-遗忘-再理解”循环里打转的学生,二是带实验课的助教或出卷老师——你需要的不是标准答案,而是每道题背后暴露的认知断点、计算盲区和命题逻辑。它不教你“什么是ACID”,它逼你亲手在T1/T2并发图里圈出“脏读”发生的位置;它不罗列“3NF定义”,它让你对着STUDENT(S#,SNAME,SDEPT,MNAME,CNAME,GRADE)这个真实关系,一步步撕开SDEPT→MNAME这个传递依赖的皮,直到看见BCNF分解后R11(S#,SNAME,SDEPT)和R12(SDEPT,MNAME)如何各司其职。这才是数据库原理的正确打开方式:所有理论必须落回笔尖的演算、光标的删改、Word里手动对齐的a1a2表格。

2. 从选择题到综合题:这套题如何用“错误选项”反向构建你的知识骨架

2.1 选择题不是单选游戏,而是命题人埋下的认知路标

看这道高频题(2004年卷第一题第1题):“数据库系统中,物理数据独立性是指____。”四个选项里,C选项“应用程序与存储在磁盘上数据库的物理模式是相互独立的”是正确答案,但A、B、D三个错误选项绝非随意编排:

  • A选项“数据库与数据库管理系统的相互独立”——这是在混淆系统架构层级,暗示你可能没理清DBMS作为软件层如何屏蔽底层存储细节;
  • B选项“应用程序与DBMS的相互独立”——这是偷换逻辑独立性概念,提醒你物理独立性针对的是“磁盘存储结构”,而逻辑独立性才管“DBMS提供的逻辑视图”;
  • D选项“应用程序与数据库中数据的逻辑结构相互独立”——这直接指向逻辑数据独立性的定义,命题人故意把它塞进物理独立性的题干里,逼你对比二者边界。

提示:当你在Word里做这套题时,别急着划C。先用红色字体把A/B/D三个错误选项的关键词(如“DBMS”“逻辑结构”)单独摘出来,旁边批注:“此处混淆了XX概念与XX概念”。你会发现,整套题的15道选择题,错误选项共同织成一张网——网眼就是你最容易滑脱的知识缝隙。

2.2 填空题的“空”不是留白,而是强制你调用底层机制

填空题第2题:“指出下列缩写的含义:DBMS ①____、DBA ②____”。表面考记忆,实则检验你是否理解这两个角色在数据流中的位置。DBMS(数据库管理系统)不是静态名词,它是动态引擎:当SQL语句SELECT * FROM STUDENT WHERE AGE>20执行时,DBMS要完成词法分析→语法检查→查询优化→执行计划生成→缓冲区管理→磁盘I/O调度这一整条链路;而DBA(数据库管理员)是这条链路上的“守门人”,他决定谁能在GRANT SELECT ON TABLE Student TO U1里填入U1,也决定CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS'这个视图能否被创建。所以填空时,别只写“数据库管理系统”“数据库管理员”八个字。在Word文档的批注功能里,为①添加一条注释:“负责数据定义(DDL)、数据操纵(DML)、数据控制(DCL)的软件系统,核心是事务管理和并发控制”;为②添加:“拥有最高权限的用户,负责安全性设置、备份恢复、性能调优等运维任务”。这种填空,填的是角色背后的权力与责任。

2.3 判断题的“证明/举反例”是检验你是否真懂定义边界的手术刀

第三大题判断题第1题:“view可串行化的调度一定也是冲突可串行化的调度”。答案明确是“错误”,但关键在后面的说明:“例如581页Schedule 9是view serializable但不是conflict serializable”。这里藏着一个致命陷阱:教材中Schedule 9的图示往往省略了事务内部操作的读写依赖箭头,导致初学者误以为“只要结果一致就是冲突可串行化”。而本题强制你回到定义源头——冲突可串行化要求所有冲突操作(Read-Write/Write-Read/Write-Write)的相对顺序与某个串行调度完全相同;view可串行化只要求每个事务的读值来源和最终写值结果与某个串行调度一致。用Word打开试题,在Schedule 9图旁插入一个文本框,手动画出T1读A、T2写A、T1再读A这条依赖链,标出“此处T1第二次读A的值来自T2的写,但T1与T2的RW操作未形成冲突序列”,你就瞬间看清了两个概念的分水岭。这种判断题,不做满页批注,等于没做。

2.4 简答题的“举例说明”是逼你把抽象术语焊接到真实表结构上

第四大题第2小题:“什么是关系的外码?并举例说明。”标准答案提到SC表中SNO参照STUDENT,CNO参照COURSE。但如果你只抄这个,下次遇到R1(A,B,C), R2(C,D), R3(D,E)的分解题,依然会懵——因为没建立“外码=被参照表主码的镜像”这个映射。正确的做法是:在Word里新建一个表格,左边列“概念术语”,右边列“本题实例”,填入:

概念术语本题实例
外码(Foreign Key)SC表的SNO字段
被参照表(Referenced Table)STUDENT表
被参照表主码(Primary Key of Referenced Table)STUDENT表的SNO
外码约束效果插入SC记录时,SNO值必须存在于STUDENT.SNO中,否则报错
再往下延伸一栏:“若违反此约束,DBMS报错信息通常为:ERROR 1452 (HY000): Cannot add or update a child row: a foreign key constraint fails”。把术语、实例、错误场景三者钉在一起,外码就不再是纸面概念,而是你写INSERT语句时心里悬着的那根弦。

2.5 应用题的SQL写法暴露你是否真掌握关系代数到SQL的映射规则

第五大题第2题第(3)小题:“检索学生姓名及其所选修课程的课程号和成绩”。参考答案给的是SELECT SN, C#, GRADE FROM S,SC WHERE S.S#=SC.S#。但这就是典型的“能跑通但不知所以然”的写法。真正要练的是:

  1. 先在纸上画出关系代数表达式:π_{SN,C#,GRADE}(σ_{S.S#=SC.S#}(S × SC));
  2. 对照SQL,确认FROM S,SC对应笛卡尔积S × SC,WHERE S.S#=SC.S#对应选择操作σ,SELECT SN,C#,GRADE对应投影π;
  3. 然后立刻质疑:如果题目改成“检索所有学生(包括未选课者)的姓名、课程号、成绩”,原SQL就失效了——因为S,SC是内连接,必须匹配。此时必须升级为左外连接:SELECT S.SN, SC.C#, SC.GRADE FROM S LEFT JOIN SC ON S.S#=SC.S#。

注意:在Word文档中,把原SQL代码块粘贴进去后,在下方用蓝色字体写:“⚠️ 此写法隐含INNER JOIN语义。若需包含NULL值(如未选课学生),必须显式使用LEFT JOIN并处理NULL”。这种标注,才是把SQL从“抄答案”变成“掌舵权”的关键一步。

3. 避坑指南:那些让90%考生在Word里反复删改、最终放弃的手算雷区

3.1 候选码求解:别被“所有属性组合”吓住,用闭包迭代法暴力破局

现象:看到R(U,F),U={A,B,C,D,E},F={A→BC, CD→E, B→D, E→A},就试图穷举AB/AC/AD...等所有组合,算到第三组就崩溃。
原因:没掌握候选码的本质——能唯一确定所有属性的最小属性集,且闭包计算有固定路径。
解决:按试题中2003年卷第3题的解法走:

  1. 先筛出“只出现在FD左边”的属性(这里是A,B,C,D,E都出现过,跳过);
  2. 再筛出“只出现在FD右边”的属性(如BC在A→BC右边,但B也在B→D左边,故不纯);
  3. 最后对每个可能属性集(从单属性开始)计算闭包:
令 X = {A} X⁰ = A X¹ = A ∪ BC = ABC (因A→BC) X² = ABC ∪ D = ABCD (因B→D) X³ = ABCD ∪ E = ABCDE (因CD→E) → A⁺ = ABCDE = U,故A是候选码

同理验证E、CD、BC。重点在于:每次迭代只加新推导出的属性,且必须写清依据(如“因B→D”)。在Word里,用不同颜色高亮每次Xⁿ的结果,比用脑子记强十倍。

3.2 无损连接分解:二维表里的a1/a2不是编号,是属性归属的身份证

现象:做“R1(ABC),R2(CD),R3(DE)是否无损”题时,构造初始表后,面对R1:a1 a2 a3 b14 b15这样的行,不知道b14该不该被C→D更新成a4。
原因:混淆了“bij表示Ri中第j个属性未在Rj中出现”这个规则。b14的下标1代表R1行,4代表第4个属性(D),因D不在R1(ABC)中,故填b14;当应用C→D时,需找C值相同的行(R1和R2的C列都是a3),将R1的D列(b14)和R2的D列(a4)统一为a4。
解决:在Word表格里,为每个b格加批注:“b14:R1行D列,因D∉R1,初始填b14;后因R1与R2的C列同为a3,且C→D,故b14←a4”。记住口诀:“b格是临时工,a格是正式编,FD一来,b格立刻转正”。

3.3 ER图转关系模型:M:N联系的“中间表”不是可选项,是强制项

现象:看到“学生选课”是M:N联系,却想当然地在学生表加“课程号”字段,或在课程表加“学号”字段。
原因:没吃透M:N联系的本质——它描述的是两个实体间多对多的关联事实,必须独立建表存储。
解决:严格按试题2003年卷第二题答案执行:

  • 学生实体 →学生(学号,姓名,性别,年龄,单位名)
  • 课程实体 →课程(课程编号,课程名,单位名)
  • M:N联系“选修” →选修(学号,课程编号)(主键为双字段组合)
    在Word里,用红色方框圈出“选修”表,并标注:“⚠️ 此表不可省略!若强行合并,将导致数据冗余(同一学生多门课要重复存学号)和更新异常(删一门课要删整行)”。

3.4 视图安全性:CREATE VIEW后的GRANT不是装饰,是权限链的最后一环

现象:写了CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS',就以为信息系学生只能看到自己系数据,却忘了给用户授权。
原因:视图只是逻辑定义,DBMS默认不开放访问权限。
解决:必须紧跟授权语句:

CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept='IS'; GRANT SELECT ON IS_Student TO U1; -- 关键!没有这句,U1查视图会报错

在Word试题的“简答题3”答案旁,用黄色高亮添加:“❗ 视图创建后,必须用GRANT赋予目标用户SELECT权限,否则视图不可见。权限粒度可细至列:GRANT SELECT(Sno,Sname) ON IS_Student TO U1”。

3.5 事务调度判定:别被“T1/T2时间轴”迷惑,抓住冲突操作对才是命门

现象:看T1/T2并发图,T1读A=100,T2读A=100,T1写A=200,T2写A=195,就断定“丢失修改”,却漏掉T2写前T1已写这个关键时序。
原因:没建立“冲突操作对”概念——只有同一数据项上的Read-Write、Write-Read、Write-Write操作才算冲突,且顺序决定调度性质。
解决:在Word里,对每张并发图做三步标记:

  1. 用荧光笔标出所有涉及同一数据项(如A)的操作;
  2. 用箭头连接冲突对:T1的READ(A)→T2的WRITE(A)(RW冲突),T2的WRITE(A)→T1的WRITE(A)(WW冲突);
  3. 判断是否存在环:若T1→T2且T2→T1,则为循环等待,是冲突不可串行化。试题中图1的T2ROLLBACK后A恢复100,正是利用WW冲突的不可逆性制造“脏读”。

4. 把Word考卷变成你的个人数据库原理实验室:三步深度复用法

4.1 第一步:用Word的“查找替换”功能,把整套题变成可执行的SQL沙盒

这套题里藏着37处可直接运行的SQL语句(如CREATE VIEW IS_Student...、GRANT SELECT ON TABLE Student TO U1、SELECT SN,AGE,SEX FROM S WHERE AGE>(SELECT AGE FROM S WHERE SN='王华'))。但它们散落在不同题型中,且部分语句缺表结构。你的任务是:

  1. 在Word中按Ctrl+H打开替换窗口;
  2. 查找内容填CREATE VIEW,替换为-- CREATE VIEW(先注释所有视图创建,避免重复建表报错);
  3. 查找GRANT,替换为-- GRANT(同理注释权限语句);
  4. 查找所有SELECT开头的语句,替换为/* SQL START */\n[原语句]\n/* SQL END */;
  5. 最后,手动补全缺失的建表语句(参考试题中S/C/SC表结构):
CREATE TABLE S ( S# CHAR(4) PRIMARY KEY, SN VARCHAR(20), SEX CHAR(2), AGE INT, DEPT VARCHAR(20) ); CREATE TABLE C ( C# CHAR(4) PRIMARY KEY, CN VARCHAR(30) ); CREATE TABLE SC ( S# CHAR(4), C# CHAR(4), GRADE INT, PRIMARY KEY(S#, C#), FOREIGN KEY(S#) REFERENCES S(S#), FOREIGN KEY(C#) REFERENCES C(C#) );

这样,你就能把Word文档里所有/* SQL START */到/* SQL END */之间的代码,一键复制到MySQL或PostgreSQL客户端执行,亲眼看到SELECT MAX(GRADE) FROM SC WHERE C#='C2'返回的到底是83还是95——理论终于有了温度。

4.2 第二步:用Word表格重构“范式演进树”,让1NF→BCNF变成可视路径

试题中多次出现范式分解题(如2003年卷第4题STUDENT表分解)。与其死记硬背“消除部分依赖→消除传递依赖”,不如用Word表格画出动态演进:

当前范式问题根源分解动作新关系模式消除的依赖类型
1NFS#,CNAME→SNAME,SDEPT,MNAME(部分依赖)拆出R1(S#,SNAME,SDEPT,MNAME), R2(S#,CNAME,GRADE)R1: S#→SNAME,SDEPT,MNAME
R2: S#,CNAME→GRADE
非主属性对候选码的部分函数依赖
R1的2NFS#→SDEPT, SDEPT→MNAME(传递依赖)拆出R11(S#,SNAME,SDEPT), R12(SDEPT,MNAME)R11: S#→SNAME,SDEPT
R12: SDEPT→MNAME
非主属性对候选码的传递函数依赖
R11/R12/R2的BCNF所有FD决定因素均为候选码无需再分R11,R12,R2均满足BCNF无
在Word里,为每一行设置不同底纹色(1NF浅红,2NF浅黄,BCNF浅绿),再插入箭头形状连接各阶段。当你拖动鼠标放大这张表时,“范式”就从抽象名词变成了你亲手搭建的数据库脚手架。

4.3 第三步:用Word批注构建“错误答案溯源库”,把失分点变成肌肉记忆

每做完一套题,别急着对答案。在Word中开启“审阅→新建批注”,对每个错题执行:

  • 错因定位:在错误选项旁批注“此处混淆了物理独立性与逻辑独立性(见教材P45定义)”;
  • 正解推导:在正确答案旁写“推导链:物理模式指磁盘存储结构→应用程序通过DBMS访问数据→DBMS屏蔽磁盘细节→故选C”;
  • 同类题索引:在批注末尾加“参见2003年卷选择题第1题、2004年卷填空题第1题”。
    坚持三套题后,你会得到一个专属的“错误模式图谱”:比如所有关于“封锁类型”的错题,都指向同一个漏洞——没区分S锁(共享锁,允许多个读)和X锁(排他锁,独占读写)。这时,你只需在Word里搜索所有含“S锁”的批注,集中火力攻克,效率远超盲目刷题。

5. 终极验证:用这套题自测“数据库直觉”,看你能秒答几道真题

5.1 五道题,测出你离“数据库老手”还差几步

拿出计时器,限时8分钟,不翻书、不查资料,仅凭本能作答。完成后对照试题答案,看哪些题你“不用想就答对”——那正是你已内化的直觉。

题1(概念辨析):事务的原子性是指________。
A.事务中包括的所有操作要么都做,要么都不做
B.事务一旦提交,对数据库的改变是永久的
C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的
D.事务必须是使数据库从一个一致性状态变到另一个一致性状态
✅ 正确答案:A。原子性(Atomicity)是ACID之首,核心是“全有或全无”。B是持久性(Durability),C是隔离性(Isolation),D是一致性(Consistency)。若你秒选A,说明ACID四要素已在脑中刻成坐标系。

题2(手算能力):已知F={D→G, C→A, CD→E, A→B},求(AC)⁺。
A.AC
B.ACB
C.ACB
D.ACBD
✅ 正确答案:C(ACB)。计算过程:X⁰=AC → X¹=AC∪B=ACB(因A→B)→ X²=ACB(无新属性)。注意:C→A已存在,但A在X⁰中,故不触发新推导;CD→E需C和D同时存在,D不在X⁰中,故不触发。若你心算两步就得出ACB,说明闭包迭代已成条件反射。

题3(设计思维):某ER图中,“制造商”与“车辆”是1:N联系,“车辆”与“车主”是1:1联系。转换为关系模型时,以下哪种设计最合理?
A.在车辆表加manufacturer_id和owner_id两个外键
B.建制造商表、车辆表、车主表,车辆表含manufacturer_id,车主表含vehicle_id
C.建制造商表、车辆表、车主表,车辆表含manufacturer_id,车主表不含vehicle_id
D.建制造商表、车辆表、车主表,车辆表含manufacturer_id和owner_id
✅ 正确答案:A。“制造商-车辆”1:N → vehicle表加manufacturer_id外键;“车辆-车主”1:1 → 可将owner_id直接放入vehicle表(避免多一次JOIN),或建独立owner表并设vehicle_id外键。但试题中明确“车主”是独立实体(含身份证号、姓名等属性),故应选A——1:1联系常采用“外键下沉”优化。若你选A,说明你已跳出“所有联系必建中间表”的教条。

题4(安全意识):为防止用户U1越权访问Student表中Sdept='CS'的数据,以下哪项措施最有效?
A.对U1执行REVOKE SELECT ON Student FROM U1
B.创建视图CREATE VIEW CS_Student AS SELECT * FROM Student WHERE Sdept='CS',再GRANT SELECT ON CS_Student TO U1
C.在Student表上建行级安全策略(Row Level Security)
D.删除Student表中Sdept≠'CS'的记录
✅ 正确答案:B。A是粗暴禁用,违背最小权限原则;C是高级特性(PostgreSQL 9.5+),但试题语境是基础教学;D破坏数据完整性。B用视图实现“数据裁剪+权限绑定”,是教材明确推荐的安全模式。若你选B,说明你已建立“安全=精准控制”的工程思维。

题5(故障应对):系统崩溃后重启,DBMS通过什么机制保证未提交事务的修改不生效?
A.检查点(Checkpoint)
B.日志(Log)
C.备份(Backup)
D.索引(Index)
✅ 正确答案:B。日志记录事务的每个操作(如<T1, START>、<T1, WRITE, A, 100, 200>),崩溃后DBMS扫描日志,对未提交事务执行UNDO(回滚),对已提交事务执行REDO(重做)。检查点是优化日志扫描的辅助机制,备份用于灾难恢复,索引与故障恢复无关。若你选B,说明你已穿透“ACID”表象,触达数据库的底层心跳。

5.2 从那以后我每次打开数据库教材,都会先做三件事:

  1. 翻到目录,用荧光笔标出所有带“范式”“封锁”“事务”“ER”的章节——因为这套题已证明,这些词不是孤立概念,而是彼此咬合的齿轮;
  2. 在Word里新建一个空白文档,标题命名为“我的数据库错题熔炉”,把今天做的五道题的错因、正解、关联题号全粘进去,每周汇总一次,看哪些错误反复出现;
  3. 把试题中所有SELECT语句复制到本地数据库执行一遍,哪怕只是SELECT * FROM S,也要看着结果集在屏幕上滚动——因为数据库不是用来背的,是用来摸的、敲的、错的、修的。
    希望帮到你。

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

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

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

立即咨询