☰
数据库试题包:三级模式、关系代数与SQL实战解析
2026/10/27 3:08:20 网站建设 项目流程

简介:这份中南大学数据库试题资料面向高校计算机相关专业学生及备考数据库课程考试的学习者,围绕数据库管理系统基础、数据模型、关系模型、SQL语言、数据库保护与设计理论等核心考点组织内容,可用于期末复习、知识点梳理与自测检验。压缩包内共1个doc文档,约164KB,以复习总纲加试卷的形式呈现,按章节归纳概述、ER模型、关系模型、SQL语言、数据库保护、关系数据库设计理论及数据库应用设计等模块,并附有选择题、填空题、术语解释与简答题等题型及参考答案。文档从三级模式结构、DDL与DML区分、索引与约束关系,到事务ACID、并发控制、函数依赖与范式分解均有覆盖,便于读者对照提纲逐章查漏补缺、熟悉命题角度与答题思路。目前已有357人学习,适合需要系统梳理数据库知识体系、提升应试能力的学习者参考使用。

1. 一份能当“错题本”用的数据库试题包

期末前两周,我翻出一份流传很久的数据库试题包,本来只想扫两眼,结果发现它比很多教材的章末习题更“贴考试”——从三级模式两级映象,到关系代数除法,再到 SQL 嵌套查询和 3NF 分解,几乎把一门数据库课能考的点都压了一遍。它由一份 29 页的复习总纲加四套试卷组成,总纲按 CH1 到 CH7 把概念、模型、SQL、保护、设计理论串成一条线,试卷则用选择、填空、术语解释、简答、应用题、SQL 编程六种题型反复锤同一批知识点。适合正在备考数据库原理的学生,也适合工作几年后想回头把关系模型和 SQL 底层逻辑重新捋一遍的开发者。下面我按“先看骨架、再动手做题、最后避坑”的顺序拆给你。

2. 先立骨架:三级模式与关系代数怎么串起来

2.1 三级模式两级映象是整份卷子的地基

这份资料里反复出现的一道题是“数据库系统的体系结构是几级模式几级映象”,答案固定为三级模式两级映象。很多人背了答案却说不清为什么,结果一换题型就翻车。三级模式指外模式、模式、内模式:外模式是单个用户看到的数据视图,模式是全体数据的逻辑结构,内模式是物理存储结构。两级映象则是外模式/模式映象和模式/内模式映象,前者保证逻辑独立性,后者保证物理独立性。试卷里有一道“要保证物理数据独立性需要修改什么”,正确选项是模式与内模式的映射,而不是内模式本身——这个区分点几乎每年都考。

我建议先把总纲 CH1 第 2 条和第 3 条抄在一张纸上,左边写三级模式,右边写两级映象,中间用箭头标出“谁变、谁不变”。比如内模式改了,模式不用动,因为模式/内模式映象会跟着调整;模式改了,外模式不用动,因为外模式/模式映象兜底。这样再去做选择题第 1、7、14 题,基本不会犹豫。总纲里还特意标了 P9 和 P16 两个页码,说明这些概念在教材里有原文出处,做题时对不上答案就回去翻那两页,比在网上搜零散解释靠谱。

2.2 关系代数五种基本运算要能手推

试卷(1)第 11 题问“五种基本关系代数运算”,答案是并、差、笛卡儿积、选择、投影,也就是 ∪、-、×、π、σ。注意交和连接不属于基本运算,它们可以由基本运算导出。这个点很容易记混,因为教材讲运算时往往把交和连接放在同一节。总纲 CH3 第 4 条把传统集合运算和专门集合运算分开列,传统的是交、并、差、笛卡儿积,专门的是选择、投影、连接、除法,但“基本”的只有五个,这个层次要分清。

应用题里有一组经典题:学生(学号,姓名,性别,年龄,所在系)、课程(课程号,课程名,先行课)、选课(学号,课程号,成绩),要求用关系代数求“选修了课程号 5 的学生学号和姓名”“没有选修课程号 5 的学生学号”“既选修 5 又选修 6 的学生学号”“选修了全部课程的学生学号和姓名”。前三个用选择、投影、连接加差集就能推出来,第四个是除法或双重否定。我一般会先在纸上把每个关系的属性列出来,再决定用 π 取哪些列、σ 卡什么条件、⋈ 按哪个公共属性连。比如“没有选修 5”就是全体学号减去选修了 5 的学号,写成 π学号(学生) - π学号(σ课程号='5'(选课))。这一步手推熟了,后面 SQL 里的 NOT EXISTS 才看得懂。

2.3 用一张对照表把 ER 模型和关系模型接上

总纲 CH2 讲 ER 模型三要素——静态结构、动态操作、完整性约束,CH3 讲关系模型和完整性约束。试卷(2)第 2 题问“关系模型中表示实体间 n:m 联系通过增加什么实现”,答案是增加一个关系。这个点如果只背结论,遇到“1:n 怎么转”又卡住。我习惯做一张小对照表:1:1 联系可以合并到任一端,1:n 联系把 1 端的主码放进 n 端当外码,m:n 联系必须单独建一个关系,主码是两端主码的组合。试卷(1)第 6 题的借阅关系“书号+读者号”能当码,就是因为同一读者对同一本书不能同时借多本,但可以多次借,所以还要加上借期才唯一——这类题考的就是对码的判定,不是死记。

