ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

软考数据库系统工程师:拉开差距的不是SQL而是通用基础与计算题

软考数据库系统工程师:拉开差距的不是SQL而是通用基础与计算题

简介:《软考数据库系统工程师复习资料 完全版》面向准备软考中级数据库系统工程师的考生,也可供需要梳理数据库与计算机基础知识的自学者使用。内容按十五章组织,从计算机系统知识、数据结构与算法、操作系统、程序设计基础、网络与多媒体基础,延伸到数据库技术基础、关系数据库、SQL语言、数据库设计、网络与数据库及数据库新技术,并覆盖系统开发与运行、知识产权和标准化等公共知识模块。正文以条目化笔记呈现,包含指令执行过程、CPU组成、Flynn分类、关系模型与SQL语言等高频考点,便于按章节系统复习、定位薄弱环节和考前速览。压缩包共1个docx文件,大小约2.93MB,单文件结构便于检索与打印。已有2347人学习,适合作为备考主线资料或配套查漏补缺使用。

1. 软考数据库系统工程师最反直觉的一点:拉开差距的不是 SQL

很多人一听「数据库系统工程师」,第一反应就是把 SQL 和范式刷熟。但真正做过几套题的人会发现,上午卷里大量单选落在计算机系统、数据结构、操作系统这些通用基础上,题面短、计算量大、答案唯一,会就是会,蒙不出来;数据库那部分反而靠一套固定的推理套路就能拿稳。这场考试考的是「基础扎实、推理规范、答到采分点」三件事。

这份完全版资料按十五章铺开,从计算机系统知识一路排到标准化基础知识,前面的通用基础决定你能不能及格,后面的数据库主线决定你能拿多稳。它适合已经上手刷题、但每次都在计算题和概念题上来回翻车的人——把公式和结论背成条件反射,比多刷十套卷子管用。

2. 计算机系统知识:CPU 寄存器、流水线时间与磁盘容量的三类必考算式

这是整份资料的第一章,也是最容易被低估的一块。它的特点是「知识点碎、考法固定」,所有题目都能归到三类:寄存器与寻址的识别题、公式套用的计算题、概念对比的辨析题。第一类靠记,第二类靠算,第三类靠一张对比表。下面按这三类拆开。

2.1 指令与寻址:控制器里那几个寄存器谁管什么

几乎所有讲 CPU 的题,最后都要落到「某个部件的功能是什么」上。资料里给的结构很清楚:CPU 由运算器和控制器组成,控制器内部又包含程序计数器 PC、指令寄存器 IR、指令译码器 ID、状态条件寄存器、时序产生器和微操作信号发生器。

按职责记就不会混:PC 管「下一条指令在哪」,每取一条指令自动加一个单位,程序发生转移时把转移地址送进 PC;IR 管「当前这条指令长什么样」,存放的是正在执行的整条指令;ID 管「这条指令要干什么」,对操作码部分分析,确定指令类型、要完成的操作和寻址方式。三者是「地址→指令→动作」的顺序关系,考试喜欢把 PC 和 IR 的描述对调来设陷阱。

指令执行的过程固定为四步:取指令、指令译码、按操作码执行、形成下一条指令地址。而 CPU 的基本功能是程序控制、操作控制、时间控制和数据处理,其中数据处理是 CPU 的根本任务——这个「根本」二字经常被拿出来做选项区分。

寻址方式是另一处高频点。资料点明了两种:操作数直接包含在指令中,是立即寻址;操作数的地址包含在指令中,是直接寻址。按这个逻辑往下推一层,如果指令中给出的是「操作数地址的地址」,那就是间接寻址。判断方法只有一个——看指令里装的是值、是地址、还是地址的地址:

寻址方式指令中给出的是访存次数(取操作数)
立即寻址操作数本身0
直接寻址操作数的地址1
间接寻址操作数地址的地址2

