02.数据模型-E-R与关系模型
📌 本文适用人群:MySQL数据库入门学习者、数据库设计新手
📋 核心内容:E-R图绘制方法 + E-R图转关系模型(全程无SQL,纯理论+案例)
🎯 教学重点:E-R图设计、E-R图向关系模型转换
⚠️ 教学难点:设计合理的E-R图(避免冗余、解决冲突)
一、课前明确:学习目标
本节课结束后,需掌握以下3点核心能力,为后续SQL实操打基础:
-
掌握需求分析的任务、方法
-
掌握概念结构设计的方法、步骤及概念模型的表示方法(E-R图绘制)
-
能将E-R图转换为具体DBMS(MySQL)对应的关系模型
二、概念结构设计(核心:E-R图绘制)
概念结构设计,简单来说就是:将用户需求(比如教务系统“管理学生、课程、教师”)抽象成信息结构(概念模型),而E-R图(实体-联系图)是表示概念模型最直观、最常用的工具,也是数据库设计的核心第一步。
2.1 必记:概念模型的4个核心概念(结合案例理解)
画E-R图前,先搞懂这4个基础概念,不用死记硬背,结合高校教务案例就能快速掌握:
-
实体(Entity):客观存在并可相互区别的事物(简单说:我们要管理的“对象”)。
✅ 案例:高校教务系统中,学生、教师、课程都是实体(客观存在,且能明确区分)。 -
实体型(Entity Type):具有相同属性的实体,必然有共同的特征和性质。
✅ 案例:“学生”实体型,包含所有学生的共同属性(学号、姓名、专业、年级);“课程”实体型,包含所有课程的共同属性(课程号、课程名、学分、学时)。 -
实体集(Entity Set):同型实体的集合。
✅ 案例:全体学生就是一个实体集(所有学生都属于“学生”实体型);全体课程也是一个实体集。 -
联系(Relationship):实体内部属性之间、不同实体集之间的关联。
✅ 案例:学生和课程的“选课”联系、教师和课程的“授课”联系。
2.2 重点:E-R图绘制方法(3种图形,记牢就会画)
E-R图用3种基本图形,分别表示实体型、属性、联系,规则简单,入门必记:
|
图形类型 |
表示内容 |
绘制规则 |
案例 |
|---|---|---|---|
|
矩形 |
实体型 |
矩形框内写明实体名 |
画矩形,写“学生”“课程” |
|
椭圆形 |
属性 |
椭圆形内写属性名,用无向边(直线)连接对应实体 |
椭圆形写“学号”,用直线连到“学生”矩形 |
|
菱形 |
联系 |
菱形框内写联系名,用无向边连接相关实体,标注联系类型(1:1、1:n、m:n) |
菱形写“选课”,连“学生”和“课程”,标注m:n |
补充:3种联系类型的判断(入门必会,易错点)
联系类型是E-R图的核心,也是后续模型转换的关键,结合案例快速区分:
-
1:1(一对一):一个实体的一个实例,只能对应另一个实体的一个实例。
-
1:n(一对多):一个实体的一个实例,可对应另一个实体的多个实例;反之不行。
-
m:n(多对多):一个实体的一个实例,可对应另一个实体的多个实例;反之也可。


