简介这份资源是钱学忠《数据库原理及技术》教材的配套习题答案面向正在学习数据库课程的高校学生、备考人员及自学者用于对照练习、巩固课堂所学并解决做题中的疑难。内容围绕数据库设计、SQL语言、关系数据库理论、数据库管理系统与数据库管理等核心主题展开可配合教材逐章核对答案、梳理E-R模型转换、关系代数与范式规范化等易错知识点。资源以rar压缩包形式提供包内文件总数暂未明确整体约16.69MB体积轻便便于本地保存与随时查阅。目前已有693人学习下载具备一定的使用参考基础。对于需要课后自测、理清习题思路、补齐概念短板的读者这份答案可作为教材学习的辅助材料帮助在练习中加深对数据库设计与管理的理解。1. 数据库原理这场考试丢分从来不在大题上翻开任何一份数据库原理的期末卷子最先被扣分的往往不是最后那道 15 分的综合设计题而是前面填空、选择、判断里那些“看着眼熟、写出来就错”的小点。范式判断少写一个依赖、SQL 里 GROUP BY 和 HAVING 位置颠倒、事务四个特性背成五个、ER 图里联系类型标反——这些题单题 2 到 3 分加起来能吃掉整张卷子三分之一的分数。数据库这门课的考点分布有个很明显的特征概念题占比高、计算题套路固定、设计题有模板可循真正需要临场发挥的空间很小。换句话说这是一门“背到位、练到位就能拿分”的课翻车的人多半不是没学而是没按考点结构去学。这份笔记面向正在刷题库、准备期末或补考的人把考点分布、高频题型和答题模板拆开讲配合题库答案逐题对照适合已经过了一遍教材、需要把分数从及格线往上拉一截的读者。2. 考点分布四类题型的分值结构与拿分优先级2.1 概念题占三成先保住送分区间数据库原理卷面通常由四块构成概念识记填空、选择、判断、SQL 与关系代数计算、规范化与依赖推导、数据库设计与事务并发。概念题的分值一般在 25% 到 35% 之间考的是定义边界而不是理解深度。比如“数据库系统的三级模式结构”考的是外模式、模式、内模式各自对应什么视图以及两级映像分别保证什么独立性再比如“完整性约束”考的是实体完整性、参照完整性、用户定义完整性三者的适用对象。这类题在题库里重复率极高同一道判断题换个说法反复出现把答案背熟比现场推理快得多。拿分优先级上概念题排第一因为投入产出比最高。一个晚上把题库里所有填空和判断过一遍标记出错题第二天再刷一遍错题基本能把这一块稳住。SQL 计算题排第二因为语法结构固定练的是手熟。规范化和设计题排第三需要理解推导过程但套路同样固定。事务并发排第四概念多但考法集中把封锁协议和隔离级别两张表背下来就能覆盖大部分题目。提示概念题里最容易混的是“数据独立性”和“数据完整性”前者讲的是模式变更不影响上层程序后者讲的是数据本身要满足约束答题时看清问的是哪一个。2.2 计算与设计题的分值锚点SQL 和关系代数部分通常占 20% 到 25%题型集中在多表连接查询、分组统计、嵌套子查询和关系代数表达式转换。规范化部分占 15% 到 20%核心是求候选码、判断范式等级、分解到 3NF 或 BCNF。数据库设计占 15% 到 20%从需求描述画 ER 图、转关系模式、标主外键。事务与并发控制占 10% 到 15%考封锁类型、两段锁协议、隔离级别与并发异常对应关系。这四块的分值锚点决定了复习顺序先把概念题的错题清零再把 SQL 的六种典型句式练到不看答案能写出来然后攻候选码求解和范式判断最后背事务部分的对照表。题库答案的价值在于每一道题都能对照出自己错在哪一步而不是只看对错。比如一道求候选码的题答案给的是推导过程你要对照的是自己漏掉了哪个属性闭包而不是只记最终结果。2.3 真题演练一道范式判断题的完整推导题目给定关系 R(A, B, C, D)函数依赖集 F {A→B, B→C, A→D}判断 R 最高属于第几范式。答题思路分三步。第一步求候选码计算 A 的闭包A 能推出 B、C、D所以 A 是候选码再看其他属性B 的闭包是 B、C推不出 A 和 DC 和 D 单独更推不出全部属性所以候选码只有 A。第二步看主属性候选码是 A主属性只有 AB、C、D 都是非主属性。第三步逐个检查函数依赖A→B 中 A 是候选码不违反B→C 中 B 不是候选码C 是非主属性存在非主属性对候选码的传递依赖违反 3NF同时 B→C 左边不是候选码也违反 BCNF。结论是 R 满足 2NF 但不满足 3NF最高为 2NF。这道题在题库里出现频率很高变体是把依赖集换成 A→B、B→C、C→D 或者加入多属性候选码。答题时最容易漏的是“先求所有候选码再判断主属性”这一步很多人看到 A→B 就直接下结论忽略了候选码可能不止一个的情况。题库答案里如果只给结论不给闭包推导自己补一遍闭包计算否则换个依赖集就翻车。3. 高频考点SQL 与关系代数的六种必考句式3.1 多表连接与分组统计的固定写法SQL 部分的考题高度集中六种句式覆盖八成以上题目单表条件查询、多表等值连接、LEFT JOIN 找缺失、GROUP BY 加聚合函数、HAVING 过滤分组、嵌套子查询配合 IN 或 EXISTS。每一种都有固定的书写顺序和易错位置。以“查询每个部门平均工资高于全公司平均工资的部门”为例标准写法是先分组求平均再用 HAVING 子查询比较SELECT dept_id, AVG(salary) AS avg_sal FROM employee GROUP BY dept_id HAVING AVG(salary) ( SELECT AVG(salary) FROM employee );这段代码的关键在 HAVING 后面不能写 WHERE因为过滤的是分组后的聚合结果子查询返回单值所以用比较运算符而不是 IN。参数上GROUP BY 的列必须出现在 SELECT 里或者被聚合函数包裹否则在严格模式下报错。考试时如果题目要求“显示部门名称”还要再 JOIN 一张部门表这时候注意连接条件写在 FROM 后面而不是 WHERE 里混着写虽然结果一样但阅卷时按标准结构给分更稳。关系代数部分常考的是把 SQL 翻译成表达式重点掌握选择 σ、投影 π、连接 ⋈、除 ÷ 四个符号。除法运算考的是“查询选修了全部课程的学生”这类题套路是先用 π 投影出学生和课程的组合再除以全部课程的投影。题库答案里如果只给符号表达式自己对着 SQL 写一遍对照两边能对上才算真会。3.2 真题演练嵌套子查询与 EXISTS 的答题模板题目查询没有选修任何课程的学生姓名。答题思路有两种写法考场上选自己不容易写错的那种。第一种用 NOT INSELECT sname FROM student WHERE sno NOT IN ( SELECT sno FROM sc );第二种用 NOT EXISTSSELECT sname FROM student s WHERE NOT EXISTS ( SELECT 1 FROM sc WHERE sc.sno s.sno );两种写法结果一致但考试时要注意 NOT IN 遇到子查询结果含 NULL 会返回空集这是经典翻车点。如果题库答案给的是 NOT EXISTS 版本说明出题人有意避开 NULL 陷阱答题时优先写 EXISTS 相关句式。参数说明上EXISTS 只判断子查询是否有行返回不关心 SELECT 后面写什么写 SELECT 1 或 SELECT * 都不影响结果但写 1 更清晰。相关子查询里外层的别名 s 必须写否则内层引用不到外层列这是手写 SQL 时最常见的语法错误。3.3 聚合函数与空值处理的易混点聚合函数 COUNT、SUM、AVG、MAX、MIN 里COUNT(*) 统计所有行包括空值行COUNT(列名) 跳过该列为 NULL 的行这个区别在选择题里反复出现。AVG 计算时自动忽略 NULL但如果整列都是 NULL 返回 NULL 而不是 0。GROUP BY 分组后SELECT 列表里非聚合列必须出现在 GROUP BY 中这条规则在判断题里常以“SELECT 可以包含任意列”的形式出现答案是错。空值处理还有一条常考规则NULL 与任何值比较的结果是 UNKNOWN不是 TRUE 也不是 FALSE所以 WHERE 列 NULL 永远查不出东西必须写 IS NULL。这条在填空题里考过“判断空值应使用什么谓词”答案就是 IS NULL。题库里这类题的错误率很高原因是很多人凭直觉写 NULL编译器不报错但结果为空考试时又没法运行验证只能靠记。4. 易错点五类反复失分的题与纠正方法4.1 范式判断漏求候选码错在哪看到函数依赖就直接判断范式等级没有先求全部候选码。为什么错主属性和非主属性的划分依赖候选码候选码求错后面全错。怎么答对每道范式题第一步写“求候选码”用属性闭包逐个验证把候选码写在草稿纸最上面再判断依赖左边是不是候选码、右边是不是主属性。题库答案如果省略了闭包过程自己补上再对照。4.2 SQL 中 WHERE 与 HAVING 混用错在哪把聚合条件写在 WHERE 里比如 WHERE AVG(salary) 5000。为什么错WHERE 在分组前执行此时聚合函数还没有结果语法直接报错。怎么答对记住执行顺序 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY聚合条件一律放 HAVING行级条件放 WHERE。答题时先写 FROM 和 WHERE再补 GROUP BY 和 HAVING顺序写下来不容易乱。4.3 事务隔离级别与并发异常的对应关系记反错在哪把“读未提交”对应成“不可重复读”或者把“串行化”说成允许幻读。为什么错四个隔离级别和三类异常脏读、不可重复读、幻读是逐级递进的关系背的时候没有按递进顺序记。怎么答对按隔离级别从低到高记——读未提交允许脏读读已提交禁止脏读但允许不可重复读可重复读禁止不可重复读但允许幻读串行化全部禁止。答题时画一条数轴从左到右逐级划掉异常比死记表格稳。4.4 ER 图转关系模式时联系类型标错错在哪把 1:N 联系单独建表或者把 M:N 联系合并到某一端。为什么错1:N 联系可以合并到 N 端作为外键M:N 联系必须单独建表并包含两端主键。怎么答对画完 ER 图先标联系类型1:1 和 1:N 优先合并M:N 一律独立成表。题库答案里如果给了关系模式清单对照自己有没有多建或少建表多建和少建都是扣分点。4.5 关系代数除法运算符号写错错在哪把除法 ÷ 写成减号或者用其他符号代替。为什么错除法是关系代数里唯一需要两个关系“全覆盖”的运算符号写错整道题不得分。怎么答对除法表达式写成 R ÷ S含义是 R 中那些在 S 所有属性上都有对应值的元组。答题时先写出被除关系和除关系的投影再套符号最后用自然语言解释一遍结果含义确保逻辑对得上。5. 答题技巧从题库答案反推评分点的三步法题库答案不是用来对个对错就完事的它的真正用法是反推评分点。我的习惯是每做完一道大题把答案拆成三列结论、中间步骤、格式要求。结论对但中间步骤缺说明推导过程会被扣分中间步骤对但格式乱说明书写规范要练两者都对但和答案表述不一致说明术语用词要统一。这三列拆完一道题等于练了三遍。具体操作上第一步先不看答案自己做做完用红笔标出和答案不一致的地方。第二步对照答案找评分点比如范式题看有没有写闭包、SQL 题看有没有写 GROUP BY 和 HAVING、设计题看有没有标主外键。第三步把评分点整理成一张自查表下次做题前先过一遍表。这张表不用长五六条就够比如“候选码求了吗”“聚合条件放 HAVING 了吗”“M:N 联系单独建表了吗”“除法符号写对了吗”“NULL 用 IS NULL 判断了吗”。题型评分点自查项常见扣分范式判断候选码、主属性、依赖左边漏求候选码SQL 查询分组位置、聚合条件、别名WHERE 写聚合ER 转关系联系类型、外键位置M:N 未建表事务并发隔离级别递进、封锁类型异常对应记反这张表配合题库答案用每刷完一章就把对应行的自查项过一遍错题标记在表旁边考前只看标记最多的那两行。血泪经验是范式题和 SQL 题的自查项最值得反复过因为这两块分值密度最高一个疏忽就是连锁扣分。从那以后我每次做数据库大题不管多简单都强制走一遍“先求候选码、再查分组位置、最后对符号”的流程宁可多花两分钟也不吃后悔药。希望帮到你。本文还有配套的精品资源点击获取