再往上一层是 Flynn 分类,考法通常是「某类计算机属于哪种模型」。资料里的结论要背成一句话:同一时刻一条指令流处理一个数据流是 SISD;一条指令同时对一组数据运算,是 SIMD,向量计算机就是典型;多个处理单元各自执行不同指令流、同一数据流顺序通过线性阵列,是 MISD,只适合特定算法;多指令流多数据流是 MIMD。商用并行机里 MIMD 最通用,SIMD 次之,MISD 最少用。

还有一个辨析题常出:计算机体系结构解决的是「总体上、功能上要解决什么」,计算机组成解决的是「逻辑上如何具体实现」。这句话背下来,选项里凡是把两者说反的,直接排除。

提示:控制器六大部件里,只有 PC 会「自动增加」,其他部件都是被动工作,看到「自动增加」就锁定 PC。

2.2 流水线与可靠性:三个公式、两种题型

流水线这块,资料给了两个技术指标:吞吐率和建立时间。吞吐率是单位时间内流水线流出的结果数;流水线不是一开机就满速,要经过一段建立时间才达到最大吞吐率。若 m 个子过程耗时都是 t0,建立时间是 m×t0。

n 条指令全部执行完的时间,按流水线重叠原理推:第一条完整流过 m 段要 m×t0,之后每过一个 t0 就流出一条,剩下 n−1 条共需 (n−1)×t0。所以

T = m × t0 + (n − 1) × t0 吞吐率 TP = n / T 加速比 S = 串行执行时间 / 流水执行时间 = (n × m × t0) / T

这里有个血泪经验:不少老笔记把公式抄成 (n−1)×m×t0,等于把建立时间又乘了一遍,算出来的答案会明显偏大。考场上按 t0 算,如果四个选项里只有一个量级合理,那基本就是它。

一道典型题:某流水线分 5 段,每段 2ns,连续执行 100 条指令,求总时间和吞吐率。代入 T = 5×2 + 99×2 = 208ns,TP = 100/208 ≈ 0.48 条/ns,也就是约 4.8 亿条/秒。加速比 = 100×5×2 / 208 ≈ 4.8。注意加速比永远小于段数 m,这是检验答案的快捷方式——如果算出来大于 5,一定错了。

可靠性部分要分清三个概念:平均无故障时间 MTBF = 1/λ,λ 是失效率;可用性 A = MTBF / (MTBF + MTTR),MTTR 是平均修复时间;可靠度 R(t) = e^(−λt),是随时间衰减的概率。三种模型的公式必须分开记:

  • 串联系统:R = R1×R2×…×RN,失效率 λ = λ1+λ2+…+λN。串联是「一个坏全坏」,所以可靠性相乘。
  • 并联系统:R = 1 − (1−R1)(1−R2)…(1−RN)。并联是「全坏才坏」,所以先算全坏的概率再取反。
  • m 模冗余系统:按资料给出的组合公式计算,本质是「m 个里至少有 n+1 个正常就算正常」。

典型题:两个部件可靠性都是 0.9,串联就是 0.81,并联就是 1 − 0.1×0.1 = 0.99。这类题不难,难在题目里混进「失效率」让你先换算,λ 的单位通常是 10⁻⁵/小时这种量级,注意别漏掉指数。

顺带把安全等级和病毒这两块带走。计算机安全等级分四组七个等级,从高到低是 A1、B3、B2、B1、C2、C1、D,D 是最低级。病毒的特点记五个词:寄生性、隐蔽性、非法性、传染性、破坏性;类型按资料给的对应关系记——系统引导型对应 BOOT 型,文件外壳型攻击 command.com 这类文件,混合型如 Flip、One Half,目录型只改目录项不动文件本身,宏病毒寄生在带宏的文档里。「只改目录项、不改文件」是区分目录型病毒的关键描述。

2.3 磁盘容量与码制校验:两段最容易算错的分数

