简介这份PDF是面向计算机考研学生的数据库复习题库包含9套模拟试卷围绕数据管理技术演进、数据库系统结构、关系运算与SQL、函数依赖与范式、事务并发控制及安全性等核心考点设置题目。每套题兼顾选择题、填空题和简单应用题从基础概念到关系运算综合计算层层递进有助于考生在冲刺阶段自测掌握程度、快速定位薄弱知识点。资料以单个PDF文件打包约1.7MB排版清晰便于打印刷题或导入平板使用当前已有142人在线学习说明受到同类备考者的关注。若能在考前完整过一遍这些题目并对照教材梳理相关概念可对数据库科目常见考法形成更系统的把握。1. 考研数据库9套题为什么说它是考前最该先做的那份卷子这份《考研数据库9套题.pdf》打开第一套第一道题就是数据管理技术发展过程中数据独立性最高的阶段是哪个——送分题里藏着整套试卷的脾气。它不是知识点讲义也不是教材课后题汇总而是九套结构完整的仿真试卷每套都有20道选择题、10道填空题、关系代数简单应用题、SQL应用题外加模式分解和E-R图设计两道大题。对考研专业课考数据库、或者期末想拿高分的同学来说它解决的核心问题是把教材里散落的考点按真实考卷的节奏串起来让你在进考场前就知道题长什么样、分值怎么分布、哪些地方容易丢分。适合两类人。一类是复习完一遍教材、想用整卷检验水平的考生刷完九套基本能把考点覆盖率摸清楚另一类是时间紧、想直接上手真题节奏的人直接从这套题的错题反推自己哪块知识是虚的。我拆完这份资源最直接的感受是它的价值不在题目本身而在答案里那些手算过程——尤其是关系代数和模式分解光看教材很难看到这么完整的演算写法。2. 把九套题拆开看考点分布与命题规律2.1 选择题与填空题高频概念集中在哪几个模块九套试卷的选择题和填空题覆盖的知识模块高度一致基本可以归纳为六个方向数据库系统基本概念三级模式结构、数据独立性、DBMS核心地位、关系模型与关系运算选择投影连接除、笛卡尔积、SQL语言查询嵌套、GROUP BY、通配符、视图、授权、函数依赖与范式闭包、候选码、1NF到BCNF、事务与并发控制ACID、锁、死锁、可串行化、数据库设计E-R图、概念结构设计、逻辑结构设计。出题方式很有套路。概念题喜欢考“最高/最低”“最先/最后”这类极端值比如数据独立性最高的阶段、关系运算中花费时间最长的运算、规范化程度最高的范式SQL题则专门挑那些容易记混的语法细节比如通配符%和_的区别、BETWEEN 20 AND 30是否包含边界值、GROUP BY与HAVING的配合条件。填空题更是直接考术语例如“事务遵守 是可串行化调度的充分条件”答案是两段锁协议这种题只能靠硬记忆没有捷径。2.2 简单应用题关系代数手算是拉开分差的地方每套卷子的第三大题都是给R、S、T三个具体的关系表要求手算交、差、笛卡尔积、除运算以及带选择和投影的复合表达式。这类题有三个特点。第一只要掌握运算定义就能拿分但速度很重要因为九套里这套题的运算量不小。第二除运算÷是多数人的薄弱点尤其是(R∪S)÷T这种先并再除的组合容易在“结果取哪些列”上出错。第三答案里的表格形式本身就是学习材料——比如第一套第三题R∩S的结果保留公共元组R-S的结果保留R中有而S中没有的元组这些手算结果表可以直接用来对照自己的演算过程。我建议这类题不要去背答案而是把每一行的筛选逻辑在草稿纸上标出来练到一眼能看出笛卡尔积的元组数量是M×N为止。2.3 应用题与大题SQL和模式分解是真正的重头戏第四大题是SQL应用题每题5分共25分覆盖建表、更新、嵌套查询、视图、授权、关系代数表达。第五大题是函数依赖与模式分解的综合题通常包含求最小函数依赖集、求候选码、判定范式等级、判定无损连接、分解到3NF或BCNF五个小问第六大题是E-R图设计题要求画图、转关系模型、判定范式。从分值结构看SQL和范式分解加起来占了50分以上是绝对的拿分重点。E-R设计题虽然放在最后但套路比范式分解更固定——实体、属性、联系、联系类型1:1、1:N、M:N画清楚转关系模型时“M:N联系单独建表”几乎是必考的规则。九套卷的E-R题覆盖了汽车运输公司、图书馆、医院管理系统等经典场景做完之后常见设计模式基本就掌握了。3. 关系代数与SQL实战从手算结果到可执行语句3.1 关系代数手算用第一套的(R∪S)÷T把除运算拆明白除运算Division是关系代数里最抽象的一个教材定义绕但手算其实有固定套路。先看第一套第三题给出的表R表ABCa1b1c2a2b3c7a3b4c6a1b2c3S表ABCa1b2c1a2b2c3a4b6c6a1b1c2a3b4c6T表BCDb1c2d4b2c1d1b2c3d2先求R∪S得到所有出现在R或S中的元组ABCa1b1c2a2b3c7a3b4c6a1b2c3a1b2c1a2b2c3a4b6c6再看T表T的属性是(B, C, D)而(R∪S)的属性是(A, B, C)。做除法(R∪S)÷T要求的是在(R∪S)中哪些A值对应的(B, C)组合覆盖了T表中所有不同的(B, C)取值。T中(B, C)组合是(b1, c2)、(b2, c1)、(b2, c3)。逐个检查A值Aa1对应(B, C)有(b1, c2)、(b2, c3)、(b2, c1)恰好全部覆盖保留Aa2对应(B, C)有(b3, c7)、(b2, c3)缺(b1, c2)和(b2, c1)去掉Aa3对应只有(b4, c6)去掉Aa4对应只有(b6, c6)去掉所以(R∪S)÷T的结果是属性A的一列只有一行a1。提示做除法时被除关系的属性必须包含除关系除D之外的全部属性。结果关系的属性是被除关系中有、除关系中没有的那些属性。3.2 SQL建表主键、外键和CHECK约束的完整写法第一套第四题第1问要求用SQL创建选课表SC标准写法如下CREATE TABLE SC ( Sno CHAR(10) NOT NULL, Cno CHAR(10) NOT NULL, Grade INT CHECK (Grade 0 AND Grade 100), PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES S(Sno), FOREIGN KEY (Cno) REFERENCES C(Cno) );这段代码有几个关键点。PRIMARY KEY (Sno, Cno)定义的是复合主码也就是两个字段合在一起唯一标识一行这对应了“一个学生选一门课只对应一条成绩记录”的业务约束。两个FOREIGN KEY子句分别把Sno和Cno关联到学生表S和课程表C保证不会出现选了不存在的学生或课程的记录。CHECK约束直接写在Grade列上限制了成绩在0到100之间。提示Grade 0 AND Grade 100比BETWEEN 0 AND 100更直观而且两种写法在标准SQL里语义一致都是闭区间包含0和100。3.3 嵌套查询与授权语句GROUP BY、HAVING和GRANT的配合查询“选修并且成绩及格的课程总数大于等于3门的学生学号和姓名”是嵌套查询的典型题SELECT Sno, Sname FROM S WHERE Sno IN ( SELECT Sno FROM SC WHERE Grade 60 GROUP BY Sno HAVING COUNT(*) 3 );这里GROUP BY Sno先把选课记录按学号分组HAVING COUNT(*) 3在分组后再筛掉不及格门数不够的学生。注意WHERE Grade 60必须先执行因为它是分组前的行级筛选如果把及格条件写到HAVING里语义就变成了“每组中及格的记录数3”结果会不一样。授权语句也有标准套路GRANT UPDATE ON TABLE S TO U1 WITH GRANT OPTION;WITH GRANT OPTION表示U1不仅能更新学生表S还能把这份权限再转授给其他人。这个考点在九套里出现了多次属于数据库安全性章节的必考项。3.4 视图创建数据字典里存的是定义不是数据创建视图VSC的SQLCREATE VIEW VSC(Sno, Sname, Cno, Cname, Grade) AS SELECT S.Sno, Sname, C.Cno, Cname, Grade FROM S, C, SC WHERE S.Sno SC.Sno AND C.Cno SC.Cno;视图在数据字典中存放的是视图定义也就是那条SELECT语句而不是查询结果的数据拷贝。这意味着每次访问视图都会重新执行一次查询底层表数据变了视图查出来的结果也跟着变。九套题里专门考了这个点视图建立后数据字典中存放的是视图的定义。4. 模式分解与范式判定闭包、候选码与无损连接4.1 属性闭包计算与候选码求解从第一套第五题走一遍完整流程第一套第五题给出了关系模式R(U, F)U{ABCDEG}F{BE→G, BD→G, CD→A, CE→G, CDE→AB, BC→A, B→D}。求候选码是这类题的第一道关卡。候选码的定义是能函数决定所有属性的最小属性组。求候选码的第一步是看哪些属性只出现在函数依赖的左部、从未出现在右部——这些属性必然属于候选码。本题中B、C、E只出现在左部所以候选码一定包含BCE。取X0BCE计算闭包X(0) BCE 由 B→D X(1) BCDE 由 CD→A X(2) ABCDE 由 BE→G X(3) ABCDE G U因为(BCE)U所以BCE是一个候选码。本题答案还给出了另一个候选码CDE计算(CDE)先由CD→A得ACDE由CE→G得ACDEG由B→D无法直接推进因为还没有B但BC→A和BE→G当前都无法触发这时继续看CDE→AB可以直接得到ABCDE再由B→D得到ABCDEG闭包也等于U。同一个关系模式可能存在多个候选码答案给出的是(BCE)和(CDE)。提示求闭包时每加入一个新属性就要重新扫描全部函数依赖看有没有左部被当前闭包包含的依赖可以触发。漏推一步闭包就不全候选码就会求错。4.2 范式判定从1NF到BCNF的判断顺序不能跳判断R的最高规范化程度要按1NF→2NF→3NF→BCNF的顺序逐级检查。第一套第五题第3问判定为1NF理由是存在BE→G而BE是候选码BCE的真子集说明G对码存在部分函数依赖所以不满足2NF。这是一个很典型的陷阱——很多人上来先判断是否满足3NF忽略了2NF这一层。第二套第五题则反过来判定BCNF。BCNF的定义是对于关系模式R上的每一个非平凡函数依赖X→YX都包含候选码。判断时要把F中每个决定因素X都拿来和候选码比较只要有任何一个依赖的决定因素不含码就不是BCNF。第二套的候选码是BEF里所有依赖的决定因素AC、CD、B、DE、CE中哪个都不包含BE但分解结果是ρ{AC, BD, ABE}分解后的每个关系模式内部重新判断达到BCNF。4.3 无损连接判定初始表法的操作过程无损连接判定的标准方法是初始表法。以第一套第五题第4问为例判断ρ{ABD, DGE, AG, CE}是否无损建一个行为关系分组、列为属性的表初始时若属性在分组中则标a否则标b分组ABCDEGABDaababbDGEbbbaaaAGabbbbaCEbbabab然后用F中的函数依赖反复推导。比如B→D找B列取值相同的行把D列的b改成a。但本题的关键在于当把标号对齐后没有任何一行能变成全a最终判定为有损连接分解。第二套第五题第2问ρ{AD, AB, BC, CDE, AE}的判定结果相反其中EC那一行全部是a所以是无损的。提示初始表法的终止条件是“没有新的标号可以修改”。不要只推一遍就下结论尤其是依赖链较长时比如B→DD→CC→A需要反复扫描到不再变化为止。4.4 保持函数依赖的3NF分解合并左部相同的依赖第一套第五题第5问要求分解为3NF且保持函数依赖、保持无损连接。标准流程分三步第一步求最小函数依赖集答案是Fmin{B→G, CD→A, CE→G, B→D, CDE→B}第二步把左部相同的函数依赖合并即每个左部X对应一个关系模式(X, 右部属性集)得到{BDG, ACD, CEG, BCDE}第三步检查候选码是否被包含——候选码BCE和CDE都包含在BCDE中所以不需要额外增加关系模式。注意CDE→AB这个依赖在最小化时被拆开了CDE→A可以由CD→A推导冗余CDE→B保留因为没有任何其他依赖能推出B。所以最终分解ρ{BDG, ACD, CEG, BCDE}。这个分解里每个关系模式都是3NF因为所有非主属性都完全函数依赖于码且不存在传递依赖。5. 刷题避坑九套题里最容易翻车的五个地方5.1 关系代数除运算的结果表画错现象计算(R∪S)÷T时结果写成了包含多列的表格而不是只保留被除关系独有的属性列。原因把除法当成连接运算来做误解了“除”的定义。除运算的结果关系只包含被除关系中有、除关系中没有的那些属性因为除法本质是“找出在X取值上包含了除关系全部投影值的那些元组”。解决做题前先把两个关系的属性列出来标出被除关系独有属性X然后只看X的取值逐个检查是否覆盖了除关系在公共属性上的全部投影值。第一套的(R∪S)÷T结果就是A这一列的一个值a1多写任何一列都是错的。5.2 GROUP BY 的列没有出现在 SELECT 中现象SELECT语句里没写分组列或者分组列只出现在HAVING里运行时直接报错。原因SQL标准里SELECT列表中出现的非聚合列必须包含在GROUP BY子句中。第一套第5题选择题专门考这个在SELECT语句中使用GROUP BY Sno时Sno必须出现在 子句中答案是C.select。很多人在WHERE和HAVING之间纠结忽略了GROUP BY和SELECT的对应关系。解决写分组查询时先确认SELECT里所有非聚合列都在GROUP BY里。需要筛分组时用HAVING需要筛行时用WHERE不要混用。5.3 视图相关题默认视图会存数据现象问“视图建立后数据字典中存放的是什么”选了“组成视图的表内容”或“查询语句”。原因直觉上觉得视图是个表就应该存数据。实际上视图是虚表数据字典里只存视图定义那条SELECT语句每次查询实时去底层表拿数据。解决把“视图是虚表、不占存储、存的是定义”记成死概念。这一知识点在两套卷子中连续出现说明命题人认为它值得反复考。5.4 无损连接判定漏推标记就下结论现象初始表法推到一半没看到全a行直接判定为有损结果和答案相反。原因忽略了函数依赖是可传递的。比如有了B→D和D→CB行的C列标号可以被连续推两次才变成a。第一套的分解ρ{ABD, DGE, AG, CE}答案是有损但判定过程需要把F里每个依赖都扫描到无法再推为止。解决每次修改完一个标号就回到F的第一条依赖重新扫。建议做判定时用一个可擦写的草稿表标号变化就在原表上改直到一轮扫描没有任何变化再下结论。第二套的ρ{AD, AB, BC, CDE, AE}判无损时EC行能推成全a就是因为CDE组里CE→A、A→D等依赖链被完整走了一遍。5.5 SQL中和这种倒置写法现象手写SQL时把比较符写成大于等于或小于等于数据库直接报语法错误。原因数学里写≥、≤习惯了手写时把符号顺序带偏。第一套答案是Grade 100看起来像笔误但真要在数据库里执行必须写成Grade 100。解决写完SQL先检查所有比较符养成从左边读的习惯是“大于等于”是“小于等于”。另外第二套里CS (SELECT Sdept FROM S WHERE S.Sno SC.Sno)这种写法能跑通但可读性差我一般会改成WHERE CS IN (SELECT Sdept FROM S WHERE S.Sno SC.Sno)逻辑一致而且不易在嵌套比较时搞错方向。6. 把九套题变成自测工具三遍刷题法与考点倒推这套资源最好的用法不是从头做到尾而是当成一个自测循环来用。我的习惯是三遍刷题法。第一遍是摸底限时100分钟完整做一套不对答案做完后把错题和蒙对的题全部标红。第二遍是精拆把标红的题按章节归类比如SQL错得多就翻教材的SQL部分关系代数错得多就练除运算和笛卡尔积每一道错题都要在教材里找到对应知识点在题号旁边写下考点名。第三遍是验证隔两天只做标红的题和它们的同类型变体比如第一套的候选码是BCE和CDE就去找其他卷子里候选码求解的题目再算一遍。除了刷题还建议把答案里的SQL语句在本地数据库实际执行一遍。以MySQL或SQLite为例先把S、C、SC三张表建出来并插入几行测试数据然后逐个执行卷子里的查询语句-- 以第一套第四题第3问为例查询及格课程不少于3门的学生学号和姓名 SELECT S.Sno, Sname FROM S JOIN SC ON S.Sno SC.Sno WHERE Grade 60 GROUP BY S.Sno, Sname HAVING COUNT(*) 3;用JOIN改写后的语句等价于原答案的子查询写法但执行计划通常更清晰。执行时观察结果集是否和预期一致重点看GROUP BY和HAVING的配合——如果去掉Sname不改GROUP BY某些数据库会直接报错如果不加Sno只按姓名分组同名学生会合在一起。这种真实执行中暴露的问题比背十遍语法都记得牢。E-R设计题也可以做数字化验证把答案里的关系模型建表然后尝试插入违反约束的数据比如给SC表插入一个不存在的学号看外键约束是否拦截。这样做的价值在于把“考场里写对答案”升级为“理解约束为什么存在”。九套卷里的E-R题覆盖了车队、图书馆、医院等场景每个场景都建一次表设计规范基本就刻进肌肉记忆了。这套题我前后拆过三遍。第一次只刷题第二次开始抠答案里的过程第三次才意识到真正的价值在那些手算表格和分解步骤里。从那以后我每做一套卷子都强制走一遍“限时做题→错题归类→同型重练→库表验证”的流程效果比盲目刷五套卷子都好。希望帮到你。本文还有配套的精品资源点击获取