提示:总纲里“作业(重点)”出现两次,分别在 CH2 和 CH3,说明 ER 转关系和关系代数推导是老师明确要求动手写的部分,别只当阅读材料看。

3. 动手做题:SQL 与规范化的可复现路径

3.1 建表、改表、建索引、建视图一条龙

试卷(1)第六题要求建教师工资表 teacher,字段包括 BH、XM、BM、JBGZ、BT、GHF、GJJ、SFGZ,主码 BH。原文给的 SQL 里表名拼成了 teacheer,还漏了 GHF 列,这是典型的笔误,照着抄会报错。我整理成可执行版本如下:

-- 建立教师工资表,主码为编号 BH CREATE TABLE teacher ( BH NUMBER(10) PRIMARY KEY, XM VARCHAR(20), BM VARCHAR(20), JBGZ NUMBER(10), BT NUMBER(10), GHF NUMBER(10), GJJ NUMBER(10), SFGZ NUMBER(10) ); -- 增加误餐费列,整型 ALTER TABLE teacher ADD (WCF INT); -- 按编号建普通索引 CREATE INDEX teach ON teacher(BH); -- 建视图,只暴露姓名、基本工资、实发工资,限定经管系 CREATE VIEW BMV AS SELECT XM, JBGZ, SFGZ FROM teacher WHERE BM = '经管系';

这段代码的逻辑顺序是“先有表,再加列,再建索引,最后建视图”。参数上要注意:主码用 PRIMARY KEY 声明后会自动建唯一索引,再手动建普通索引 teach 并不冲突,但如果是 UNIQUE INDEX 就要小心重复。视图 BMV 只存定义不存数据,所以后面如果往 teacher 插一条 BM 不是“经管系”的记录,通过 BMV 是查不到的。试卷里还问“视图上不能完成的操作”,答案是“在视图上定义新的基本表”,因为视图是虚表,不能当基表再派生基表,但可以在视图上再建视图。

3.2 嵌套查询和聚合要按执行顺序写

综合题里有一道“查询选修了‘数据库原理’这门课的学生的姓名”,原文用了三层嵌套:外层查学生姓名,中层查选课里的学号,内层查课程号。这种写法能跑,但可读性差,我一般改成 JOIN 或者把最内层先单独跑一遍验证:

-- 先确认课程号存在 SELECT 课程号 FROM 课程 WHERE 课程名 = '数据库原理'; -- 再用 IN 套回去查姓名 SELECT 姓名 FROM 学生 WHERE 学号 IN ( SELECT 学号 FROM 选课 WHERE 课程号 IN ( SELECT 课程号 FROM 课程 WHERE 课程名 = '数据库原理' ) );

参数说明:最内层只返回课程号集合,中层用 IN 匹配选课记录,外层再用 IN 取学生姓名。如果课程名有重名,内层会返回多个课程号,中层会把选了任一门的学号都带出来,这通常是题目想要的。另一道“查询选修了 5 门以上课程的学生学号”用 GROUP BY 加 HAVING:

SELECT 学号 FROM 选课 GROUP BY 学号 HAVING COUNT(*) >= 5;

这里 COUNT(*) 数的是选课记录条数,不是课程门数,如果同一学生同一课程有重复选课记录,结果会偏大。试卷数据里选课表主码是学号+课程号,所以不会重复,但实际库表设计时要注意这个前提。

3.3 函数依赖和 3NF 分解要动手推一遍

总纲 CH6 列了四种异常——插入异常、删除异常、更新异常、数据冗余,以及部分函数依赖和传递函数依赖。试卷(3)第五题给了一个学校关系模式:学号、姓名、所在系、系主任、课程名、成绩,函数依赖是学号→姓名、学号→所在系、所在系→系主任、(学号,课程名)→成绩。候选码是(学号,课程名),因为单靠学号推不出课程名,单靠课程名也推不出学号。这里“所在系→系主任”对候选码是传递依赖,所以不满足 3NF,需要分解成学生(学号,姓名,所在系)和系(所在系,系主任)两张表,再把选课成绩单独放。

我一般会按这个顺序检查:先找候选码,再看非主属性对码是部分依赖还是传递依赖,部分依赖拆到 2NF,传递依赖拆到 3NF。试卷(2)第 1 题问“任何一个包含两个属性的关系模式一定满足 3NF”,这个说法是对的,因为两个属性的关系不可能存在传递依赖,但“一定满足 BCNF”就不一定,要看具体函数依赖。这类判断题不手推一遍很容易被绕进去。

4. 避坑排查:这份试题包里最容易翻车的五处

4.1 现象:照着答案敲 SQL 报“表或视图不存在”

原因:原文有多处拼写错误,比如 teacheer、Selecct、Cteate view、CLUSTED INDEX,还有 INSERT 语句里中文分号和英文逗号混用。解决:把 SQL 先粘到编辑器里,用语法高亮扫一遍关键字,表名统一改成自己建的表名,再逐条执行。我习惯先跑 CREATE,再跑 ALTER,最后跑 INSERT 和 SELECT,每步看返回信息,不要一次性全选执行。