磁盘计算是上午卷的常客,公式本身不难,坑全在细节。资料给的几个公式要连同注释一起记:

  • 磁道数 =(外半径 − 内半径)× 道密度 × 记录面数。注意记录面数不是盘片数乘 2,因为有 n 个双面盘片时,记录面数是 n×2−2,第一面和最后一面是保护面,要减掉。
  • 非格式化容量 = 位密度 × π × 最内圈直径 × 总磁道数。这里必须用最内圈,因为位密度恒定而周长越往里越小,用最内圈算出来才是每道都能容纳的量。
  • 格式化容量 = 每道扇区数 × 扇区容量 × 总磁道数。
  • 格式化平均数据传输率 = 每道扇区数 × 扇区容量 × 盘片转速。
  • 非格式化平均数据传输率 = 最内直径 × π × 位密度 × 盘片转速。
  • 存取时间 = 寻道时间 + 等待时间,寻道是磁头移动,等待是目标扇区转到磁头下方,平均等待时间通常取旋转半圈的时间。

典型题:8 个双面盘片、道密度 100 道/mm、外半径 50mm、内半径 10mm,求磁道数。记录面数 = 8×2−2 = 14,磁道数 =(50−10)×100×14 = 56000 道。如果忘了减保护面,会算成 64000,选项里两个数常常同时出现,这就是专门给你准备的后悔药。

另一个高频小公式:内存容量 = 末地址 − 首地址 + 1。地址是十六进制时先转十进制再算,别忘了加 1,因为首尾两个地址都占一个单元。

码制这块,四个概念的关系要理清:正数的反码、补码与原码相同;负数的反码是原码按位取反、符号位不变;负数的补码是反码末位加 1;移码是把补码的符号位取反。运算规则记两条就够用:[X+Y]补 = [X]补 + [Y]补,[X−Y]补 = [X]补 + [−Y]补,而 [−Y]补 的求法是把 [Y]补 连同符号位一起全部取反再加 1。资料里把减法写成 [X]补 − [Y]补,实际做题统一转成加法更不容易错。

校验码两个考点。CRC 用模二除法,模二除法就是「不计进位的除法」,本质是异或,余数就是校验位。海明校验先算校验位数:2^r ≥ k + r + 1,k 是信息位数。比如信息位 8 位,代入 r=4 得 16 ≥ 13 成立,r=3 得 8 ≥ 12 不成立,所以校验位是 4 位。这类题只要不等式列对,就是纯算术。

加密部分作为记忆型考点处理:对称加密的加密密钥和解密密钥相同,DES 对 64 位数据分组、有效密钥 56 位、做 16 轮编码,IDEA 的明文密文都是 64 位、密钥 128 位;非对称加密用公钥加密、私钥解密,典型是 RSA。信息摘要用单向散列函数,MD5 输出 128 位,SHA 输出 160 位。数字签名反过来用——私钥加密、公钥解密,用于验证身份和完整性。SSL 提供三项服务:用户和服务器的合法性认证、加密数据以隐藏传输内容、保护数据完整性。

3. 计算类考点:树的性质、PV 操作与地址变换的通用解法

第二章数据结构与第三章操作系统,表面上是两块内容,考试里却是同一类题——给出条件、套用结论、算出唯一答案。这类题的性价比最高,因为套路固定、不需要临场发挥。下面按「树与查找」「进程与死锁」「存储与地址」三块拆。

3.1 二叉树的四个性质与查找结构的判定

二叉树性质是必背项,四条要能默写:第 i 层上结点数最多 2^(i−1);深度为 K 的二叉树最多有 2^K − 1 个结点;任意二叉树中,叶子结点数 n0 与度为 2 的结点数 n2 满足 n0 = n2 + 1;具有 n 个结点的完全二叉树深度为 ⌊log2 n⌋ + 1。

第三条最常考,因为它不需要画图。典型题:一棵二叉树有 10 个度为 2 的结点,求叶子结点数,答案直接是 11。第四条考法相反,给结点数求深度:n = 1000 时,⌊log2 1000⌋ = 9,深度为 10。注意是向下取整再减一,不是四舍五入。

树与二叉树的转换,资料给的口诀是:左孩子不变,兄弟结点变为左孩子的右孩子。配套结论更重要——树的前序遍历与对应二叉树的先序遍历一致,树的后序遍历与二叉树的中序遍历一致。这句话在选择题里几乎每年换皮出现,记住「前对前、后对中」就不会乱。

