我备考全国计算机三级数据库考试那会儿,最头疼的其实不是选择题和设计题,而是填空题——它不像选择题有选项提示,也不像设计题可以靠步骤拿分,考的就是你对理论知识点的精确记忆程度。但我后来发现,填空题恰恰是所有题型里最"讲道理"的一种:它挖空的位置往往是概念定义里的关键词、体系结构里的专有名词、时间先后顺序、以及各种容易混淆的边界条件。只要把知识体系按模块梳理清楚,填空题反而成了拿分最快的部分。
这篇总结就是围绕三级数据库考试的理论知识考点,以填空题的形式把常见挖空点和易错点整理出来。适合正在备考的考生,也适合想快速回顾数据库理论基础的开发者。我会按考试大纲的模块顺序逐一拆解,每个模块都给出高频考点、填空陷阱和记忆方法,最后再聊聊答题顺序和复习节奏的安排。
1. 考试模块划分与填空命题规律
1.1 三级数据库的知识体系组成
全国计算机三级数据库科目(通常称作"数据库技术")考察的内容有明显的主线:数据模型→数据库设计→数据库管理→数据库新技术。这四块不是割裂的,而是层层递进的关系。数据模型解决"怎么描述数据"的问题,数据库设计解决"怎么把现实世界转化为表结构"的问题,数据库管理解决"表建好之后怎么保证安全、完整、并发和故障恢复"的问题,数据库新技术则是延伸知识。
填空题的命题基本遵循"重点恒重"的规律。几乎每年都会考的知识点包括:三级模式结构(外模式、模式、内模式)、两级映像、E-R图向关系模式的转换规则、函数依赖与范式判断、事务的ACID特性、并发控制中的封锁协议、数据库恢复技术中的转储和日志。这些是必拿分的内容,复习时不能有侥幸心理。
1.2 填空题的挖空位置和作答要求
观察近几年的真题你会发现,填空题挖空有三条规律。
第一,挖专有名词。比如"数据库系统的核心是________",答案是"数据库管理系统"或"DBMS",这类题考察的是你对概念层级关系的理解。第二,挖关键限定词。比如"在E-R模型中,联系的类型包括一对一、一对多和________",答案是"多对多",这类题考察精确记忆。第三,挖流程顺序。比如"数据库设计的第一个阶段是________",答案是"需求分析",这类题考察过程性知识的先后顺序。
作答时要注意:官方教材中的表述是最标准的答案来源。比如"数据库管理系统"和"DBMS"都能得分,但"数据库管理软件"这种说法就危险了。填写时优先写全称,除非题目明确要求写缩写。另外,填空题对错别字是零容忍的,"关系"写成"关糸"、"模式"写成"摸式",机器阅卷直接判错,这点一定要在平时练习时就养成检查习惯。
2. 数据模型与数据库体系结构:概念类填空的必考区
2.1 三级模式与两级映像
这一块是概念类填空题的常青树,考了十几年依然坚挺。核心知识点就三句话:外模式对应视图,是用户能看到的数据视图,又称用户模式或子模式;模式对应基本表,是数据库中全部数据的逻辑结构和特征的描述,又称逻辑模式;内模式对应存储文件,是数据物理结构和存储方式的描述,又称存储模式。
填空时最容易出错的地方是"模式"这个概念的归属。记住:模式是"全体数据的逻辑结构和特征",强调的是整体逻辑结构,而外模式是"某个用户或应用涉及的部分数据的逻辑结构和特征",强调的是局部视图。题目如果写成"数据库系统中,全体数据的逻辑结构和特征的描述称为________",答案就是"模式",不是"外模式"。
两级映像涉及两条规则:外模式/模式映像保证了数据的逻辑独立性,模式/内模式映像保证了数据的物理独立性。填空题经常把这两个倒过来考,我建议用一句话记忆:"外模式变,改映像不动模式;内模式变,改映像不动模式。"逻辑独立性对应表的增减、视图的变化不影响应用程序,物理独立性对应存储设备、存储方式的变化不影响逻辑结构。
2.2 数据模型的组成要素
数据模型由数据结构、数据操作、完整性约束三部分组成。数据结构描述系统的静态特性(即数据及其之间的联系),数据操作描述系统的动态特性(即对数据的允许操作),完整性约束描述数据的取值范围和联系之间的制约。
这里有个高频挖空:关系模型的数据结构是________,答案是"二维表"或"关系"。注意,"关系"这个答案在教材中是接受的,但如果你写"表格",部分阅卷标准可能不认。数据结构、数据操作、完整性约束这三要素中,数据结构是数据模型的基础,因为完整性约束和数据操作都是在数据结构之上定义的。
2.3 关系模型的完整性约束
关系模型的完整性规则包括三类:实体完整性、参照完整性、用户定义完整性。实体完整性规定主属性不能取空值,参照完整性规定外码的值要么取空值(要求该外码不是所在关系的主属性),要么等于被参照关系中某个元组的主码值。
填空题最常考的点是:"关系模型中,________完整性要求主属性不能取空值",答案是"实体";"________完整性要求外码的值必须与参照关系中的主码值一致或为空值",答案是"参照"。容易混淆的是用户定义完整性,它是针对具体应用环境的约束,比如年龄字段的取值范围。
我还遇到过一种考法,给出一个具体场景问你违反了哪类完整性。比如往一个学生表中插入一条记录,学号为空,问违反了哪条规则。答案是实体完整性。如果插入一条记录的系别编号,在系别表中找不到对应记录,问违反了哪条规则。答案是参照完整性。这类场景题比直接背诵定义更能拉开分差。
3. SQL语言核心知识:从语法到语义的填空点
3.1 SQL语言的类别划分
SQL(结构化查询语言)按功能分为四类:数据查询语言(SELECT)、数据定义语言(CREATE、ALTER、DROP)、数据操纵语言(INSERT、UPDATE、DELETE)、数据控制语言(GRANT、REVOKE)。
填空题常考的点是:GRANT语句属于________语言,答案是"数据控制"。CREATE语句属于________语言,答案是"数据定义"。我整理了一张对照表方便记忆。
| 功能类别 | 代表语句 | 作用对象 |
|---|---|---|
| 数据查询 | SELECT | 检索数据 |
| 数据定义 | CREATE、ALTER、DROP | 定义或修改数据库对象 |
| 数据操纵 | INSERT、UPDATE、DELETE | 增删改数据 |
| 数据控制 | GRANT、REVOKE | 授权与回收权限 |
实际考试不会直接问"SQL分几类",而是给出具体语句让你归类,或者反过来,说某类功能包含哪些语句。这类题本质是精确记忆,没有理解负担,背熟就能得分。
3.2 SELECT查询中的聚合与分组
SELECT语句的完整执行顺序是:FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY。填空常见考法有两个:一是直接问WHERE和HAVING的作用范围区别,二是考聚合函数的使用位置。
WHERE子句作用于基本表或视图中的行,在分组之前过滤;HAVING子句作用于分组后的结果集,在分组之后过滤。聚合函数(COUNT、SUM、AVG、MAX、MIN)不能在WHERE子句中使用,但可以在HAVING子句中使用。这就是为什么判断能否用WHERE对分组结果筛选时,答案总是"不能,需用HAVING"。
GROUP BY和HAVING的搭配也是个热点。题干给出"查询每个部门的平均工资,要求平均工资大于5000的部门",第一步要GROUP BY部门,第二步要HAVING AVG(工资)>5000。填空时经常挖掉"GROUP BY"或"HAVING"这两个关键字,你要能从题目语义判断是在分组之前还是之后过滤。
3.3 连接查询与视图
连接查询分为内连接、外连接。内连接只返回满足连接条件的行,外连接则保留一侧的全部行。左外连接(LEFT OUTER JOIN)保留左关系的所有元组,右外连接(RIGHT OUTER JOIN)保留右关系的所有元组,全外连接(FULL OUTER JOIN)保留两侧所有元组。
填空题常挖的点是:"连接查询中,________连接返回左关系中所有元组,即使右关系中没有匹配的元组",答案是"左外"。注意题目中的限定词"即使右关系中没有匹配",看到这个描述就应该想到左外连接。
视图是一个虚表,它不占用物理存储空间,只是保存了对应的SELECT语句。基表数据变化时,视图中的数据也随之变化。填空时要注意"视图对应数据库体系结构中的________",答案是"外模式"。有的同学会把视图和模式混淆,其实视图就是外模式的一个具体实现形式,这点在第三节第三小节也提到过。
4. 关系数据库理论:函数依赖与范式判断的填空逻辑
4.1 函数依赖的概念和分类
函数依赖是关系数据库理论的核心。X能唯一决定Y,记作X→Y,读作"X函数决定Y"或"Y函数依赖于X"。完全函数依赖指在X中不存在真子集也能决定Y,部分函数依赖指X的真子集就能决定Y,传递函数依赖指X→Y、Y→Z且Y不包含于X,且Y不决定X。
填空题最常见的考法是:"在关系模式R(U)中,如果X→Y,且对于X的任意真子集X',都有X'不决定Y,则称Y________依赖于X",答案是"完全函数依赖"。对比记忆:如果X→Y,且存在X的真子集X'使得X'→Y,则称Y对X是部分函数依赖。
我还遇到过一种典型的陷阱。给定关系模式"选课(学号,课程号,成绩)",问"成绩"对"(学号,课程号)"的函数依赖类型。因为学号→成绩不成立,课程号→成绩也不成立,只有(学号,课程号)才能决定成绩,且任一真子集都不能决定成绩,所以答案是"完全函数依赖"。但如果换成"学生(学号,系别,系主任)",系主任传递依赖于学号,因为学号→系别,系别→系主任。
4.2 范式的判定与分解标准
第一范式(1NF)要求每个分量必须是不可分的数据项;第二范式(2NF)要求每个非主属性完全函数依赖于码;第三范式(3NF)要求每个非主属性不传递依赖于码;BC范式(BCNF)要求每个决定因素都包含码。
填空时最常考的是各范式定义中的关键限定词。比如"满足2NF的关系模式,消除了非主属性对码的________函数依赖",答案是"部分";"满足3NF的关系模式,消除了非主属性对码的________函数依赖",答案是"传递"。
这里有个易错点:BCNF和3NF的区别。BCNF要求在3NF基础上,消除主属性对码的部分和传递依赖。也就是说,3NF只约束非主属性,BCNF对主属性也有约束。题目如果写成"消除了所有属性对码的部分和传递依赖,则该关系模式属于________",答案就是BDCNF。注意题目中的限定词"所有属性",有这个词就锁定BCNF。
4.3 候选码的求解和主属性判断
求候选码的方法虽然简单,但填空题有时会变换角度考察。给定关系模式R(A,B,C,D)和函数依赖集F={A→B, B→C, D→A},问属性集是否包含在候选码中。计算闭包可知,D的闭包包含全部属性,所以D是候选码;A的闭包包含A、B、C,不包含D,所以A不是候选码。
主属性是包含在任何一个候选码中的属性。这里的"任何一个"是关键限定词。填空题如果写成"包含在________候选码中的属性称为主属性",答案就是"任何一个"或"某个"。我记得这个表述出现过不止一次,因为教材原文就是"包含在任何一个候选码中的各属性称为主属性"。
5. 数据库设计六阶段:流程类填空的重灾区
5.1 六阶段的先后顺序
数据库设计的六个阶段按顺序是:需求分析→概念结构设计→逻辑结构设计→物理结构设计→数据库实施→数据库运行和维护。这是严格的流程顺序,填空题直接挖掉其中一个空让你填前后阶段的情况非常常见。
我有一个辅助记忆的口诀:"需概逻物实运维",即需求、概念、逻辑、物理、实施、运维。按照这个顺序记牢,即使题目把阶段打乱,你也能马上定位。
选择题和填空题都喜欢考察"哪个阶段产出数据字典"、"哪个阶段产出E-R图"这类对应关系。需求分析阶段产出数据字典和数据流图,概念结构设计阶段产出E-R图,逻辑结构设计阶段产出关系模式,物理结构设计阶段确定存储结构和存取方法。这几个对应关系必须烂熟于心。
5.2 E-R图向关系模式的转换规则
E-R图向关系模式转换是三级的经典考点。转换规则可以总结为三条:一个实体型转换为一个关系模式,实体的属性就是关系的属性,实体的码就是关系的码;一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并;一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并;一个m:n联系必须转换为一个独立的关系模式。
填空题最常见的挖空是:"E-R图中,m:n联系转换为关系模式时,该关系模式的码是________",答案是"两端实体码的组合"或"各端实体码的组合"。注意不是某一端的码,而是组合码。比如"学生"和"课程"之间的"选课"联系是m:n,转换为关系模式"选课(学号,课程号)"后,码是(学号,课程号)这个属性组。
5.3 物理设计中的索引与存储
物理结构设计阶段主要任务包括:确定数据的存储结构、确定数据的存取路径(即索引)、确定数据的存放位置、确定系统配置参数。填空时经常出现"物理结构设计阶段,确定数据的存取路径主要指确定________",答案是"索引"。
聚集索引和非聚集索引的区分是另一个高频点。聚集索引的索引项顺序与表中记录的物理顺序一致,一个表只能有一个聚集索引;非聚集索引不影响记录的物理存储顺序,一个表可以有多个非聚集索引。题目写成"一个基本表上最多只能建立一个________索引",答案是"聚集"。
我实际复习时发现,最容易背反的是这两条:聚集索引决定物理顺序,非聚集索引不决定物理顺序。你只要抓住"聚集"这个词天然带有"聚合、归并、排序"的意思,就不会搞混。
6. 数据库管理四大块:安全性、完整性、并发控制与恢复
6.1 安全性与存取控制
数据库安全性控制的核心机制是存取控制。自主存取控制(DAC)通过GRANT和REVOKE实现,用户对不同的数据库对象有不同的权限;强制存取控制(MAC)通过给主体和客体分配敏感度标记来实现。三级数据库考试以自主存取控制为主,强制存取控制了解即可。
填空常考的点是:"SQL中用于回收权限的语句是________",答案是"REVOKE";"用于授予权限的语句是________",答案是"GRANT"。这两个几乎是送分题,就看你能不能准确拼写。
用户权限的组成包括数据对象和操作类型两部分。比如"用户对某个表的SELECT权限",对象是"表",操作类型是"SELECT"。填空题如果写成"权限由数据对象和________两部分组成",答案是"操作类型"。
6.2 完整性控制与断言、触发器
完整性控制分为三类(实体完整性、参照完整性、用户定义完整性),但这一节更常考的是实现手段。实体通过PRIMARY KEY约束实现,参照完整性通过FOREIGN KEY约束实现,用户定义完整性通过CHECK约束、NOT NULL约束等实现。
填空题常挖的点是:"参照完整性通过________实现"——注意这里到底填"外键约束"还是"FOREIGN KEY"?在三级数据库考试中,中文答案"外键约束"和英文"FOREIGN KEY"都被接受,但更稳妥的做法是看题目本身是中文还是英文风格决定。
触发器是用户定义在关系表上的一类由事件驱动的特殊过程。它由触发事件、触发条件和触发动作三部分组成。填空有时会挖"触发器由触发事件、触发条件和________三部分组成",答案是"触发动作"或"触发动作体"。这个表述版本稍有差异,但我建议以官方教材为准,记住"三部分组成"的完整表述。
6.3 事务与并发控制
事务的ACID特性分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。填空经常直接挖掉某个特性的英文或中文名称。比如"事务的________特性指事务要么全部执行,要么全部不执行",答案是"原子性"。
并发控制的主要技术有两类:封锁技术和时间戳技术。三级数据库以封锁技术为主。封锁分为共享锁(S锁)和排他锁(X锁)。S锁和S锁可以共存,S锁和X锁不能共存,X锁和X锁不能共存。这张兼容矩阵是必背内容。
两段锁协议是并发控制的重要考点。两段锁协议规定:所有事务必须分两个阶段对数据项加锁和解锁,即扩展阶段(只能加锁)和收缩阶段(只能解锁)。填空写成"两段锁协议将事务分为扩展阶段和________阶段",答案是"收缩"。
6.4 数据库恢复技术
恢复技术依赖的数据是转储和日志文件。转储分为静态转储和动态转储、海量转储和增量转储。静态转储在转储期间不允许对数据库进行任何存取、修改操作,动态转储则允许。海量转储每次转储全部数据库,增量转储只转储上次转储后更新的数据。
填空常考的点是:"日志文件用于记录事务对数据库的________操作",答案是"更新"或"修改"。注意日志记录的是更新操作,不是查询操作。
恢复策略中,利用日志文件恢复时,对已经提交但未写入数据库的事务,需要________(重做),答案是"REDO"或"重做";对未提交的事务,需要________(撤销),答案是"UNDO"或"撤销"。这个对应关系务必记牢。还有一种考法是反过来,给出"发生故障时已提交但尚未写入物理数据库的事务",问你恢复时要做什么操作,答案仍然是REDO。
7. 填空题答题技巧与高频易错点
7.1 看题圈定范围的判断方法
做填空题先不要急着填,先看题目有没有给出限定词。比如"数据库系统的核心是________",核心这个词告诉你答案只能是数据库管理系统(DBMS),不可能是数据库本身,也不可能是数据库管理员。再比如"关系模式中,________完整性要求主属性不能取空值",看到"主属性"和"不能取空值",锁定"实体完整性"。
判断范围还有一个小技巧:看空格前后的句式。教材原文通常是"……称为……"或"……是指……"的句式,你只要回忆教材中的标准表述即可。比如"数据库长期存储在计算机内有组织、大量、共享的数据集合",这句话如果挖掉"共享",你就应该联想到教材中数据的三个基本特点:长期存储、有组织、可共享。
7.2 高频易错点的专项整理
我在备考时总结了一份易错点清单,列在下面供参考。
第一个易错点是"数据库管理系统"和"数据库系统"混用。数据库系统(DBS)是在计算机系统中引入数据库后的系统,由数据库、数据库管理系统、应用系统和数据库管理员组成。数据库管理系统(DBMS)是系统软件。填空时如果上下文强调"由……组成",答案就是"数据库系统";如果强调"是一种软件",答案就是"数据库管理系统"。
第二个易错点是"外模式"和"视图"的关系。外模式是概念层面的术语,视图是SQL层面的实现。填空题问"对应外模式的数据库对象是________",答案是"视图";问"数据库体系结构中的外模式又称________",答案是"用户模式"或"子模式"。
第三个易错点是"DBA"和"数据库管理员"的混写。填空题要求填中文就填中文,要求填缩写就填缩写,不要自己切换。多数情况下题目会直接给出"数据库管理员"的缩写形式"DBA"供选择,你要看清楚空格前后有没有带括号的提示。
第四个易错点是"关闭"和"收缩"的混淆。两段锁协议中,第一阶段是扩展阶段,第二阶段是收缩阶段。有的同学会填"解锁阶段",这个答案不算完全错误,但标准答案还是"收缩阶段"。教材的表述是哪两个词,你就用哪两个词,不要自行替换。
7.3 答题节奏和检查方法
考试中填空题的整体分值不算最高,但性价比非常高。我建议按顺序答题,遇到没把握的填空题先标记跳过,不要在单个空上耗超过一分钟。等试卷全部做完后,再回头逐空检查。
检查时要重点看几个点。检查前后逻辑是否一致,比如题干中出现"不是""不能""不会"这类否定词时,答案往往要反过来填。检查数值单位,比如"数据库系统的核心是________"这类题不涉及数值,但有些题会涉及"第________范式""________个阶段"这类明确的数量词。检查是否有明显的拼写或错别字,特别是英文字母的大小写,GRANT和grant在机上阅卷时可能被区分对待。
我在考场上吃过一次亏:把"网状模型"写成了"网络模型"。网状模型对应的是"记录型"和"系",网络模型是另一个概念。这类一字之差,在填空题里就是零分和满分的区别。所以平时练习填空题时,每道题都先在草稿纸上写一遍,再和标准答案逐字比对,能有效减少这类失误。
7.4 针对性刷题建议
刷填空题不建议用题海战术,因为考点确实比较集中,重复率很高。我建议的方法是:先按模块把近几年的填空题分类整理,然后针对每个模块做一次填空默写。
具体操作是这样的:把每个高频考点做成填空卡片,正面写题目,背面写答案。卡片的题目来源可以是真题,也可以是自己根据教材内容改编的。做完一遍后,把错题单独挑出来再做成"错题卡片",重点背诵。一个月下来,高频考点基本能形成肌肉记忆。
特别提醒:不要只背答案而不看题目。填空题考场上的干扰主要来自于题干表述的细微差别。同样一个考点,真题可能从概念定义、作用对象、流程顺序等不同角度出题。你只有把题目和回答视为一个整体反复记忆,才能保证在不同问法下都能准确作答。
纯理论背诵容易枯燥,我的经验是找一个资料搭子,互相出填空题考对方。给对方出题的过程会让你主动梳理考点,被对方提问的过程又能暴露记忆盲点。这个方法比我一个人埋头刷题有效得多,也推荐你们尝试。
最后再分享一个考前一周的实用技巧:把平时整理的填空卡片按"已掌握"和"未掌握"分成两组,每天只背未掌握的那组,背会了就移到已掌握组,直到全部清零。这样到上考场前一天,你手上剩下的卡片数量会越来越少,心理压力也会小很多。祝愿备考顺利,填空题全部拿满分。