ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

数据库原理作业拆解:ERM概念、主键与弱实体实战指南

数据库原理作业拆解:ERM概念、主键与弱实体实战指南 简介这是一份西南交通大学《数据库原理》第二章“高级数据模型”的课程作业及答案解析适合正在复习数据库概念设计、准备期末考试或自学实体联系模型的同学。资源仅包含一个Word文档体积约99KB内容按简答、改错、综合题和学习体会四部分展开既覆盖实体联系模型与关系模型的层次归属、约束类型、属性分类、键与候选键区别、联系主键确定原则、弱实体产生与识别等理论考点也设置了商业集团商店—商品—职工销售与聘用、超市公司仓库与连锁商店业务两套实体联系图综合题并配有参考答案要点和改错提示。目前已有857人学习说明该作业在同类课程资料中有一定参考价值。通过逐题完成这份材料可以系统梳理高级数据模型的核心概念掌握从业务规则到实体联系建模的表达方法为后续关系模式转换与数据库实现打好基础。1. 一份《数据库原理》作业的完整拆解别急着抄先搞懂高级数据模型数据库原理这门课《高级数据模型》这一章是典型的“上课听懂了作业做不出来”的分水岭。这份西南交通大学的《数据库原理》课程作业第2章把 ERM 的层次定位、主键与候选键、约束类型、弱实体识别、联系主键的确定规则全部过了一遍还配了两道需要动手画 ER 图的综合题和一道改错题。它给的答案只是对照的参考真正的价值是让你手里有一套完整的、按教学大纲梳理过的自查材料——简答题查漏补缺综合题当画图模板改错题预警常见错误。适合正在学数据库原理的本科生、期末复习的人以及要把 ER 模型给学生讲明白的助教。2. 把十个简答题变成硬概念ERM 分层、键与候选键、属性分类、弱实体这一章的信息密度很高十个简答题几乎把概念设计阶段的核心考点全部覆盖。别把它们当成“背答案”材料要把它们当成一根根钉子——后面画 ER 图、做改错题全靠这些钉子挂住。看这份作业的正确顺序是先把简答的概念过一遍再去做综合题最后回来做改错题因为改错题考的就是对概念细节的敏感度。2.1 ERM 是“概念设计草图”关系模型是“施工蓝图”两个层次先说清第一道题就问ERM 属于哪个层次的数据模型关系模型又是哪个层次答案本身很简单——ERM 属于高级数据模型关系模型属于逻辑数据模型。但真正要理解的是“高级”这两个字。它不是功能高级而是抽象层次更高更贴近人脑对现实世界的认识。很多人把“高级数据模型”理解成“更厉害的数据模型”这是理解上的一种玄学实际上它就是站在概念层、专门用来画业务全貌的工具。ERM 站在概念层作用是让数据库设计者动手建表之前先把业务里有哪些实体、这些实体之间有什么关系、每种关系带什么约束画清楚。关系模型站在逻辑层它已经把数据结构化成二维表并且定义好了增删改查这类操作。也就是说ERM 负责回答“业务里是什么”关系模型负责回答“数据怎么存、怎么取”。讲课的时候常说“先画 ER 图再转关系模式”就是这个顺序。翻开宋金玉老师的《数据库原理与应用》高级数据模型这一章的落点也是让学生掌握从业务规则到 ER 图的转换能力。第二个问题接着就问ERM 为何没有数据操纵的内容因为它是概念设计工具用途是在概念设计阶段描述数据模式不负责回答“这条数据怎么查出来、怎么更新”。数据操纵是关系模型和 SQL 的事要等概念模型转成关系模式之后才发生。考试如果遇到“模型分层”的选择题判断标准只有一条看它带不带操作。带操作的一定是逻辑层或物理层不带操作、只描述结构和约束的才是高级或概念层。2.2 数据用什么描述联系用什么描述实体型与联系型的对应关系第二个问题考的是描述工具。ERM 描述现实系统时数据本身用实体和实体型描述数据联系用联系和联系型描述。这句话看起来像送分题但它埋着“型”和“实例”的区别这个区别会直接影响你综合题画图的正确率。实体是一个具体的对象比如“西南交大附近那家便利店”实体型是一类对象的抽象比如“商店”它只负责定义这一类对象的属性集合商店编号、商店名、地址。联系和联系型同理“销售”这个联系型描述的是商店和商品之间的售卖关系而某一次具体销售行为才是联系实例。画 ER 图时矩形、椭圆、菱形里写的全是型不是实例。这也就是为什么作业答案写“数据用实体和实体型描述”因为图里只能画实体型。做题时有一个快速检查法如果某个框里的名字能直接对应到现实中的一个具体对象那你多半把实例写进图里了。比如把“西南交大店”写进矩形而不是写“商店”老师一眼就能看出实体型的概念没建立起来。纠正方法也很简单画图前先问自己一句“这个矩形能不能装下同一类的所有对象”能装下才是实体型。2.3 主键、候选键、键约束联系主键怎么定第四到第九题本质上是一个串实体拿什么唯一标识 → 键和候选键什么区别 → 键约束什么时候存在 → 联系主键怎么确定。实体的唯一标识是主键 primary key这一点没有争议。第七题“键与候选键的区别”是整份作业里最容易丢分的一个辨析。键并不要求一定是最小属性集候选键要求最小属性集不允许有冗余属性。举个例子学生实体里{学号} 是候选键{学号姓名} 也能唯一标识每个学生所以它是一个键但它有冗余属性它不是候选键。考试如果问“{学号姓名} 是不是候选键”答案是否定的问“它是不是键”答案是可以算。一字之差分数全在里面。键约束用于唯一确定联系只在 1:1 和 1:n 两种联系中存在。m:n 联系里不存在键约束因为多对多联系中任何一个实体的主键都没法唯一确定另一端对象。这个判断直接决定你综合题里标不标 constraint很多人就翻车在这一点上把 m:n 也标了键约束老师在图上画个圈整道综合题降一档。第九题是联系主键的确定规则一定要记成规则而不是死背。1:1 联系主键可取关联的任意一个实体的主键独立担当1:n 联系主键只能由 n 方实体的主键担当m:n 联系主键必须由关联的所有实体的主键共同组成。背后的逻辑很简单主键要能唯一定位一条联系记录。1:1 里联系记录和任意一侧都是一一对应取谁都行1:n 里同一个 1 方记录可以对应多条 n 方记录只有 n 方主键能区分这些记录m:n 里单独任何一方的主键都对不上另一侧的多条记录只能把两侧主键拼起来。把这三条在草稿纸上默写一遍再去做综合题你会发现自己画 ER 图时不再纠结“菱形里要不要标键”。2.4 属性两套分类结构看“能不能拆”取值看“有几个值”第五、第六题考属性。属性按结构分为简单属性、复合属性和子属性按取值分为单值属性、多值属性、导出属性和空值属性。这两套分类的维度不一样千万别混在一张表里记。结构分类问的是“这个属性还能不能再拆”取值分类问的是“这个属性对同一个实体会不会有多个值、值从哪来”。结构分类里性别是简单属性拆不出更小单位通信地址是复合属性可以拆出省份、城市、街道那些拆出来的部分就是子属性。取值分类里电话号码对一个人可以有多个是多值属性年龄可以根据出生日期算出来是导出属性某候选人的“毕业时间”暂时还没填是空值属性。导出属性有个特点它的值是冗余的建表的时候通常可以不存需要时现算。记一个特征就够了复合属性和子属性体现的是“整体-部分”关系多值属性强调的是“一个实体对应多个取值”。把“电话号码”误判成复合属性是这道题最常见的一个错误。画 ER 图时复合属性下面要挂子属性多值属性要用双椭圆两套画法不同这也是为什么第六题和综合题是连着的。2.5 弱实体没有“户口”的实体靠什么被识别第十题是弱实体。弱实体产生的原因只有一个系统内某些实体没有键属性也就是没有“户口”单独拿不出唯一标识。比如本地电话号码不带区号就只是一个号码要加上“哪个城市”这个归属信息才能唯一定位某人在某个队列里的排序序号离开队列这个上下文序号毫无意义。识别弱实体靠识别实体型和识别联系。这句话的意思是弱实体必须依附一个强实体识别实体型通过一个识别联系关联起来才能被唯一标识。避免弱实体的做法一是在设计阶段给这种实体补一个全局唯一的业务编号二是在命名或编号时把上层实体的标识带进去。作业答案里的那句“在命名或编号弱实体时加上其隶属关系上层实体的表示即可避免无法识别”可以当口诀背下来。做题时的判断标准是这个实体去掉它所属的上下文还能不能独立标识自己如果能它就不是弱实体如果不能就必须画识别联系并把弱实体的主键设计成“上层主键 局部编号”的组合。教材里常见的例子是“家属”和“职工”“子部门”和“部门”本质都一样。这是比改错题更隐蔽的丢分点因为画图时它不会自己报错。3. 两道综合题实战把业务规则翻译成 ER 图的五步套路综合题没有标准图只有业务规则。它练的是“把文字转成图形”的能力。我自己画 ER 图不管题目多复杂都按五个步骤走第一圈出题干里所有名词第二判断名词是实体、属性还是联系第三标出每个实体的主键第四确定实体之间联系类型和约束第五把联系属性挂到对应的联系上。下面用两道题各走一遍。3.1 第一题“商店-商品-职工”三实体两联系重点是 m:n 的联系属性第一题题干信息给得很完整。先过实体商店商店编号、商店名、地址商品商品号、商品名、规格、单价职工职工编号、姓名、性别、业绩。三个实体的主键分别是商店编号、商品号、职工编号。这个环节如果画图时忘了给主键属性加下划线后面转关系模式时就会抓瞎。接着过联系。商店与商品之间存在“销售”联系每个商店可销售多种商品每种商品也可放在多个商店销售——这是标准的 m:n还有一个关键给分点每个商店销售每一种商品有月销售量。“月销售量”是联系属性必须挂在“销售”这个菱形上不能挂到商品实体上。原因很简单同一种商品在不同商店的月销量不同它不是商品自身的属性而是“这个商店卖这个商品”这个关系产生的数据。商店与职工之间存在“聘用”联系每个商店有许多职工每个职工只能在一个商店工作——这是 1:nn 方是职工联系属性是聘期和月薪同样挂在“聘用”菱形上。把上面的结构落成文本形式的 ER 图商店(商店编号, 商店名, 地址) --销售(月销售量)-- 商品(商品号, 商品名, 规格, 单价) 商店(商店编号) --聘用(聘期, 月薪)-- 职工(职工编号, 姓名, 性别, 业绩)说明一下第一行是 m:n 联系联系主键是“商店编号 商品号”月销售量是联系属性第二行是 1:n 联系n 方是职工所以联系主键取职工编号。括号里第一个属性是主键作图时把实体名放矩形、属性放椭圆、联系名放菱形联系属性用椭圆连到菱形上。这样标完老师看一眼就知道你是不是真的理解 m:n 的主键构成。这里有个血泪经验联系属性千万不要挂错位置。改作业时最常见的错误就是把“月销售量”画进商品实体的椭圆里。一旦挂进实体你后面转出来的关系模式就少了一个“商店-商品”关系整道题的结构直接缺一块。3.2 第二题“超市公司”先圈名词再逐条翻译五条业务规则第二题比第一题多了一层“信息粗”的考验。题干明确说“所给信息稍粗实体的属性可不必画出但须根据生活中正常情况来确定联系的约束类型”。翻译一下这道题不考属性考的是约束边界的判断。所以画图时不要纠结收银员该有哪些属性要把力气花在联系类型和参与约束上。逐条翻译五条业务规则规则 (1)有若干仓库、连锁商店、商品。这给出三个基础实体仓库、商店、商品。 规则 (2)每个商店有一个经理和若干收银员每个收银员只在一个商店工作。这里有三类实体和一个约束经理、收银员都依附于商店收银员与商店是 1:n并且收银员侧是强制参与经理与商店是 1:1。注意“每个收银员只在一个商店工作”说明收银员不能脱离商店存在这里要么画成普通实体加参与约束要么直接用弱实体思路处理但题目允许不画属性所以优先用参与约束表达。 规则 (3)每个商店销售多种商品每种商品可在不同商店销售。商店与商品是 m:n联系属性是销售价。 规则 (4)商品编号唯一对应一个商品名称不同商品编号可以有相同名称。这说明商品的主键只能是商品编号商品名称不是候选键。多种销售价格这个信息放在“商店-商品”销售联系上作为多值属性处理即可不必为价格单独建实体。 规则 (5)业务员负责商品的进货业务。业务员是独立实体业务员与商品之间是 m:n 进货联系联系属性可以补进货数量、进货日期仓库与商品之间是 m:n 库存联系联系属性是库存量。实体和主键整理成表实体主键建议说明仓库仓库编号基础实体商店商店编号连锁商店实体商品商品编号名称可重复编号才是主键经理职工编号与商店为 1:1收银员职工编号与商店为 1:n强制参与业务员业务员编号与商品为 m:n 进货关系这里有一个最容易画过头的点题目没提“业务员属于哪个仓库”也没提“仓库被谁管理”就不要自己加“业务员-仓库”的联系。业务员负责进货联系发生在业务员和商品之间仓库只参与库存。少画一条未经题干支撑的联系不是丢分多画一条才是风险。真实的工程里同样如此业务规则没说清楚的关联要去追问需求而不是猜一个画上去。3.3 画 ER 图时最容易翻车的三个边界联系属性挂哪、键约束写不写、弱实体留不留两道题练下来问题集中在三个边界上。第一个边界是联系属性挂哪。判断标准只有一句这个属性的值是不是由两个实体的这次联系决定的。月销售量是“商店-商品”这次销售决定的聘期是“商店-职工”这次聘用决定的所以它们都挂菱形。商品单价是商品本身决定的挂实体。把联系属性挂到实体上是 ER 图最常见的返工原因没有之一。第二个边界是键约束写不写。见到 1:1、1:n先想“这个联系能不能靠某一侧的主键唯一确定一条联系记录”能就存在键约束见到 m:n直接不写键约束只写一般性约束。很多教材的 ER 图画法会把键约束也标在连线上但考试阅卷时如果你把 m:n 也标了键约束这一处的概念分就没了。第三个边界是弱实体留不留。设计原则是能避免就避免给弱实体补一个全局业务编号实在要保留比如例题里的本地电话就必须画识别联系并让弱实体的主键带上识别实体主键的一部分。做题时把题干里“序号”“本地”“子部门”这类词圈出来它们几乎都是弱实体的信号。判断清楚这三个边界画出来的图就不会是“看起来完整、细看全是洞”的那种。4. 避坑改错题里的四类陷阱与交作业前的自查清单改错题只有三句话6 分但它把概念题里最容易错的三处浓缩了。我在帮人看作业的时候发现很多人不是不会是被题目里“看似正常的表达”带走了。这三句话中的错误都发生在术语级别术语一换整个模型的理解就变了。4.1 先把三道改错题放在一起看改的是词考的是模型原题里需要改的三个地方分别是题号原句关键词正确表述考查概念1主键是候选键之一部分组成主键是候选键的其中一个候选键的最小性2同一实体型不可能存在联系同一实体型可能发生联系递归联系3联系主键由所参与实体的一般属性决定联系主键由所参与实体的唯一标识决定联系主键来源这三处错误有一个共同点它们都出现在你靠语感读句子时“觉得没什么问题”的地方。所以改错题的正确做法不是朗读通顺而是把句子里的术语抽出来用概念定义去核对。比如看到“候选键”立刻想它的定义是不是“最小属性集”看到“一般属性”立刻想它能不能唯一定位一条记录。用术语去套别靠语感判断这是改错题不丢分的前提。提示改错题答题格式是划掉错误部分在下面写出正确表述。不要只写“错了”要把正确短语完整写出来否则阅卷老师没法给分。4.2 陷阱一把“主键是候选键之一部分组成”当正确的现象原句是“主键是候选键之一部分组成”很多人觉得“对啊主键本来就是候选键的组成部分”于是不改丢分。原因主键和候选键的关系不是“部分与整体”而是“从若干候选键里挑一个出来当主键”。主键本身就是某一个候选键不是它的某个片段。题干里“一部分组成”暗示的是一个候选键被拆出子集来用这违背了候选键的最小性是错误的。解决改成“主键是候选键的其中一个”。完整理解是一个实体可能有多个候选键设计者从中选一个作为主键如果这个候选键是多属性组合作为主键时整体使用不能说只取它的一部分。4.3 陷阱二认为“同一实体型不可能存在联系”现象改错题第二句“同一实体型不可能存在联系”第一次做这道题的人很容易判它正确因为脑子里全是“商店-商品”这种不同实体型之间的例子。原因漏掉了递归联系。同一实体型的两个实例之间完全可以发生联系。职工实体内部可以有“管理”联系一个经理管多个下属经理和下属都属于“职工”这个实体型商品与商品之间也可以有“替代”联系。只要业务规则允许同一实体型内部就能画联系。解决把“不可能”改成“可能”。画图时这条联系的两个端点会指向同一个矩形注意在连线的两端分别标注角色名比如“经理”和“下属”避免看图的人分不清方向。4.4 陷阱三联系主键的来源写成“一般属性”现象第三句是“ER 模型中联系的主键由所参与实体的一般属性决定”如果不细想很容易觉得“联系当然是由参与实体的属性决定的”。原因这里说的“一般属性”指的是非键属性。联系主键的功能是唯一定位一条联系记录而普通属性比如商店名、商品名做不到这一点。能完成定位的只有参与实体的主键或唯一标识。解决改成“所参与实体的唯一标识”。这条规则和前面 2.3 的联系主键确定方法完全对应1:1 从任意一侧主键里选一个1:n 取 n 方主键m:n 取所有参与实体主键的并集。凡是题目里出现“唯一标识”“主键”这类词基本就是正确方向。4.5 陷阱四纸质手绘 ER 图拍照提交现象作业规则里写得明明白白“ER 图禁止纸质手绘拍照须用 Word/Visio 或其它软件工具画出”但每次总有人交照片。原因手绘快拍照更省事有人觉得老师只是嘴上说一句。实际上这条规则卡得很死因为纸质手绘图改不动、没法批注也没法确认约束类型标得完整从格式上就输了一半。解决用 Word 的插入形状就能画矩形、椭圆、菱形、连线都在“形状”里也可以用 draw.io 这类免费工具画完导出 PNG。画完记得把连线端点对齐到形状的边点不要随手拉一条线就算数对齐问题会让图看起来很乱影响阅卷印象。4.6 交作业前的自查清单按顺序过一遍再提交检查项容易犯的错怎么改每个实体是否有主键只画属性忘了在主键下加下划线主键属性在椭圆里加下划线联系主键是否与联系类型匹配1:n 用了 1 方主键1:n 必须用 n 方主键m:n 是否误标了键约束多对多标了 constraintm:n 只标一般性约束联系属性是否挂在菱形上月销售量画到商品椭圆里凡是“这次关系才有的值”挂菱形弱实体是否画了识别联系只画了孤立矩形弱实体必须由识别联系连到识别实体型是否使用了软件绘制拍了张手绘图用 Word/Visio/draw.io 重画这张清单每次作业都能用。我自己的习惯是画完先放下隔半小时再拿这张表过一遍。刚画完时大脑会自圆其说隔一会儿再看才能发现 n 方主键写反、键约束标错这类低级失误。5. 把“看过答案”变成“画得出来”三套验证法与工具规范这份作业习题如果只做一遍很容易变成“背答案”第二遍、第三遍才是真正把概念内化的过程。这里分享三个我常用的验证方法做完之后你可以不看答案独立重画两道综合题画完再用上一章的自查清单过一遍效果好过把答案读十遍。5.1 遮答案重做法把简答题当一次口试找一张纸条把这份作业的答案部分遮住只看题干。在草稿纸上默写四个点ERM 的层次归属、键与候选键的区别、三种联系类型的主键确定规则、弱实体的识别方式。这四个点分别是简答题第 1、7、9、10 题的答案也是整章的骨架。默写不出来的地方翻开答案看一遍合上本子再默写一遍。这个方法的核心是“输出倒逼输入”写一遍胜过看十遍。5.2 换业务域重画一道题变三道题把“商店-商品-职工”换成你熟悉的业务再画一遍。比如“班级-学生-课程”班级与学生是一对多学生与课程是多对多。再比如“订单-商品-客户”商品与订单是多对多订单与客户是多对一。每换一次都强制自己把主键、联系属性、参与约束重新推一遍画完用自查清单过一遍。这个变体训练的价值在于考试时遇到没见过的业务你不会慌因为套路是一样的变的只是名词。5.3 画图规范实体、属性、联系各自的形状工具用 Word 还是 draw.io 都行关键是形状规范要固定下来。实体用矩形属性用椭圆主键属性下加下划线联系用菱形联系属性用椭圆挂在菱形上1:n 在 n 方那侧线段上标“n”m:n 两侧分别标“m”和“n”。把这些规范变成肌肉记忆后画出的图老师扫一眼就知道你懂不懂行。规范的图还有一个好处以后转关系模式时自己回去读图不容易读错。从那以后我每次画完 ER 图都强制自己走一遍完整流程先确认实体主键再确认联系类型再挂联系属性最后用清单扫一遍 m:n 有没有误标键约束。这套流程救了我很多次也希望帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

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