线性表这块有两个小结论。顺序存储的地址计算:LOC(ai) = LOC(a1) + (i−1)×L,L 是每个元素占的字节数,考法是给首地址求末地址,或反过来。插入和删除的平均移动次数:顺序存储插入平均移动 n/2 次,删除平均移动 (n−1)/2 次,链式存储则是改指针、不移动元素。题目问「平均移动次数」时,先看是顺序还是链式,链式直接答 0。

查找结构要分清三个概念。二分查找有两个硬性前提:必须是顺序存储结构,必须按关键字有序排列,缺一个就不能用。二叉排序树是动态查找表,定义是左子树所有结点值小于根、右子树所有结点值大于根,且左右子树本身也是二叉排序树。平衡二叉树在二叉排序树基础上加一条:任一结点左右子树深度相差不超过 1,结点的平衡度定义为右子树深度减左子树深度,所以取值只能是 1、0、−1。这里的符号方向经常被改,题目如果给「左减右」,那平衡度的正负就整个反过来,看题干定义再动手。

图论部分全是结论题,记三条:有向图中所有顶点的出度之和等于入度之和;任何图中边数等于所有顶点度数之和的一半;有向完全图边数为 n(n−1),无向完全图边数为 n(n−1)/2。最后一条容易混,判断方法是有向图每条边有方向,A 到 B 和 B 到 A 是两条边,所以是无向的两倍。

散列表的考法偏概念:散列是把任意长度的输入通过散列算法变换成固定长度的输出,这个输出是散列值,散列表可以动态创建。冲突处理常考线性探测和链地址法,前者往后找空位、容易堆积,后者同义词挂成链表、查找要遍历链。

3.2 PV 操作与死锁:把自然语言翻译成不等式

操作系统这块,PV 操作是唯一必须动笔的题型。先把三个概念钉死:临界资源是需要互斥方式共享的资源,比如打印机;临界区是每个进程中访问临界资源的那段代码;信号量 s 是整数变量。

P 操作的规则:s = s − 1,若 s < 0,进程暂停执行并放入该信号量的等待队列。V 操作的规则:s = s + 1,若 s ≤ 0,从等待队列唤醒一个进程。注意 P 是「先减再看」,V 是「先加再看」,两个判断条件一个是小于 0、一个是小于等于 0,这两个不等号是整道题的命门,抄错一个后面全错。

互斥模型最简单:信号量 mutex 初值为 1,进入临界区前 P(mutex),退出临界区后 V(mutex),中间夹着临界区代码。因为初值是 1,第一个进程 P 完变成 0 不阻塞,第二个进程 P 完变成 −1 就排队,逻辑自洽。

生产者—消费者模型要三个信号量:mutex 初值 1,控制对缓冲区的互斥访问;empty 初值 n,表示空闲缓冲区数量;full 初值 0,表示已有产品数量。生产者先 P(empty) 再 P(mutex),放产品,然后 V(mutex)、V(full);消费者先 P(full) 再 P(mutex),取产品,然后 V(mutex)、V(empty)。

注意:两个 P 操作的顺序不能交换。如果生产者先 P(mutex) 再 P(empty),当缓冲区满时它会抱着互斥锁去等空位,消费者又拿不到锁去取产品,双方僵持,这就是死锁。V 操作的顺序无所谓,因为 V 不会阻塞。

死锁的判定有一个直接套用的不等式:系统要不发生死锁,资源数至少为「进程数 ×(每个进程所需资源数 − 1)+ 1」。典型题:5 个进程,每个最多需要 4 个同类资源,问至少需要多少个资源才不会死锁。按公式 5×(4−1)+1 = 16。原理是最坏情况下每个进程都拿到 3 个、各差 1 个,此时再多 1 个资源就能让某个进程跑完并释放,从而全部推进。

另外两个小点:前趋图是一个有向无循环图,画的时候不能出现环;进程通信的间接通信靠信箱,发送时若信箱未满就放入并释放等待者,否则发送者进入等待信箱状态,接收时若信箱有信就取出一封并释放等待者,否则接收者等待。