2.3 概念结构的4个核心特点(理解即可)
设计的E-R图(概念模型),需满足以下4点,后续转换为关系模型才更顺畅:
-
真实、充分反映现实世界(覆盖用户核心需求,比如教务系统要包含“选课、授课”);
-
易于理解(初学者、用户都能看懂实体、属性、联系的含义);
-
易于更改(后续需求变化时,能快速调整E-R图,比如新增“班级”实体);
-
易于向关系、网状、层次模型转换(重点适配MySQL的关系模型)。
2.4 概念结构设计的4种方法(了解即可)
实际设计中,可根据需求选择,入门阶段重点掌握「自底向上」(最常用、最易上手):
-
自顶向下:从整体需求→分解局部需求→设计局部E-R图→整合全局;
-
自底向上:先设计局部E-R图(比如“学生选课”“教师授课”)→ 逐步整合为全局E-R图(入门首选);
-
逐步扩张:从核心实体(如“学生”)出发,逐步添加相关实体和联系;
-
混合策略:结合自顶向下和自底向上,先定整体框架,再细化局部。
2.5 重点:概念结构设计的3个步骤(结合案例实操)
这是设计合理E-R图的关键,也是本节课难点,结合「高校教务系统(简化版)」案例,一步步拆解:
步骤1:抽象数据,设计局部视图(分E-R图)
核心:拆分复杂需求,逐一设计,降低难度
-
选择局部应用:将整体需求拆分为多个局部需求。
-
逐一设计分E-R图:抽象实体、属性、联系,画出分图。 ‘
步骤2:集成局部视图,得到全局E-R图
核心:合并分E-R图,解决冲突,建立全局关联
-
集成方式(二选一):
① 一次集成(局部图少,如本次简化案例);
② 逐步集成(先合并2个,再加入第3个,适合复杂场景)。 -
集成步骤:
① 确定实体关联(如“学生→选课→课程→授课→教师”的关联);
② 合并分图(课程实体只保留1个,避免重复)。 -
难点:解决3类冲突(必记,避免后续出错):
- 🔴 属性冲突:同一实体的同一属性,类型/取值不一致(如“课程学分”,一个设整数、一个设小数,统一为整数);
- 🔴 命名冲突:实体/属性/联系名称不一致(如“教师工号”和“工号”,统一为“教师工号”);
- 🔴 结构冲突:同一实体在不同分图中属性个数/类型不一致(如“学生”实体,一个有“年龄”、一个没有,根据需求决定是否保留)。
步骤3:评审(优化E-R图)
核心:消除冗余,确保E-R图简洁、准确
-
评审内容:检查冗余数据(如“课程学分”,无需在“选课”联系中重复)、冗余联系(如“学生”和“教师”,通过“选课+授课”间接关联,无需单独画“被授课”联系);
-
优化原则:结合用户需求,删除冗余,覆盖所有核心需求即可。
三、逻辑结构设计(核心:E-R图转关系模型)
逻辑结构设计的核心任务:将设计好的E-R图(概念模型),转换为MySQL支持的关系模型(也就是后续要创建的“数据表”结构,关系=数据表,关系模式=数据表结构)。
关系数据库(MySQL)的逻辑结构设计,只需2步:① E-R图转关系模型;② 优化关系模型(本节课重点讲第①步,第②步简单了解)。
3.1 核心规则:E-R图转关系模型(必记,结合案例)
转换的关键:将E-R图中的「实体」和「联系」,全部转换为对应的关系(数据表),分两类规则:
规则1:实体集的转换(最简单,入门必会)
「一个实体集」→「一个关系(数据表)」,对应关系如下:
-
实体的「属性」→ 关系的「字段」(数据表的列);
-
实体的「码」(唯一标识实体的属性,如学生的“学号”)→ 关系的「主键」(数据表的主键);
-
关系的结构 = 关系模式(如学生表的关系模式:学生(学号,姓名,专业,年级))。
规则2:实体集间联系的转换(重点+难点,易错点)
根据联系类型(1:1、1:n、m:n、多元联系),转换方法不同,结合教务案例逐一讲解,记牢规则即可:
(1)1:1联系的转换(一对一)
两种方法,任选一种,推荐第二种(更简洁,适配MySQL):
-
方法1:转换为独立关系(数据表);
- 关系属性:联系相连的各实体的码 + 联系自身的属性;
- 主键:每个实体的码都是候选码(任选一个)。
-
方法2:与任意一端实体的关系合并(推荐);
- 被合并关系新增属性:联系自身的属性 + 另一个实体的码; - 原实体主键不变。
方案1:联系形成的关系独立存在:
班主任(教工号,姓名,性别,职务)
班级(班级编号,系别,专业)
管理(教工号,班级编号,开始时间),其中“教工号”与“班级编号”均是候选码
方案2:“管理”与“班主任”两个关系合并:
班主任(教工号,姓名,性别,职务,班级编号,开始时间)
班级(班级编号,系别,专业)
方案3:“管理”与“班级”两个关系合并:
班主任(教工号,姓名,性别,职务)
班级(班级编号,系别,专业,教工号,开始时间)
(2)1:n联系的转换(一对多,最常用)
两种方法,推荐第二种(减少数据表数量,更简洁):
-
方法1:转换为独立关系;
- 关系属性:联系相连的各实体的码 + 联系自身的属性;
- 主键:n端实体的码(n端是“多”的一方)。 -
方法2:在n端实体的关系中新增属性(推荐);
- 新增属性:1端实体的码 + 联系自身的属性; - 原n端实体主键不变。
方案1:1:n联系形成的关系独立存在。
学生(学号,姓名,性别,出生日期,所在系);
宿舍(宿舍编号,宿舍名称,宿舍地址);
分配(学号,宿舍编号) 。
方案2:联系形成的关系与n端对象合并。
学生(学号,姓名,性别,出生日期,所在系,宿舍编号);
宿舍(宿舍编号,宿舍名称,宿舍地址)。
【例3.3】图3-15中含有同实体集的 1:n联系,将它转换为关系模型。
方案1:转换为两个关系模式。
教工(教工号,姓名,性别,职务);
领导(教工号,领导工号,)
方案2:转换为一个关系模式。
职工(教工号,姓名,性别,职务,领导工号)。
(3)m:n联系的转换(多对多,重点中的重点)
🔴 唯一方法:必须转换为独立关系(数据表),无法合并到任意一端实体!
-
关系属性:联系相连的各实体的码 + 联系自身的属性;
-
主键:两个相连实体码的组合(联合主键,单个实体码无法唯一标识联系)。

