ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

数据库考研九套题:关系代数、范式与SQL大题全解

数据库考研九套题:关系代数、范式与SQL大题全解 简介这是一份面向考研学子的数据库题库PDF围绕数据库管理技术发展、三级模式结构、关系运算、SQL语句、函数依赖、事务特性与并发控制、数据安全性等核心考点设计适合数据库原理课程复习、考研专业课冲刺以及期末自测等多种场景。压缩包内为1个PDF文件整体约1.7MB单文件携带方便可打印或电子阅读。目前已有142人浏览学习是同类备考资料中具参考价值的练习材料。题库共含9套题题型包括选择题、填空题和简单应用题覆盖数据独立性、外/内/存储模式区分、关系代数选择投影连接、group by与having、%通配符、BCNF判定、E-R图与数据流图转换、事务持久性、授权、视图存储等高频知识点简单应用题还提供具体关系表示例要求写出关系代数表达式能有效训练解题思路帮助考生查漏补缺巩固数据库理论基础。无论是用于知识框架梳理还是考前突击这套题库都能提供有效支撑。1. 数据库考研九套题这份PDF真正值钱的是后面的大题考研数据库说到底考的是三件事会不会写关系代数、能不能写对SQL、能不能判断范式。这份《考研数据库9套题.pdf》就是把这三件事翻来覆去练了九遍的题集——每套卷子的结构几乎一致20道选择题、10道填空题、15分关系代数计算、25分SQL应用题再加一道15分的E-R图或规范化综合题。选择题覆盖三级模式、函数依赖、并发控制、事务特性这些数据库原理的核心知识点但真正拉开差距的是后面的大题。适合三类人正在准备数据库考研专业课的同学、想给数据库课程设计找题源的老师以及准备数据库面试题、想快速过一遍核心概念的从业者——这套题库里的除运算、无损连接判定、两段锁协议面试被问到的概率极高。2. 九套题考点拆解题型分值、重复考点与刷题顺序2.1 每套卷的固定模块分数结构决定复习重心九套题的版式基本统一以第一套为例分数结构如下题型题量分值考察方向选择题20题20分概念辨析、SQL细节、范式判断填空题10题10分术语记忆、锁协议、故障类型简单应用题5题15分关系代数计算交、差、除、笛卡尔积应用题5题25分SQL建表、查询、视图、授权综合题2题30分函数依赖与规范化、E-R图转关系模型第三套略有不同把关系代数题换成了20分的简答题考察点是“最小函数依赖集满足的三个条件”“并发操作会带来哪些问题”“局部E-R模型合并的冲突类型”。这种变化说明出题人会在同一知识域内切换考察形式——概念题和计算题轮流上背下来的东西不一定能用练过的运算也不一定写得出来。所以刷这套题不能只对答案要按题型拆开训练。选择题和填空题是用来查漏的关系代数和SQL应用题是用来练手速的最后两道综合题是用来建立整体解题框架的。2.2 高频考点地图这些知识点在九套里反复出现把这九套题过一遍会发现考点高度集中翻来覆去就是下面这些三级模式与两级映像。第一套第三题问“描述数据库中全体数据的全局逻辑结构和特征的是哪个模式”答案是D模式。外模式是局部逻辑结构内模式是物理存储结构模式是全局逻辑结构——这三个概念几乎每套卷的选择题都会出现换着角度问。关系运算。选择、投影、连接是关系系统最小应具备的运算第一套第四题花费时间最长的运算是笛卡尔积第二套第四题自然连接要求两个关系有公共属性第三套第十题。这些题都在考同一个底层认知关系代数是过程化语言每一步算出来的还是关系。函数依赖与范式。第一套第五题考“分解保持函数依赖最高能达到几范式”答案是BCNF。全码组成的关系模式最高也是BCNF第一套第十七题。这部分是压轴大题的常客几乎每套的第五题或第六题都是给一个函数依赖集让你求最小依赖集、候选码、判定范式、做无损分解。并发控制与事务。事务的ACID四个性质分别对应一套题里的不同选择题两段锁协议是可串行化调度的充分条件填空题第5题死锁属于事务故障第三套第十二题。数据库并发锁、数据库死锁这些概念在这套题库里是全套覆盖的。安全性与完整性。授权、视图、日志、加密、转储这些词频繁出现在填空和选择题里。视图建好后数据字典里存放的是视图的定义而不是数据第一套第十六题这是最容易被当成“物化视图”记错的知识点。数据库设计流程。需求分析、概念设计E-R图、逻辑设计关系模式、物理设计每个阶段干什么选择题和简答题都会考。E-R图合并时的属性冲突、命名冲突、结构冲突第三套简答题第4题也是固定考点。数据库同步与恢复。日志文件的主要内容是对数据的全部更新操作第一套第二十题数据转储是制作后援副本的过程第二套填空题第7题系统故障和介质故障要区分——系统故障是内存数据丢失介质故障是硬盘数据丢失恢复策略完全不同。2.3 按时间分配刷题顺序先摸底、再拆练、后限时这套题的合理用法不是按顺序从头做到尾而是分三轮。第一轮用第1、2套做摸底。不看书、不限时完整做一遍把错题按“概念不清”和“计算失误”分类。摸底的目的不是得分是找出知识盲区集中在哪一章。比如选择题错得多的集中在范式判定那后面重点练第四章的内容。第二轮用第3到第6套做分题型训练。每天只练一种题型今天只做所有套卷里的关系代数题明天只写SQL应用题。这样做的好处是能在短时间内形成对同一类题型的肌肉记忆。SQL题尤其值得反复写——CREATE TABLE、UPDATE、嵌套查询、视图授权这四类题在九套卷里出现了至少二十次写多了自然就顺了。第三轮用第7到第9套做限时综合。按考研专业课的150分钟标准给自己限时写完再对答案。这一轮的重点是时间分配我一般建议选择题不超过15分钟、填空题不超过10分钟把时间留给后面的关系代数和规范化大题——那才是真正决定分数的地方。3. 关系代数与SQL应用题可以照抄的解题模板3.1 关系代数交差、笛卡尔积和除运算的手算路径关系代数题在九套卷里占了整整15分但题型非常固定。以第一套第三题为例给了三个表R、S、T要求算五个表达式。先看最简单的交和差。R∩S就是找两个表中完全相同的行。R表有四行S表有五行逐行比对只有a1 b1 c2和a3 b4 c6在两个表里都出现所以交运算的结果就是这两行。R-S则是找R里有但S里没有的行a2 b3 c7和a1 b2 c3。这里有个常见翻车点交和差要求两个关系是相容的也就是属性个数相同且对应属性域一致。做题时先确认这一点再动手不要看到表就直接写答案。再看笛卡尔积 R×T。R有4行3列T有3行3列结果一定是12行6列。做法是R的每一行依次拼接T的每一行。为了区分同名的B、C列结果里要写成R.B、R.C、T.B、T.C这就是为什么答案里出现了六列而不是三列。动手算的时候我习惯先把R的第一行跟T的三行分别拼好再换第二行这样不容易漏。最后一题∏A,DσS.BT.B(S×T)考的是运算顺序先做S×T再选择S.BT.B的行最后投影A和D列。这类题的关键是记住运算符优先级——选择σ的角标里写的是条件投影∏的角标里写的是要保留的列从内往外读。最考验理解的是除运算。第一套的(R∪S)÷T很多人一上来就错在没看到括号里的并集。除运算的逻辑是被除关系中那些在除关系所含属性上的取值能够覆盖除关系中所有取值组合的行。具体到这个题T 的 (B,C) 组合为(b1,c2)、(b2,c1)、(b2,c3) R∪S 按 A 分组 Aa1: (b1,c2)、(b2,c3)、(b2,c1)、(b2,c3) → 三个组合全覆盖保留 Aa2: (b3,c7)、(b2,c3) → 缺 (b1,c2) 和 (b2,c1)剔除 Aa3: (b4,c6) → 只有一组剔除 Aa4: (b6,c6) → 剔除 结果A 列只有 a1我一般这样跟学生对答案除运算的商是一个只包含被除关系中除关系没有的那些属性的关系。(R∪S)÷T的除关系T有(B,C,D)三列被除关系R∪S有(A,B,C)三列相减得到(A)所以结果只含A列——列不会错剩下的就是核对每个值是否全覆盖。3.2 SQL建表和增删改查一套SQL模板吃透二十五分第一套第四题给了完整的学生选课库结构S(Sno,Sname,Sage,Ssex,Sdept)、C(Cno,Cname,Teacher,Ccredit)、SC(Sno,Cno,Grade)。这五道小题基本覆盖了SQL应用题的常见场景。第1小题建表答案是标准的CREATE TABLECREATE 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 ... REFERENCES ...是外键约束保证Sno必须在S表里存在CHECK约束限定了Grade的取值范围。注意原答案里写了Grade 100这是笔误标准写法是考试时写错了要扣分。第2小题是把计算机科学系全体学生成绩置零UPDATE SC SET Grade 0 WHERE CS ( SELECT Sdept FROM S WHERE S.Sno SC.Sno );这里用的是相关子查询——内层查询引用了外层SC表中的Sno对SC的每一行都会执行一次子查询。等价写法是用WHERE Sno IN (SELECT Sno FROM S WHERE Sdept CS)。两种写法都行但如果SC表很大相关子查询性能要差一些实际工作中我更常用IN子查询或JOIN。第3小题查“平均及格课程数大于等于3门的学生的学号和姓名”考的是GROUP BY和HAVING的配合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对组做筛选。注意WHERE是先于GROUP BY执行的所以“及格”这个条件放在内层WHERE里而“组内记录数大于等于3”这个组级条件只能放在HAVING里顺序不能颠倒。第4小题创建视图并授权CREATE 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; GRANT UPDATE ON TABLE S TO U1 WITH GRANT OPTION;视图VSC把三张表连接后的结果封装成一个虚表用户查询它时不需要关心底层三表连接细节。WITH GRANT OPTION表示U1不仅自己能更新S表还能把更新权限再授予其他人——这是授权传播的标志题目里“U1可以将权限进行传播”对应的就是这个子句。去掉它U1就只有使用权没有转授权。3.3 第二套的视图授权变体用视图隔离敏感数据第二套第四题有一个更灵活的考法用户U1要查每门课的最高分、最低分和平均分但不能看每个学生的个人成绩。解法是先建分组统计视图再授权CREATE VIEW 课程成绩 AS SELECT Cno, MAX(Grade), MIN(Grade), AVG(Grade) FROM SC GROUP BY Cno; GRANT SELECT ON 课程成绩 TO U1;这道题的思路是“把能看的数据封装进视图把不能看的数据留在基表里”。U1对SC表没有任何权限只能通过课程成绩视图间接访问聚合后的数据。这种用视图做行级和列级安全隔离的思路在真实系统里也常见——只给报表用户开聚合视图不暴露明细表。第三套第五题再进一步要求建一个按A分组后求C和E平均值的视图RST本质是同一个模式多表连接 GROUP BY 平均值聚合。4. 候选码、函数依赖与范式判定规范化题型的三板斧4.1 候选码求解先用L/R/LR分类缩小范围规范化大题每次都是压轴但套路非常固定。第二套五题是最典型的例子R(A,B,C,D,E)F{A→C, C→D, B→C, DE→C, CE→A}。求候选码的第一步是给所有属性分类。只出现在函数依赖左边、从不出现在右边的属性叫L类它们必定包含在候选码里只出现在右边的叫R类它们不可能出现在候选码里两边都出现的叫LR类需要逐个试探。这个题里B和E只出现在左边是L类所以任何候选码都必须包含BE。第二步是求BE的属性闭包。B→C推出CC→D推出D现在有了B、C、D、ECE→A推出A——所以BE的闭包是全体属性UBE就是唯一候选码。第三套第四题也是同样套路U{A,B,C,D,E}最后推出CE是候选码。4.2 最小函数依赖集三步走每一步都有对应的判断标准最小函数依赖集是另一道必出题。第一套五题给了一个较复杂的依赖集F{BE→G, BD→G, CD→A, CE→G, CDE→AB, BC→A, B→D}答案的Fmin是{B→G, CD→A, CE→G, B→D, CDE→B}。标准做法分三步。第一步右部单属性化。把CDE→AB拆成CDE→A和CDE→B两条。第二步删除冗余依赖。逐个检查每条依赖能否由剩下的依赖推出。BE→G是冗余的因为B→D、BD→G可以推出它CDE→A是冗余的因为CD→A直接给出ABC→A也是冗余的因为B→D得到DCD→A就给出了A。第三步消除左侧冗余属性。BD→G左侧的D是冗余的因为B→D从B能推出BD所以BD→G实际上等价于B→G直接收缩。这三步做完得到的就是答案里的集合。第二步最常出错因为判断“某条依赖能否由其余依赖推出”需要求闭包——比如要判断BE→G是否冗余就看在去掉它之后的F里BE的闭包是否还包含G。B→D、BD→G都在所以BE的闭包包含G这条依赖可以安全删除。判断顺序也是经验之谈我习惯先处理右部单属性再从左到右逐条检查依赖最后处理左侧冗余属性顺序反了容易越删越乱。4.3 无损连接判定表格法的一行一列都不能填错无损连接分解判定是必考步骤。第二套五题给了一个分解ρ{AD, AB, BC, CDE, AE}答案判定为有损。表格法要这样走。构造一张五行五列的判定表行对应分解后的关系模式列对应U中的属性。初始时如果某行对应的关系模式包含该属性就在对应位置填a加属性下标比如A列填a1否则填b加行号列号比如AD行的C列填b13。然后扫描函数依赖集把满足“左部属性取值相同”的行其右部属性改为一致。以A→C为例AD和AB两行的A列都是a1左部相同把两行的C列改成同一个值。C→D同理把AB行的D列改成a4——因为AD行已经有a4D是AD的属性。完整走完一遍之后判断标准只有一个是否存在某一行全部是a。有就是无损没有就是有损。这个分解最终没有任何一行是全a所以是有损连接分解。这里最容易翻车的是初始表构造行一定是分解的关系模式列一定是全集U的属性很多人把行列写反导致后面全错。另外每轮扫描结束后要反复检查是否有新的行间同步可以触发直到表格不再变化才能下结论。4.4 BCNF无损分解和3NF保持依赖分解两种分解的边界条件2NF、3NF、BCNF的层次关系在这套题里反复考。第一套的第十八题那句“关系模式分解为BCNF后函数依赖关系可能被破坏”是整张卷子里最容易被忽视的判断——BCNF分解保证无损但不保证依赖保持3NF分解保证依赖保持这是两个不同的目标。第二套五题要求无损分解到BCNF答案是ρ{AC, BD, ABE}。思路是找出违反BCNF的依赖A→C把A和C拆出来剩下的部分继续检查。A→C单独成表AC剩余属性B、D、E中B→C已经被拆掉剩下B→D违反BCNF再拆出BD剩下ABE满足BCNF。这个分解是无损的但因为丢掉了CE→A和DE→C它不保持函数依赖。而第一套五题要求的“分解为3NF保持函数依赖和无损连接性”则是另一套做法把最小函数依赖集里的每个依赖单独成表然后加上候选码。Fmin是{B→G, CD→A, CE→G, B→D, CDE→B}每个依赖生成一个关系模式BDG、ACD、CEG、BD、CDEB。合并左部相同的BDG和BD得到BDG加上候选码BCE或CDE所在的CDEB最终就是ρ{BDG, ACD, CEG, BCDE}。答案里的BCDE同时包含了候选码CE所以无损和依赖保持两个条件都满足。这里要记牢一个边界BCNF分解用“逐个拆违反范式”的算法目标是消除所有非平凡且非超码的函数依赖代价是可能丢依赖3NF分解用“依赖先成表再加候选码”的合成法目标是保住全部函数依赖。两者各有适用场景考试时看清楚题目要的是哪一个再动手。4.5 E-R图转关系模型一个M:N联系就要多一张表这类题在这套题库里也占了不少分值最典型的是第二套六题的图书馆数据库和第三套六题的医院管理系统。图书馆库的实体有读者读者号、姓名、地址、性别、年龄、单位和书书号、书名、作者、出版社联系是“借阅”一个读者可借多本书一本书可被多个读者借是M:N联系。转关系模型时两个实体各成一张表M:N联系单独建一张表主键由两端的实体主键组合而成再加上联系本身的属性。所以答案是读者读者号姓名地址性别年龄单位 书书号书名作者出版社读者号借出日期应还日期注意书表里也放进了读者号和借阅日期这是因为“书被借出”这件事情是借阅联系在书这一侧的体现。如果借阅属性里还有借阅流水号就更规范的做法是借阅读者号书号借出日期应还日期单独成表。第一套六题的汽车运输公司题也是这个套路——车队和司机是1:N聘用联系车队和车辆是1:N拥有联系司机和车辆是M:N使用联系最后“使用”单独成表。范式判断上这些分解后的关系模式基本都是BCNF因为单属性主键的表不存在部分依赖而联合主键的表只要没有属性只依赖于主键的一部分也满足BCNF。5. 数据库备考避坑指南九套卷里反复踩的五个翻车点5.1 GROUP BY的“陷阱题”教材口径和SQL标准不是一回事第一套第五题“使用GROUP BY Sno时Sno必须出现在哪个子句中”答案是Cselect。很多学生实际跑过数据库后会质疑我在MySQL里写SELECT Cno, AVG(Grade) FROM SC GROUP BY Sno明明也能跑原因是不同数据库实现不一样。MySQL默认关闭了ONLY_FULL_GROUP_BY时确实能跑但开启后会直接报错PostgreSQL则一直严格遵守标准。考研教材的表述是“被分组的列必须出现在SELECT中”这是国内数据库教材的惯用口径。备考时按教材答写真实项目时按SQL标准和ONLY_FULL_GROUP_BY模式调。现象的根源是教材与实现的表述差异解决方法是遇到这类题先确认题目来自哪个体系——考研真题按教材口径答实际开发按标准来。5.2 除运算对象看错括号里的并集被忽略第一套第三题的(R∪S)÷T一眼扫过去容易看成R÷T直接拿原表R做除法算出个完全不沾边的结果。除运算的被除关系必须先算括号里的R∪S合并R和S的全部行再去跟T比对。现象是算出多个A值答案只有唯一的a1原因是漏看了括号把复合表达式拆错解决方法是动手前先圈出括号范围明确被除关系的完整集合。这一丢就是3分整套题里类似的括号陷阱还有∏A,DσS.BT.B(S×T)里的选择条件别把笛卡尔积的结果写成两个表平铺。5.3 无损连接判定表的初始构造行和列填反后面全盘错表格法判定无损连接第一步就把行列搞反的人不在少数。现象是填出来的表和答案差很远扫描函数依赖时根本找不到可以同步的行原因是把“分解的关系模式当列、全体属性当行”正好反了解决方法是记住口诀“行是分解结果列是全集属性”——某个分解关系Ri包含属性Aj就在i行j列填a_j不包含的填b_ij。另外初始表填完后要先把表抄一遍再开始扫描依赖很多人在扫描过程中把初始值改乱了又没法回溯。5.4 视图的更新权限被高估分组视图根本不能更新第二套四题创建了包含MAX、MIN、AVG的分组视图课程成绩用户U1被授予了SELECT权限。很多学生做完这题会顺手往视图里INSERT或UPDATE试图“通过视图改底层数据”结果报错。现象是视图查询正常但更新报“视图不可更新”原因是分组聚合视图不是行列子集视图DBMS无法把视图行映射回基表的唯一一行所以不允许增删改解决方法是牢记“可更新视图必须是来自单表、包含主键、未使用聚合和DISTINCT的行列子集视图”。这和第一套十六题“视图运行后数据字典里存的是视图的定义”是同一个考点的两面——视图本质是把查询语句存起来不是把数据复制一份。5.5 系统故障和介质故障混为一谈恢复策略完全不一样填空题第9题问“造成系统停止运转、需要重新启动的事件”答案是系统故障。但很多人会写成介质故障。这两个概念在第二套选择题第18题里被明确区分过系统故障造成内存数据丢失介质故障才是硬盘数据丢失。现象是两个填空答案写反原因是用“严重程度”而不是“丢失对象”来区分故障类型解决方法是按恢复策略记忆——系统故障用重做撤销恢复介质故障需要先转储后援副本再配合日志文件把数据库恢复到故障点。数据库同步、恢复日志的考点都集中在这个知识点上别只看概念表面。6. 考前复盘把九套答案变成一张考点命中表最后一轮复习不适合再整章整章刷题而是要把九套题的答案反推成一张“考点命中表”。做法是准备一张A4纸横轴列章节三级模式、关系运算、SQL、规范化、并发控制、安全恢复、数据库设计纵轴写套数1到9每做对一套就往对应位置画一笔。做完之后这张纸会直接告诉你哪个格子最密——密集的地方是必考点空白和稀疏的地方要么是冷门知识要么是你回避了很久的弱项。我习惯配合三色标记红色标“概念理解错”比如把系统故障和介质故障搞混黄色标“计算失误”除运算少算一行、无损连接表填错蓝色标“教材口径有争议”比如GROUP BY那个题。这九套题做下来整理出的红色和蓝色条目通常不超过十条考前最后一天只看这两类就够。黄色条目属于手误到了考场上减速重算一遍就行不值得占用短期记忆。标记的时候留意跨套重复出现的题目模式。第一套和第二套都考了(R∪S)÷T和分组H AVING计数第三套和第五套都要求设计E-R图并判断范式等级——这些地方是出题人的舒适区命中率最高。考前花半小时把三套卷的规范化大题放在一起横向对比你会发现最小函数依赖集的三步走、无损连接表、3NF合成法翻来覆去就那几个动作真正需要临时想的只有E-R图里实体间是1:N还是M:N。这套PDF的扫描质量一般部分题目文字被OCR断成了单字但题目内容完整答案列在每套卷末尾做题时留意一下表述即可。从那以后我每次考前都会强制花最后半小时做一遍这张命中表把错题浓缩到一张纸上再进考场——这半小时换来的安心感比多刷三套题都值。希望帮到你。本文还有配套的精品资源点击获取
返回列表