3.3 页式、段式与 Cache:地址是怎么拼出来的

存储管理三种方式的地址变换,是下午题和上午题都爱考的内容。核心只有一句话:把逻辑地址拆成几段,查表换掉其中一段,再拼回物理地址。

页式存储:逻辑地址 = 页号 + 页内地址,页表项 = 页号 + 块号(内存块号)。拆分公式是 P = INT[A/L],d = A MOD L,A 是逻辑地址,L 是页面大小。物理地址 = 块号 × L + 页内地址。举个具体例子:页面大小 4K(4096),逻辑地址 8196,则页号 = 8196 ÷ 4096 = 2,页内地址 = 8196 mod 4096 = 4;若页表中第 2 页对应块号 5,物理地址 = 5×4096 + 4 = 20484。页内地址的位数由页面大小决定,4K = 2¹²,所以页内地址 12 位。

段式存储:逻辑地址 = 段号 + 段内地址,段表项 = 段号 + 段长 + 基址。物理地址 = 基址 + 段内地址。段式和页式最大的区别是段长不固定,所以段表里必须有段长字段做越界检查,这也是段式「有逻辑性、便于保护」的原因。

段页式:逻辑地址 = 段号 + 段内页号 + 页内地址,一个段表加一组页表,需要查两次表,所以地址变换速度最慢。资料里给的数据结构是对的,考法一般是问「访问几次内存」或者「哪一级表存段长」。

三种虚拟存储方式的对比要能一句话说清:页式页表硬件少、查表快、主存零头少,但分页没有逻辑性,不利于存储保护;段式有逻辑性、便于共享和保护,但会产生碎片;段页式折中,代价是地址变换慢。

Cache 的三种映像方式,判断关键是「主存地址被切成几段」:

映像方式主存地址划分对应关系
直接映像主存区号 + 块号 + 块内地址区内按位置一一对应,块号必须相等
全相联映像块号 + 块内地址任意块可映射到任意 Cache 块,靠地址变换表
组相联映像区号 + 组号 + 组内块号 + 块内地址组间直接映像,组内全相联

Cache 性能两个公式:平均周期 t3 = μ×t1 + (1−μ)×t2,μ 是命中率,t1 是 Cache 周期,t2 是主存周期;使用 Cache 后提高的倍数 r = t2 / t3。典型题:Cache 周期 1ns,主存周期 10ns,命中率 0.95,则 t3 = 0.95×1 + 0.05×10 = 1.45ns,提速倍数 = 10 / 1.45 ≈ 6.9 倍。这里注意别把命中率代错位置,0.95 乘的是快的那个。

替换算法四种:随机替换、先进先出、近期最少使用(LRU)、优化替换。资料特意说明 LRU 比 FIFO 好,但也不能保证过去不常用将来也不常用;优化替换要先执行一次程序统计替换情况。理论依据是程序的局部性——时间局部性指最近访问的单元可能马上再被访问,空间局部性指相邻单元可能马上被访问,工作集理论就是在这个基础上提出来的,工作集页面不在内存会导致频繁调页,严重时出现「抖动」。

文件系统部分记两个数:FAT16 的磁盘分区容量 = 簇大小 × 2¹⁶;打开文件(open)的作用是把文件的控制信息从辅存读到内存。Spooling 技术的特点有三条:提高 I/O 速度、把独占设备改造成共享设备、实现虚拟设备功能。

4. 数据库主线:关系代数、范式判定与 SQL 的踩分点

前面三章是及格线,数据库这部分是拉开档次的地方。它的题有一个共同特征:答案不唯一但采分点唯一,写对关键词就给分,写得多不等于得分多。下面按「关系代数与模式」「范式与分解」「SQL 与设计」三块讲。

4.1 三级模式与关系代数:下午题的第一道坎

数据库技术基础这块,最该刻进脑子里的是三级模式两级映像。外模式是用户看到的数据视图,模式是全体数据的逻辑结构,内模式是数据的物理存储结构。两级映像对应两种独立性:外模式/模式映像保证逻辑独立性,模式改变时改映像、外模式不动,应用程序不用改;模式/内模式映像保证物理独立性,存储结构变了改映像,逻辑结构不动。这道题的经典问法是「修改存储结构时,需要修改哪一层」,答案永远是映像,不是模式。