【例3.4】将图3-16中含有m:n二元联系的E-R图,转换为关系模型。
转换的关系模型如下:
学生(学号,姓名,年龄,性别, 出生日期,所在系);
课程(课程号,课程名,先行课程,学分);
选修(学号,课程号,成绩)
【例3.5】将图3-17中含有同实体集间m:n联系的E-R图转换为关系模式
转换后的关系模型为:
零件(零件号,名称,价格);
组装(组装件号,零件号,数量)。
(4)三个及以上实体集的多元联系(了解即可)
入门阶段重点掌握前3种,多元联系简单了解:
-
一对多多元联系:修改n端实体的关系,新增1端实体的码和联系属性;
-
多对多多元联系:新建独立关系,属性为各实体的码 + 联系属性,主键为各实体码的组合。
3.2 关系模型优化(简单了解)
转换后的关系模型,需优化以提升MySQL操作性能,常用方法:
-
确定数据依赖(如“课程号”决定“课程名”“学分”);
-
极小化处理:消除冗余联系(重复属性、重复关系);
-
确定范式:根据数据依赖,判断关系模式属于第几范式(后续课程详解);
-
结合用户需求:调整字段(如“选课表”新增“成绩”字段,满足成绩管理需求)。
四、完整案例实操:E-R图→关系模型(教务系统简化版)
结合前面的规则,将“高校教务系统(简化版)”的E-R图,完整转换为MySQL关系模型,巩固知识点,入门必练!
1. 全局E-R图回顾
-
实体:学生(学号,姓名,专业,年级)、教师(教师工号,姓名,院系,职称)、课程(课程号,课程名,学分,学时);
-
联系:学生-课程(选课,m:n)、教师-课程(授课,1:n)。
2. 转换过程(一步一步来)
-
实体转换(按规则1):
- 学生表(学号,姓名,专业,年级),主键:学号;
- 教师表(教师工号,姓名,院系,职称),主键:教师工号;
- 课程表(课程号,课程名,学分,学时),主键:课程号。 -
联系转换(按规则2):
- 教师-课程(1:n,授课):采用“n端新增属性”,合并到课程表 → 课程表(课程号,课程名,学分,学时,教师工号),主键:课程号;
- 学生-课程(m:n,选课):新建选课表 → 选课表(学号,课程号,选课日期,成绩),主键:(学号,课程号)(联合主键)。
3. 最终关系模型(MySQL数据表结构,入门必记)
-
学生表:学号(主键)、姓名、专业、年级;
-
教师表:教师工号(主键)、姓名、院系、职称;
-
课程表:课程号(主键)、课程名、学分、学时、教师工号;
-
选课表:学号(主键)、课程号(主键)、选课日期、成绩。
五、入门小结+易错点提醒(重中之重)
1. 核心小结(浓缩本节课重点)
-
概念结构设计:需求 → 抽象实体/属性/联系 → 画分E-R图 → 合并全局E-R图 → 评审优化;
-
E-R图绘制:矩形(实体)、椭圆形(属性)、菱形(联系),标注联系类型;
-
模型转换:实体→数据表;联系按类型转换(1:1可合并、1:n可合并到n端、m:n必须新建表)。
2. 易错点提醒(初学者必看,避免踩坑)
-
🔴 混淆联系类型:把“学生-课程”的m:n误判为1:n,导致不新建选课表;
-
🔴 合并E-R图忽略冲突:属性类型、命名、结构不一致,导致后续转换出错;
-
🔴 m:n联系转换忘记设联合主键:选课表只设“学号”为主键,无法唯一标识一条记录;
-
🔴 冗余数据/联系:课程表的“学分”,在选课表中重复添加,造成冗余。
六、课后练习(入门必做)
1. 手动绘制“学生-学生证”(1:1)、“教师-课程”(1:n)的E-R图;
2. 将绘制的E-R图,转换为对应的关系模型;
3. 尝试设计“图书管理系统”的E-R图(实体:图书、读者,联系:借阅,m:n),并转换为关系模型。

【例3.6】将图3-18中含有多实体集间的多对多联系的E-R图转换为关系模型。
转换后的关系模型为:
供应商(供应商号,供应商,地址);
零件(零件号,零件名,价格);
产品(产品号,产品名,型号);
供应(供应商号,零件号,产品号,数量)。
关系合并规则 在关系模型中,具有相同码的关系,可根据情况合并为一个关系。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)