4.2 现象:关系代数题答案和试卷对不上

原因:试卷里“没有选修 5 号课程的学生学号”有两种写法,一种是全体学号差选修 5 的学号,另一种是用 NOT IN 思路写,但关系代数没有 NOT IN,只能用差集。原文有些答案省略了投影步骤,直接写连接,导致属性列对不上。解决:每一步都显式写出 π 和 σ,先保证列数一致再连接。比如求姓名时,先投影出学号和姓名,再和选课连接,不要直接拿学生全表和选课连。

4.3 现象:视图更新后基表数据没变

原因:视图如果是多表连接或者带聚合,通常是不可更新的;单表视图带 WHERE 条件时,插入的记录如果不满足条件,通过视图看不到,但基表里确实有。试卷(4)填空题提到 WITH CHECK OPTION,就是用来限制通过视图插入或修改的数据必须满足视图定义条件。解决:建视图时如果希望约束生效,加上 WITH CHECK OPTION;如果只是查询用,就不用加,但心里要清楚视图和基表的数据边界。

4.4 现象:并发控制题把“丢失更新”和“读脏数据”搞混

原因:两者都是并发问题,但丢失更新是两个事务同时改同一数据,后提交的覆盖先提交的;读脏数据是一个事务读到另一个事务未提交的数据。试卷(1)第 4 题问并发操作可能带来的问题,选项里有“丢失更新”,试卷(2)填空又考“丢失更新、不可重复读、读脏数据”三类。解决:记三个关键词——覆盖、重读不一致、读到未提交。再对应封锁协议:一级封锁协议防丢失更新,二级防读脏数据,三级防不可重复读。

4.5 现象:范式判断题凭感觉选,正确率不稳定

原因:题目常把“包含两个属性一定满足 3NF”和“一定满足 BCNF”放一起,或者问“3NF 同时又是几 NF”,答案是 1NF 和 2NF 都满足,因为范式是逐级包含的。解决:画依赖图,先标候选码,再标非主属性,逐条检查部分依赖和传递依赖。遇到“最高范式”类选项,从 1NF 往上筛,不要从 BCNF 往下猜。

5. 把试题包当训练集:三遍刷题法和一个自检脚本

第一遍按章节刷总纲,每读完 CH1 到 CH7 的一节,立刻做试卷里对应的选择题和填空题,错题标在总纲页码旁边。第二遍只做应用题和 SQL 题,关掉答案,限时 40 分钟,做完再对照原文答案,重点看自己漏了哪个投影列或者哪个连接条件。第三遍把四套卷子里重复出现的知识点列出来,比如三级模式、关系代数基本运算、ACID、3NF 分解、GRANT/REVOKE,这些就是高频考点,考前只看这些。

如果想把 SQL 题练得更扎实,可以建一个本地小库,把学生、课程、选课三张表灌进去,然后用一段脚本批量跑题目里的查询,看结果行数是否符合预期:

-- 建三张表并插入少量样例数据,用于验证试题里的查询 CREATE TABLE 学生 (学号 CHAR(5) PRIMARY KEY, 姓名 VARCHAR(20), 性别 CHAR(1), 年龄 INT, 所在系 VARCHAR(20)); CREATE TABLE 课程 (课程号 CHAR(5) PRIMARY KEY, 课程名 VARCHAR(30), 先行课 CHAR(5)); CREATE TABLE 选课 (学号 CHAR(5), 课程号 CHAR(5), 成绩 INT, PRIMARY KEY (学号, 课程号)); INSERT INTO 学生 VALUES ('95001','张三','男',20,'计算机系'); INSERT INTO 学生 VALUES ('95002','李四','女',21,'经管系'); INSERT INTO 课程 VALUES ('5','数据库原理',NULL); INSERT INTO 课程 VALUES ('6','操作系统',NULL); INSERT INTO 选课 VALUES ('95001','5',85); INSERT INTO 选课 VALUES ('95001','6',90); INSERT INTO 选课 VALUES ('95002','5',78);

这段脚本的作用是给试题里的查询提供最小可验证数据。参数上注意学号和课程号用 CHAR 定长,和试卷里的“95001”“5”对得上;选课表主码是学号加课程号,保证同一学生同一课程只有一条记录。跑完“选修了 5 号课程的学生学号和姓名”,应该返回张三和李四两行;跑“既选修 5 又选修 6 的学生学号”,只返回 95001。如果结果不对,先查 INSERT 有没有漏行,再查连接条件是不是写成了笛卡儿积。

最后说个我自己的习惯:每次刷这类试题包,我都会把原文答案里明显笔误的地方单独记一页,比如 teacheer、Selecct、CLUSTED,不是为了纠错而纠错,而是提醒自己考试时别把背下来的错误拼写带进答题卡。数据库这门课,概念题靠对照表,SQL 题靠手敲,关系代数靠画属性列,三样都过一遍,这份 29 页的总纲加四套卷子基本就吃透了。希望帮到你。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询