数据模型三要素是数据结构、数据操作和完整性约束,三者缺一不可。关系模型的完整性约束分三类:实体完整性要求主码非空且唯一;参照完整性要求外码的取值必须是被参照关系中已存在的主码值,或者为空;用户定义完整性是具体业务规则,比如年龄必须在 0 到 150 之间。

关系代数是下午题的第一道坎,五个基本运算加三个扩展运算要能互译。基本运算是并、差、笛卡尔积、选择、投影,交和连接可以由基本运算推出。写法上要注意:选择用 σ、投影用 π、连接用 ⋈、除用 ÷,投影会自动去重,这是和 SQL 的 SELECT 不一样的地方。

典型题的套路是先翻译再优化。比如「查询选修了全部课程的学生姓名」,先用除运算表达「学生 ÷ 课程」,再投影出姓名。写关系代数时按「先选后连、最后投影」的顺序写,采分点是每一步的运算符号和属性集,顺序写反一般也认可,但属性写错就没分。

4.2 范式判定与模式分解:从函数依赖推答案

范式判定是数据库部分最像数学题的一块,但它的推理链是固定的:先找候选码,再判断依赖类型,最后对号入座。

第一步找候选码。方法是看哪些属性从没出现在任何函数依赖的右边,这些属性一定属于候选码,再逐步加属性做闭包,能推出全部属性就是候选码。第二步判断依赖:完全函数依赖是决定因素不可再拆,部分函数依赖是只依赖组合码的一部分,传递函数依赖是 A→B、B→C 导致 A→C。

四个范式的判定标准逐级加码:1NF 要求每个属性不可再分;2NF 在 1NF 基础上消除非主属性对码的部分函数依赖;3NF 在 2NF 基础上消除非主属性对码的传递函数依赖;BCNF 要求每一个决定因素都包含候选码,比 3NF 更严。

典型题:关系 R(A, B, C),函数依赖 A→B、B→C,候选码是 A。A→B 是完全依赖,B→C 是非主属性 C 对码 A 的传递依赖,所以 R 满足 2NF 但不满足 3NF。如果题目再加一个 C→A,那么 C 也成了决定因素且包含码,范式结论就要重新推。

模式分解考两件事:无损连接和保持函数依赖。无损连接的判定可以用表格法,也可以记结论——分解成两个关系时,如果公共属性是其中一个关系的码,就是无损连接。保持函数依赖的判断方法是把分解后各关系的函数依赖求并,看能否推出原关系的全部依赖。

Armstrong 公理三条要能默写:自反律(若 Y 包含于 X,则 X→Y)、增广律(若 X→Y,则 XZ→YZ)、传递律(若 X→Y、Y→Z,则 X→Z)。由这三条推出的合并、分解、伪传递规则在解题时直接用,不必每次从头证。

4.3 SQL 与数据库设计:按采分点写,不按顺序写

SQL 是下午题的必考项,写法上要记住一句话:按采分点写,不按自然顺序写。评分看的是你有没有出现该有的关键字和子句,不是看排得整不整齐。

-- 建表时必须写清楚三个约束:主键、外键、非空/唯一 CREATE TABLE score ( sno CHAR(8) NOT NULL, -- 学号,非空 cno CHAR(4) NOT NULL, -- 课程号,非空 grade DECIMAL(5,1) CHECK (grade BETWEEN 0 AND 100), PRIMARY KEY (sno, cno), -- 复合主键,实体完整性 FOREIGN KEY (sno) REFERENCES student(sno) -- 参照完整性 ); -- 分组加条件:WHERE 过滤行,HAVING 过滤组,顺序不能颠倒 SELECT sno, AVG(grade) AS avg_grade FROM score WHERE grade >= 60 -- 先筛行 GROUP BY sno -- 再分组 HAVING COUNT(*) >= 3; -- 最后筛组

