资讯动态

数据库入门避坑指南:关系模型、SQL与E-R图设计核心要点

发布时间:2026/10/22 6:43:21 来源:尧图企业网站定制
简介《数据库系统概论》第5版王珊版课后习题答案doc文档面向数据库初学者、高校本科生及考研复习者用于对照教材习题巩固关系数据库核心理论。包内含1个doc文档文件大小仅588KB采用通用Word格式便于在电脑、平板或手机上阅读、打印及二次整理。内容覆盖第2章关系数据库与第3章SQL语言等重点章节逐题给出完整解答涵盖关系模型三部分、关系数据语言特点与分类、实体完整性与参照完整性规则、关系代数基本运算及其相互表达以及SQL建表与多表查询。针对课后典型习题提供详细推导和SQL语句示例如求解“求供应工程J1零件的供应商号码”等经典题目时既给出关系代数表达式也给出等价SELECT写法能帮助读者理解概念到实际操作的衔接。目前已有1723人学习下载适合数据库课程期末复习、考研专业课备战及日常自学自测使用。1. 先搞懂一件事数据库入门到底在学什么很多零基础的同学第一次翻开《数据库系统概论》第五版时脑子里只有一个问题数据库不就是存数据的吗为什么还要学一整本书说实话这个疑问非常正常。你可以把数据库理解成一个超级仓库它不只是把数据堆进去还要保证数据不乱、不丢、不冲突并且能让很多人同时安全地取用。我们学数据库学的是这套仓库的“管理规则”——怎么组织数据、怎么查询数据、怎么保证数据不出错。这门课是计算机相关专业的必修基础也是后端开发、数据分析、运维岗位面试必考的内容。如果你将来想写代码、做系统、处理数据数据库就是绕不开的第一块地基。2. 为什么要学数据库从一张 Excel 表说起2.1 为什么数据不能放在 Excel 里规模、并发、安全你可能用过 Excel 存成绩单、记账本。数据少的时候Excel 很方便但一旦数据量到几十万条同时有几十个人要读写问题就来了文件被谁打开了会不会有人改错怎么保证两个人同时改不冲突怎么设置每个人只能看一部分数据Excel 很难回答这些问题。数据库系统就是来解决这些问题的专业工具它能把数据集中管理提供高效的查询、严格的控制和并发处理能力。教材第一章到第七章讲的本质上就是这套管理规则。完全不夸张地说理解了数据库为什么存在你后面学关系模型、SQL、完整性约束时就会觉得每一步都有意义。2.2 数据库系统这门课到底教什么三大块内容地图我把这本教材的内容拆成三大块你心里先装下这张地图学起来就不会迷路。第一块是“模型与语言”。关系模型是数据库的骨架它规定了数据长什么样、怎么组织关系代数和 SQL 是操作数据的手段。第二块是“保护机制”。包括安全性防止坏人搞破坏和完整性防止错误数据入库存。第三块是“设计方法”。也就是拿到一个现实问题怎么设计出一套合理的数据库表结构这部分主要对应第七章的数据库设计。这三块层层递进先懂模型再学会用语言操作然后学会保护数据最后学会设计一整套系统。教材后面的章节答案基本就是围绕这三块展开的。2.3 关系模型数据库世界的第一块基石教材第二章开篇就问了关系模型的三个组成部分这是全书最重要的概念之一。我用大白话给你翻译一下关系数据结构就是“二维表”——行和列组成的表格每一行是一条记录每一列是一个属性关系操作集合就是你能对表做的事情比如查某些行、某些列、把两张表拼起来关系完整性约束就是表的规矩比如“主键不能为空”“外键要么为空要么必须指向真实存在的记录”。这里有一个新手最容易忽略的点关系模型为什么用“关系”这个词因为在数学上一张表就是一个关系。你不需要深究数学定义只要记住以后看到“关系”脑子里就把它想成一张表。后面学关系代数、范式全是在这张表的基础上做文章。3. 第一步先学会读答案关系代数和 SQL 怎么配着看3.1 关系代数五种基本运算并、差、笛卡尔积、投影、选择很多同学第一次看到关系代数就发怵满屏的希腊字母和符号。其实它就像一套“操作表格的运算符”。教材里反复强调五种基本运算并、差、笛卡尔积、投影和选择。其他运算比如交、连接、除都能用这五种组合出来。并把两张表的行合并重复的行只留一次。差从第一张表里去掉第二张表也有的行。笛卡尔积把两张表的每一行都互相拼一遍得到一张大表。投影只留下你想要的列相当于“竖着切”。选择只留下符合条件的行相当于“横着切”。比如“找出供应工程 J1 零件的供应商号码”答案写成πSno(σJnoJ1(SPJ))翻译过来就是先对 SPJ 表做选择只留下 Jno 等于 J1 的行再对结果做投影只留下 Sno 这一列。你看一点都不神秘。3.2 用 SQL 把关系代数写出来第一个可跟做的例子SQL 是更贴近实际使用的语言。教材第三章的答案里很多查询既给了关系代数又给了 SQL。我建议你学的时候把两者对照着看关系代数是“思路”SQL 是“写法”。我带你跑一个最经典的例子。假设有 SPJ 表里面有供应工程 J1 零件的供应商号码。SQL 可以这样写SELECT DISTINCT SNO FROM SPJ WHERE JNO J1;这段代码的意思非常直白SELECT DISTINCT SNO表示要查询不重复的供应商号码FROM SPJ表示从 SPJ 表里查WHERE JNO J1表示只筛选工程代号为 J1 的行。DISTINCT是“去重”因为同一个供应商可能供了好几个零件但我们只要号码列表。再看一个复杂一点的求供应工程 J1 零件为红色的供应商号码。这时候需要把 SPJ 表和 P 表连接起来因为颜色信息存在 P 表里。SQL 写法如下SELECT SNO FROM SPJ, P WHERE JNO J1 AND SPJ.PNO P.PNO AND COLOR 红;这里的关键是SPJ.PNO P.PNO它把两张表通过零件编号关联起来。你可以这样理解先把 SPJ 的每一行和 P 的每一行配对然后筛选出工程是 J1、零件编号相等、颜色是红的行最后取出供应商号码。这就是关系代数里的连接运算在 SQL 中的体现。3.3 手把手拆解一道 SPJ 数据库真题教材第二章第 6 题给了个很经典的库S供应商、P零件、J工程、SPJ供应关系。我建议你把这道题当作练手入口因为它覆盖了选择、投影、连接、差、除几乎所有运算。比如“求没有使用天津供应商生产的红色零件的工程号 JNO”答案思路是先找出使用了天津供应商红色零件的工程号然后从全部工程号里减去这些。SQL 可以分成两步写-- 第一步找出使用了天津供应商红色零件的工程号 SELECT DISTINCT JNO FROM SPJ, S, P WHERE S.CITY 天津 AND COLOR 红 AND S.SNO SPJ.SNO AND P.PNO SPJ.PNO;-- 第二步从所有工程号中排除第一步的结果 SELECT DISTINCT JNO FROM SPJ WHERE JNO NOT IN ( SELECT DISTINCT JNO FROM SPJ, S, P WHERE S.CITY 天津 AND COLOR 红 AND S.SNO SPJ.SNO AND P.PNO SPJ.PNO );注意第二步的NOT IN它的意思是“不包含在子查询结果里”。这是一种非常常用的排除写法。实际写的时候你可能会发现有些教材用的 VFP 环境不支持太深的子查询嵌套这时候可以把第一步的结果先记下来再手动去第二步里排除。这也是为什么教材答案里经常把查询拆成两步的原因。4. 入门最容易踩的坑数据库学习避坑指南4.1 坑一死记 SQL 语句却不知道每一步在操作哪张表现象能把SELECT、INSERT、UPDATE背得滚瓜烂熟但题目一换成没见过的表就不知道怎么写。原因你把 SQL 当英语背了没有理解它背后的操作对象。数据是存在表里的写任何查询都要先问自己我要的数据在哪些表里表之间怎么关联解决拿到题目先画表把表名列出来再写 SELECT。每次写完 SQL心里默念一遍“先找表再筛选行再投影列”这个顺序。我学的时候会把教材第二章的 SPJ 那四张表抄在纸上做题时对着纸写坚持半个月就顺畅了。4.2 坑二搞不清外码为什么可以为空现象学参照完整性时死活想不明白既然外码要参照主码为什么外码的值还可以是空原因你没有分清“外码属性”和“主属性”的区别。题干里说得很清楚如果外码属性本身不是主属性就可以取空值如果它同时是主属性的一部分就不能为空。解决记住一句话空值代表“还没确定”但主键必须唯一且非空。比如选课表学号课程号成绩学号和课程号共同组成主码这时学号同时也是外码就不能为空因为成绩必须对应一个真实存在的学生。但如果你有一张“员工表”里面有个“部门号”外码员工还没分配部门时部门号可以为空。做题时先判断这个外码是不是主属性再决定允不允许空。4.3 坑三把视图当成一张真实存在的表现象认为视图里存了数据修改视图就是在改视图本身结果老是想“视图为什么不能更新”。原因教材里反复强调视图是虚表它不存储数据只是保存了一条查询定义。你查视图时数据库其实是在执行视图背后的那条 SELECT 语句去真实表里取数。解决你只要记住视图是一副“眼镜”戴上它只能看到基本表的某一部分。如果视图的某一列是从集合函数MAX、AVG、COUNT或者表达式算出来的那这一列就没有办法反向更新到原始表所以整个视图不可更新。比如“部门工资”视图里有最高工资、最低工资、平均工资这些值不是你改就能改回去的所以这种视图不能直接修改。做题时先看视图定义里有没有函数或计算有就判断不可更新。4.4 坑四把完整性和安全性混为一谈现象看到“数据库的安全性”和“数据库的完整性”两个章节觉得都在保护数据做题时问“防止脏数据”该选哪个就懵了。原因安全性和完整性的防范对象不一样。安全性防的是“人”是非法用户和非法操作比如有人偷看数据、越权修改完整性防的是“数据”是不合语义的脏数据比如年龄写成 200 岁、学号重复。解决一句话记忆安全性管“谁能不能碰”完整性管“数据本身合不合理”。GRANT 授权、视图加密、审计日志都是安全性主码非空、外码约束、CHECK 年龄小于 60都是完整性。做题时先判断题目是在说“权限”还是“内容”再选对应的控制手段。4.5 坑五做数据库设计题时跳过需求分析现象拿到 E-R 图题目直接开始画实体画连线结果一画就错漏掉联系属性比如选修的“成绩”。原因你跳过了需求分析这一步没有把题目里的每句话拆成“实体、属性、联系”。比如“每个学生选修若干课程每门课可由若干学生选修”这句话本身就决定了学生和课程是多对多联系成绩是联系属性。解决严格按照教材第七章的设计步骤来。第一步先把题目的名词找出来当实体把动词找出来当联系第二步确认每个实体的属性特别留意修饰性短语第三步再画 E-R 图。我第一次画错就是因为把“成绩”当成了课程的属性后来发现它属于“选修”这个联系。记住这个顺序能少踩一半的坑。5. 数据库设计的六个阶段从需求分析到运行维护5.1 六个阶段分别是什么教材第七章把数据库设计分成六个阶段需求分析、概念结构设计、逻辑结构设计、物理设计、实施、运行和维护。这六个阶段是一个完整的生命周期。你不需要背用类比来理解你想开一家店需求分析是“弄清楚要卖什么、顾客是谁”概念结构设计是“画一张店里的布局草图不关心用什么材料”逻辑结构设计是“决定用货架还是柜台”物理设计是“货架摆在哪、哪个位置放高频商品”实施是“真的开店”运行维护是“每天营业、补货、调整”。在入门阶段你要重点抓住前三个阶段。需求分析决定了你的模型对不对概念设计产出 E-R 图逻辑设计把 E-R 图变成关系表。后面三个阶段更偏工程实践初学只要知道大概流程即可。5.2 用 E-R 图设计概念模型从零画一张学校选课模型很多同学对画 E-R 图特别头疼总觉得无从上手。其实步骤非常固定。我以教材里的学校模型为例带你来一遍。题目说学校里有若干系每个系有若干班级和教研室每个教研室有若干教员教员带研究生每个班有若干学生每个学生选修若干课程。我们先提取实体系、班级、教研室、教员、学生、课程。再提取属性和联系。比如系的属性有系编号、系名学生的属性有学号、姓名、学历。联系有几组系和班级是“1 对 N”系和教研室是“1 对 N”教研室和教员是“1 对 N”教员和学生是“1 对 N”教授带研究生学生和课程是“M 对 N”并且“选修”联系有一个属性叫成绩。最终转换成关系模式时你只要把这些实体和联系变成表。实体变表1 对多的联系可以把“一”方的主码加到“多”方表中作为外码M 对多的联系单独变成一张表联系属性也放进这张表。比如学生和课程的多对多就转成“选修学号课程号成绩”。这一步如果你能自己动手把 E-R 图画出来再转成关系模式教材第七章的很多题你就已经吃透了。5.3 逻辑结构设计E-R 图怎么变成关系表逻辑结构设计就是把概念模型转换成具体数据库支持的表结构。核心就一句话实体变表联系变表或外码。我给你一个可操作的方法拿到 E-R 图对于每个实体创建一个关系模式实体属性作为列实体的码作为主码对于 1 对 1 联系可以把任一方的主码加到另一方作为外码对于 1 对 N 联系把“一”方的主码加到“多”方作为外码对于 M 对 N 联系新建一张关系表包含两个实体的主码以及联系自身属性主码通常是两个外码的组合。教材里那道“产品、零件、原材料、仓库”的题就是非常标准的例子。产品组成联系有“使用零件量”属性所以单独建一张“产品组成产品号零件号使用零件量”。这一段练熟你就掌握了关系数据库设计的核心基本功。6. 下一步学什么把这份答案变成你的学习路线图这份答案文档不是用来背的它是你的“对照检查表”。我建议你按下面这个路线来用第一步先自己写一遍再对答案。每道查询题先不看答案在纸上写 SQL 或关系代数然后打开文档对照。做错的题用红笔标出你是错在“选错表”还是“漏条件”。第二步把概念题当成面试题来回答。比如“什么是视图哪些视图可更新”你合上文档自己用大白话讲一遍讲得出来说明真懂了。第三步把 SPJ 数据库当作练习环境把文档里所有涉及 SPJ 的查询题都手敲一遍。没有一个数据库环境可以安装一个轻量的 MySQL 或者用在线 SQL 练习平台亲手把代码跑起来看到的正确结果比背十遍答案都有用。等你把这些题都过了一遍下一步我建议你去接触一门具体的数据库产品。理论教材讲的是通用原理但真实工作中你大概率会用 MySQL、PostgreSQL 这类开源数据库。你可以学着建库、建表、插入数据然后把教材里的 SQL 语句换成这些环境里的写法。你会发现很多语法细节不一样但核心概念完全一致。我从很早起就在做一件事每学完一章不继续往前翻而是用自己的话把这一章的关键概念写在纸上写不出来的地方就回文档里再查一遍。从那以后我每次复习数据库都强制走一遍“合上答案—自己写—对照查漏”的流程。这个方法帮我熬过了考试和面试希望也帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