简介:数据库系统概论期末考试试题完整版面向计算机相关专业学生和数据库备考者,用于检验数据库基础、关系模型、SQL语言、事务处理与并发控制等核心知识的掌握情况。压缩包内含一个Word文档,整体大小仅为170KB,下载后可直接打印或在线查看。目前已有3502人学习使用,是期末复习与自测的热门资料。试题涵盖选择题、填空题、判断题、简答题和应用题等常见题型,知识点涉及物理数据独立性、数据库系统特点、关系代数运算、数据库设计步骤、数据库管理系统的功能、数据安全性、事务的原子性、一致性、隔离性与持久性、封锁机制以及数据库恢复方法等,部分题目附有解析或参考答案,方便读者对照查漏补缺。无论用于考前冲刺、日常练习还是教师组卷参考,都具有较高的实用价值。
1. 数据库系统概论期末考什么:从一道反直觉的判断题说起
这套「完整word版」期末试题在互联网上流传很广,但多数人拿它当题库刷,没看懂命题套路。开篇先看一道几乎人人都错的判断题:「如果属性X在函数依赖的左右都不出现,则候选码中必不包含X」,结论是错误——X反而必须包含在候选码里。第一直觉就把你带沟里,这正是期末卷的风格:选择填空考概念辨析,简答考定义准确度,应用和综合题集中考闭包计算、候选码、范式分解、ER图转关系模型和SQL。分值分布很稳定:选择填空占30到40分,判断简答15分左右,剩下45分全压在大题上。谁适合背这份题?期末考前突击、专升本专业课、考研复试机上问答,照这份真题摸清规律都能拿到保底分。
2. 关系代数与SQL:三大高频题型与答题模板
2.1 投影选择连接:关系代数表达式的书写顺序
关系代数的专门运算几乎每年必考。原题选择题直接问:取出满足条件的属性是投影,选出满足条件的元组是选择,按共同属性值连接两个关系是连接。概念分清只是入门,大题真正考的是组合写法。真题让检索「选修了程军老师所授课程之一的学生姓名」,标准答案长这样:
∏SNAME(S ⋈ SC ⋈ σTEACHER='程军'(C))答题顺序有讲究:先写选择,把条件落在具体关系上;再写自然连接,把三张表串起来;最后投影出目标列。最容易翻车的写法是先投影再连接,把连接属性S#、C#丢掉了,后面根本串不上。还有一种等价写法是先做笛卡尔积再选择,形式上对,但阅卷通常默认自然连接更标准。书写时注意:选择和投影的希腊字母要写对,选择是σ、投影是∏,混淆了整个式子就废了。
2.2 嵌套子查询与分组聚合:SQL真题的固定套路
SQL部分是送分题,但每次都有大批人栽在子查询和分组上。先看两道原题,都是最经典的考法:
-- 检索所有比“王华”年龄大的学生姓名、年龄和性别 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');这种题的内层子查询先执行,外层再拿结果去比较。比年龄那题注意子查询必须返回单值,所以条件写AGE > (...)而不是AGE > ANY(...);成绩最高那题则是「先定课程再套MAX」,两个条件一个都不能少。再看两道易错的分组题:
-- 检索学生姓名、选修课程号和成绩 SELECT SN, C#, GRADE FROM S, SC WHERE S.S# = SC.S#; -- 检索选修四门课程的学生总成绩 SELECT S#, SUM(GRADE) FROM SC GROUP BY S# HAVING COUNT(C#) = 4;第一道是多表连接,题目给了别名就用别名,没有别名也要写上表名前缀,S.S#=SC.S#就是连接条件。第二道是分组题,GROUP BY之后过滤组要用HAVING COUNT(C#)=4,写成WHERE COUNT(C#)=4直接报错。记住:SUM、COUNT这类聚合函数只能出现在SELECT或HAVING里,WHERE行过滤发生在分组之前,HAVING组过滤发生在分组之后。
2.3 等值连接与自然连接:简答题的标准答法
这是简答题里的常客,原题问「等值连接与自然连接的区别和联系」。直接背这个框架就能拿满:第一,自然连接一定是等值连接,但等值连接不一定是自然连接;第二,等值连接要求相等的分量不一定是公共属性,自然连接要求相等的分量必须是公共属性;第三,等值连接不除去重复属性,自然连接要除去重复属性。答题时先给两者的表达式写法,等值连接写R⋈S加条件,自然连接写R⋈S,然后按上述三点逐条展开。面试官最想听的就是「自然连接是去掉重复属性的等值连接」这一句核心,后面全是在解释它。
2.4 元组关系演算:不会也要能写出框架
元组关系演算是很多人的盲区,其实套模板就能拿分。原题要求用元组关系演算检索选修了程军老师课程的学生姓名和学号:
{T(1) | (∃U)(∃V)(∃W)(S(U) ∧ SC(V) ∧ C(W) ∧ T[1]=U[1] ∧ U[1]=V[1] ∧ V[2]=W[1] ∧ W[3]='程军')}框架分四段:目标属性声明T(1);存在量词遍历涉及的关系;连接条件用属性序号对齐;最后是选择条件。检索学号时只需要SC和C两个关系,因为学号就在SC表里;检索姓名才必须多一个S关系把学号换成姓名。考场上一紧张容易漏量词或漏连接条件,我的习惯是先写量词清单,再逐条写等值条件,最后补选择条件,顺序不会乱。
3. 闭包、候选码与范式分解:从计算到BCNF的完整链条
3.1 属性闭包:迭代三步,考场不丢分
闭包计算是函数依赖部分的地基,候码判断、范式分解全依赖它。原题给过一组典型的:函数依赖集F={D→G,C→A,CD→E,A→B},求D+、(AC)+和(ACD)+。标准算法是迭代:初始令X等于给定属性集;扫描F中每条函数依赖,若左边属性已经在当前闭包里,就把右边属性加进去;重复扫描直到闭包不再变化。用代码表达更清楚:
def closure(attrs, fds): result = set(attrs) changed = True while changed: changed = False for lhs, rhs in fds: if set(lhs).issubset(result) and not set(rhs).issubset(result): result |= set(rhs) changed = True return result # 原题验证 fds = [('D','G'), ('C','A'), ('CD','E'), ('A','B')] print(closure('D', fds)) # DG print(closure('AC', fds)) # ABC print(closure('ACD', fds)) # ABCDEG关键在迭代顺序:算(ACD)+时,第一轮先由D→G得到ABCDG,第二轮才轮到CD→E,因为现在C、D、G都在闭包里,CD作为左边成立,得到E,最终ABCDEG。很多人在第一轮就急着找CD→E,发现C在但D不在就跳过,但闭包计算本来就是多轮过程,一轮没变化才停。写完闭包最好反查一遍:每个被加入的属性都能找到对应的函数依赖,否则就是漏了。
3.2 候选码求解:L/R/LR/N四类属性判断法
候选码大题是期末和面试的双重高频点。先把属性分四类:只在函数依赖左边出现的叫L类,只在右边出现的叫R类,左右都出现的叫LR类,左右都不出现的叫N类。规则直接背:L类和N类属性必须进入候选码;R类属性必不进候选码;LR类属性需要逐一代入闭包验证。原题那道判断题说的就是N类:X在左右都不出现,没有任何依赖能函数决定它,它只能靠自己,所以候选码必含X。
真题求解:U={A,B,C,D,E},F={A→BC,CD→E,B→D,E→A}。分好类后逐个算闭包,A+=ABCDE成立;E+=ABCDE成立;组合BC的计算:(BC)+先得BD,再由CD→E得E,由E→A得A,再加A→BC,闭包也是ABCDE;CD同理。最终候选码是A、BC、CD、E四个。计算组合闭包时,最容易漏的是链路:BC→B→D→CD→E→A,这条链一旦走通就全通了。验证LR类属性时,只要有一个组合闭包能覆盖全集,这个组合就是一个候选码,但要注意子集不能再是候选码,BC成立了,单B和单C都不成立才合格。
3.3 范式分解:消灭部分依赖再消灭传递依赖
范式题占综合题半壁江山,原题给了完整的日产量例子。关系R(职工编号,日期,日产量,车间编号,车间主任),规定每个职工每天只有一个日产量、每个职工只属一个车间、每个车间只有一个主任。先写函数依赖:
(职工编号,日期)→ 日产量 职工编号 → 车间编号 车间编号 → 车间主任关键码是(职工编号,日期)。判断范式从1NF开始逐级查:这里非主属性车间编号、车间主任对码是部分依赖,因为单独职工编号就能决定它们,所以R只是1NF,不是2NF。分解成2NF要消除部分依赖:拆成R1(职工编号,车间编号,车间主任)和R2(职工编号,日期,日产量)。注意R1里的主码变成职工编号,R2的主码还是(职工编号,日期),外键职工编号维系联系。
再进3NF,检查R1:职工编号→车间编号→车间主任,存在传递依赖,所以R1不是3NF,继续拆成R11(职工编号,车间编号)和R12(车间编号,车间主任)。到这里全部模式都是3NF,而且决定因素都是候选码,也满足BCNF。整个分解过程就是先拆部分依赖、再拆传递依赖,每拆一步重写一遍函数依赖集,别在原关系上跳步。
3.4 Armstrong公理证明:合并规则的推导模板
综合题偶尔会直接考证明,原题让证明合并规则:若X→Z且X→Y,则X→YZ。Armstrong公理只用增广律和传递律就能完成:
因为 X→Y,对两边同时增广X,得 X→XY 因为 X→Z,对两边同时增广Y,得 XY→YZ 由 X→XY 和 XY→YZ,根据传递律,得 X→YZ证明题的关键是写清每一步用了哪条公理,括号标注是采分点。增广的对象要选对:第一步两边增广X,第二步两边增广Y,这样才能让XY作为中间桥梁。这类证明题型还有自合规则、分解规则,本质都是增广和传递的组合。答题时先写已知条件,再写每一步推导和依据,最后落结论。
4. ER图转关系模型:主键外键一次数清
4.1 实体转模式:七个实体对应七个关系
ER图转关系模型送分也容易丢分,核心就三条规则:实体各转一个关系模式,属性照搬;1:N联系在N端实体转出的模式里加外键;M:N联系单独转一个模式,主键是两端实体主键的组合。规则看着简单,考场上栽在细节:一是联系上的属性不能丢,要并入单独转出的联系模式里;二是外键标在哪个表里要想明白。原题里有一个经典的复杂案例,七个实体加八个联系,转换后正好十个关系模式。七个实体本身就转出七个模式,剩下三个来自M:N和M:N:P联系。
4.2 联系转模式:1:N、M:N、M:N:P的三种处理
把联系分类是第一步。1:N联系里,「1」端的主键放进「N」端模式中做外键,比如「交通管理大队管辖警察」,警察模式里加外键大队编号。M:N联系单独建表,主键是两端主键的组合,比如「驾驶员与车辆的违章」「车辆与车主的被盗」。M:N:P三元联系同样单独建表,主键是三个实体主键的组合,联系自带的属性也放这张表里。原题里违章和事故就是两个M:N:P联系,违章(违章编号,时间,地点,违章行为,处理结果,车辆牌号,驾驶证号,警号),这里主键是违章编号,三个外键分别是车辆、驾驶员、警察的主键。
4.3 真题演练:车辆管理系统的10个模式与13个外键
原题完整给出了这个车辆管理信息系统的转换结果,直接可背:
制造商(制造商编号,名称,地址) 交通管理大队(大队编号,地址,区域,电话) 警察(警号,姓名,性别,出生年月,大队编号) 车主(身份证号,姓名,地址,电话) 车辆(车辆牌号,型号,发动机号,座位数,登记日期,制造商编号,保险公司编号,车主身份证号) 驾驶员(驾驶证号,姓名,性别,地址,准驾车型,发证日期,保险公司编号) 保险公司(保险公司编号,名称,地址,电话) 违章(违章编号,时间,地点,违章行为,处理结果,车辆牌号,驾驶证号,警号) 事故(事故编号,时间,地点,事故简要,处理结果,车辆牌号,驾驶证号,警号) 被盗(被盗编号,被盗时间,被盗地点,找回时间,找回地点,车主身份证号,车辆牌号)主键总数10个,因为10个关系模式每个都恰有一个主键。外键总数13个,数法是看每个模式里除了主键之外、参考了别的表主键的属性:警察1个,车辆3个,驾驶员1个,违章3个,事故3个,被盗2个,合计13。这类题最后总问「主键外键总数」,做题时先标下划线再标波浪线,数完检查一遍,别漏了车辆表里同时有三个外键。
4.4 局部ER图合并:学生选课与教师任课的关系模型
另一道ER真题考设计流程:先画学生选课局部ER图,再画教师任课局部ER图,合并成全局ER图,最后转关系模型。合并时最容易丢分的是消除冲突:学生实体里有「单位」属性,单位又是一个独立实体,这种情况要统一成实体;课程在选课和任课两个局部都出现,合并后只保留一个课程实体。最终关系模型长这样:
单位(单位名,电话) 教师(教师号,姓名,性别,职称,单位名) 课程(课程编号,课程名,单位名) 学生(学号,姓名,性别,年龄,单位名) 讲授(教师号,课程编号) 选修(学号,课程编号)注意这里的联系全部下沉成了外键:教师和课程属于单位,所以单位名分别并入;讲授和选修是M:N,单独成表。全局ER图合并的考察点在「消重」和「统一」,答出两张局部图的关键实体和联系,再说明合并规则,就有大半分数。
5. 易错点:并发控制、视图与闭包的五个失分题
5.1 视图可串行化与冲突可串行化:结论错,反例在哪
原题判断「view可串行化的调度一定也是conflict可串行化的调度」,很多考生直接判对,因为觉得视图可串行化听起来范围更小更严格。实际上恰好相反,视图可串行化比冲突可串行化更宽,它只要求在初始读取、最终读取和最终写入上与某个串行调度等价,允许盲写操作存在;冲突可串行化要求的是通过交换非冲突操作达成等价。所以看法是:冲突可串行化一定视图可串行化,反过来不成立。答题模板先写「结论错误」,再给出反例说明存在盲写的调度就是反例,一句话就够拿分。
5.2 S锁权限:加锁后能读不能改
封锁那题的正确选项是:事务T可以对A加S锁读A,但不能修改A,其他事务只能再对A加S锁,不能加X锁。错选A的人最多,因为「共享」两个字让人以为S锁也能写。记住锁的相容矩阵:S锁与S锁相容、S锁与X锁不相容、X锁与任何锁都不相容。T自己对A加了S锁,如果再修改A就要升级为X锁,但升级意味着排斥其他S锁,所以不允许。做这类题只要把S理解成「只读共享」,X理解成「独占读写」,永不出错。
5.3 无损连接初始表:填a还是b_ij
无损连接判断的第一步是构造初始二维表,规则是:行对应分解后的关系模式,列对应全体属性;若第j个属性属于第i个关系模式,填a_j,否则填b_ij。很多人把不在当前关系中的属性也填成a,整个表全a,判断直接失真。真题R(U)分解成R1(A,B,C)、R2(C,D)、R3(D,E),初始表就是三行分别含ABC、CD、DE,其余位置填b_ij。然后逐条扫函数依赖:AB→C时没有两行的AB取值相同,跳过;C→D时R1和R2的C列都是a3,于是把R1的D列从b14改成a4;D→E时R1、R2的D列都是a4,把R1的E列改成a5。此时R1那行全部是a,分解就是无损连接。做题时按「找同左→改右列」的节奏推进,最后检查是否有一行全a。
5.4 候选码判定:左右都不出现的属性必须入码
这道判断题全场错误率最高。「属性X在函数依赖的左右都不出现」,考生的直觉是X跟任何依赖都没关系,候选码里可有可无。错就错在:正因为没有任何函数依赖能决定X,X的闭包只能从自身开始,而候选码必须能函数决定全部属性,所以X必须作为候选码的一部分出现。答题时按四类属性法来:L类必取、R类必弃、LR类逐个验、N类必取。原题给的F={AB→C,C→D,D→E}里没有N类属性,但换一组依赖后N类就冒出来了,审题先做分类。
5.5 操作异常:插入异常与删除异常的语义配对
规范化中的异常考过两道选择题:删除操作异常指不该删除的数据被删除,插入操作异常指应该插入的数据未被插入。错选的同学把「异常」理解成「操作报错」,选了「应该删除的数据未被删除」。用例子记:一个关系里学生信息和选的课绑在一起,删除选课记录时把学生整个信息也删掉了,这就是删除异常;新生还没选课,插不进关系里,这就是插入异常。答题时先判断语义:是数据没了还是数据进不来,再对应选项,能选准。
6. 考场四步法与押题方向:大题不慌的答题节奏
6.1 范式大题的完整流程:依赖→码→范式→分解
所有范式大题按四步走:第一步把题干的业务规则改写成函数依赖,有传递链条的拆开写,别合并写成复合依赖;第二步用四类属性法求候选码,候选码不唯一就把所有候选码都列出来;第三步按1NF、2NF、3NF、BCNF逐级判断,每一级都要写依据(存在局部依赖所以不是2NF,存在传递依赖所以不是3NF);第四步分解,先消部分依赖再消传递依赖,每分解一次就把新模式的函数依赖重写一遍。SQL题也有一套固定节奏:先确认涉及几张表、连接条件是什么,再写WHERE行过滤,最后考虑GROUP BY和HAVING。时间分配建议:选择填空控在20分钟,简答15分钟,综合题优先做范式分解和ER转换,各留20分钟,SQL最后写,因为SQL只要连接条件对就有分。
6.2 押题方向与易混对比
从这份题看,最可能继续考的方向有三个:无损连接判断、BCNF逐步分解、M:N:P三元联系转关系模型。并发控制部分要会看图判断异常类型:两个事务读同一值后各自修改写回是丢失修改,一个事务读了另一个事务回滚前的值是读脏数据,同一事务两次读同一数据结果不同是不可重复读。原题那份T1读A=100改200后回滚、T2读200的图,就是读脏数据。安全性部分重点背GRANT句式:
GRANT SELECT ON TABLE Student TO U1;五个易混点考前过一遍:外码是被参照表主键的副本,主键是自身表唯一标识;视图只存定义不存数据;S锁可读不可写;物理数据独立性针对存储结构改变,逻辑数据独立性针对全局逻辑结构改变,应用题里如果问应用程序要不要改,看变的是存储还是逻辑模式。我自己当年考场的血泪经验:闭包计算第一轮发现没变化太早停手,少推一步丢一整道大题。从那以后,每道范式题我都强制走一遍「分属性类→求闭包→找全候选码→逐级判范式」的流程,闭包每轮都推到循环条件不成立才停手。这套流程能让你在考场上少踩一半坑,希望帮到你。
本文还有配套的精品资源,点击获取