上面两段的采分点分别是:建表题看主键、外键、约束类型有没有写全,其中复合主键要用括号括起来;查询题看 WHERE 和 HAVING 的位置是否放对、聚合函数有没有配 GROUP BY。这两个位置一旦写反,即使结果对也会被扣分——因为数据库系统工程师考的是「你懂不懂执行顺序」,不是「你能不能碰巧跑出结果」。

SQL 还要会写视图、授权和嵌入式部分。视图的采分点是 CREATE VIEW 后面跟查询语句,作用是简化查询和提高安全性;授权用 GRANT 和 REVOKE,WITH GRANT OPTION 表示可以转授权;嵌入式 SQL 注意区分主变量和游标,游标用于结果集多行的情况。

事务这块记 ACID 四个特性:原子性、一致性、隔离性、持久性。并发控制的封锁有两个类型:排他锁 X 锁,加了之后别人既不能读也不能写;共享锁 S 锁,加了之后别人能读不能写。两段锁协议要求事务的封锁分扩展阶段和收缩阶段,扩展阶段只能加锁不能释放,收缩阶段只能释放不能加锁。隔离级别从低到高是读未提交、读已提交、可重复读、串行化,级别越高并发度越低。

数据库设计是下午大题的常客,六阶段是:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、运行维护。其中概念结构设计的产物是 E-R 图,逻辑结构设计的产物是关系模式,两个阶段的分界线就是「有没有落到表」。

E-R 图转关系模式的规则要背成三类:

  • 1:1 联系:可以合并到任意一端的关系模式里,把另一端的码作为外码加进去。
  • 1:n 联系:合并到 n 端,把 1 端的码作为外码放进 n 端。
  • m:n 联系:必须单独建一张表,主码是两端码的组合,联系本身的属性一起放进去。

物理设计阶段关心的是索引、存储结构和分区,题目常问「为哪个属性建索引」,判断标准是这个属性是否频繁出现在查询条件和连接条件里,同时区分度要高。

最后两块是记忆型送分区。数据库发展趋势与新技术方向的高频词是数据仓库、OLAP、数据挖掘、NoSQL、云数据库和分布式数据库,分布式数据库的透明性分三种:分片透明、位置透明、复制透明。知识产权和标准化属于纯背题,常考软件著作权的产生时间、保护期限,以及标准的层级划分(国际、国家、行业、地方、企业)和 GB 强制性标准与 GB/T 推荐性标准的区别。这部分不占分值大头,但每年都有一两分,属于不能丢的分。

5. 易错点:五类年年有人踩的坑与纠正答法

刷题刷到一定量会发现,错的不是新知识,而是同样的五类陷阱换个说法。这一章按「错在哪 → 为什么错 → 怎么答对」拆开,建议对照着把自己错过的题归一次类。

5.1 计算类三个高发翻车点

第一类:流水线总时间多乘了 m。错在把公式写成 m×t0 + (n−1)×m×t0,或者干脆写成 n×m×t0。为什么错——流水线的核心是「重叠」,除了第一条指令要完整流过所有段,后面的指令是每过一个 t0 就流出一条,不存在再乘 m 的道理。怎么答对:先算建立时间 m×t0,再加 (n−1)×t0,最后用「加速比必须小于段数 m」做反向验算,只要算出的加速比大于等于 m,立刻回头检查。

第二类:磁盘记录面数没减保护面。错在直接用盘片数乘 2。为什么错——资料里明确写了第一面和最后一面是保护用的,n 个双面盘片的记录面数是 n×2−2。怎么答对:养成习惯,看到「盘片数」先在草稿上写「记录面数 = 盘片数×2−2」,再往磁道数公式里代。如果题目给的是「记录面数」而不是盘片数,就不用减,看清题干给的是哪个。

第三类:非格式化容量和格式化容量公式混用。错在算非格式化容量时用了「每道扇区数×扇区容量」。为什么错——非格式化容量只看位密度和周长,是物理介质的原始容量;格式化容量才按扇区算,因为格式化会划出扇区和间隙,实际可用容量比非格式化小。怎么答对:抓关键词,「位密度」出现就是非格式化,「扇区数」出现就是格式化;两者都用最内圈计算,因为位密度恒定、内圈周长最小,是每道都能满足的下限。

5.2 概念与设计类两个混淆点

第四类:PV 操作里两个 P 的顺序写反。错在生产者先 P(mutex) 再 P(empty)。为什么错——mutex 是互斥锁,初值 1,一旦某进程拿到锁就会一直持有;如果它在持有锁的情况下因为缓冲区满而阻塞,其他进程再也拿不到锁,形成死锁。怎么答对:记一句口诀「先资源、后互斥,V 的顺序随便」。生产者先 P(empty) 申请空位、再 P(mutex) 抢锁;消费者先 P(full) 申请产品、再 P(mutex) 抢锁。判断一个 PV 序列对不对,就看有没有人在持锁状态下等待另一个信号量。

第五类:范式判定漏掉主属性。错在只盯着非主属性看,一看到「没有传递依赖」就答 3NF。为什么错——3NF 和 2NF 约束的是非主属性,BCNF 约束的是所有决定因素,如果存在主属性对码的部分依赖或传递依赖,3NF 可能满足但 BCNF 一定不满足。怎么答对:判范式固定走三步——先求候选码,把所有主属性标出来,再逐条检查每个函数依赖的决定因素是否包含候选码。只要有一个决定因素不含码,就停在 3NF;全部包含,才是 BCNF。

提示:E-R 图转关系模式时,m:n 联系单独建表这一条最容易被跳过,因为图上看只是一个菱形。答题时先把所有菱形列出来,逐个判断是 1:1、1:n 还是 m:n,再决定合并还是新建。

6. 答题技巧:上午题的时间分配与下午题的动笔顺序

上午卷全是单选,题量大、单题分值低,最大的敌人不是不会,是卡在某道计算题上出不来。我的建议是把 75 分钟切成三段:前 40 分钟把能一眼看出答案的题全部过完,遇到需要动笔算超过 90 秒的,画个圈跳过;中间 25 分钟集中处理画圈的题,这部分基本都是流水线、磁盘、可靠性、地址变换这类套公式的题,公式写在草稿纸上就能算;最后 10 分钟涂卡并回头检查那些「选项里有两个很像」的概念题。

下午卷是主观题,动笔顺序比上午更关键。我的习惯是先扫一遍五道大题,按「SQL 与关系代数 → 数据库设计 → 范式与分解 → 其他」的顺序做,因为前两类采分点最清晰、最容易拿满。写 SQL 时先写框架再补条件,建表题把主键、外键、非空三行单独列出来,哪怕后面写不完,这三行也是分。E-R 图题先在草稿上标出所有联系的类型,再往答题区画,画错了擦掉重画的时间比想清楚再画贵得多。

下面这张表是我自己按题型整理的时间分配,可以直接照着练:

题型建议用时拿分策略
概念辨析单选30 秒/题见过就选,没见过就排除绝对化表述
公式计算单选90 秒/题先写公式再代数,算完用加速比或量级验算
SQL 与关系代数15 分钟先写框架,主键外键和 WHERE/HAVING 位置优先
数据库设计20 分钟先标联系类型,再转关系模式,最后补主外码
范式与分解15 分钟先求候选码,再逐条比对决定因素

还有一个从翻车里学来的习惯:凡是题目里出现「最多」「至少」「平均」这三个词,我都在题干上画一道线再动笔。「最多」对应上限公式(如深度 K 的二叉树最多 2^K−1 个结点),「至少」对应死锁那个 +1 的不等式,「平均」对应插入 n/2、删除 (n−1)/2 和旋转半圈。这三个词一旦看漏,公式再熟也会套错方向。从那以后我每次做计算题,都强制走一遍「圈关键词、写公式、代数字、反向验算」这四步,慢是慢了一点,但正确率稳下来之后,速度快反而是自然结果。

希望这份拆解能帮你把该背的背成条件反射,该练的练成肌肉记忆,考场上少一次回头改答案的犹豫。

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进