概念结构设计 & 逻辑结构设计

把现实世界画成 E-R 图 → 把 E-R 图变成数据库表

🎯 本节课你需要掌握的(按重要程度排序)
  • E-R 图的三大元素:实体、属性、联系 必考
  • 三种联系类型:1:1、1:n、m:n(最常考)必考
  • 会画 E-R 图(考试可能要画图)必考
  • 把 E-R 图转换成关系模式(必考综合题)必考
  • 三种联系的转换规则 必考

📐 先想象一个真实场景:

老板说:"我们要做一个学生选课系统,学生能选课、老师能给成绩。"

你作为开发者,第一步该干什么?直接打开 MySQL 写 CREATE TABLE 吗?

👉 千万别!那样一定会做出第 12 章里那种"包罗万象的烂表"。

正确的做法是:先在纸上画图 —— 把"学生、课程、选课"这些概念画清楚,明确它们之间的关系,动手建表。这就是本章要学的。

一、数据库设计的整体流程了解

1.1 数据库设计的 6 个阶段

设计一个数据库 不是直接建表,而是要按步骤来。一共 6 个阶段:

需求分析 第11章 概念结构设计 画 E-R 图 本章 13.1 逻辑结构设计 变成关系模式 本章 13.2 物理结构设计 第14章 实施 CREATE TABLE 运行维护 长期工作

数据库设计的 6 个阶段,本章讲红色框的两个

🔑 一句话定位本章

本章解决 "从需求 → 数据库表" 这一步:

13.1 概念结构设计:把需求画成 E-R 图(不涉及具体数据库)

13.2 逻辑结构设计:把 E-R 图转成 关系模式(即将变成 MySQL 表)

二、E-R 图:把现实画成图核心重点

2.1 什么是 E-R 图?

📖 一句话定义

E-R 图(Entity-Relationship Diagram,实体-联系图)是一种用图形描述现实世界的工具,是数据库设计中 最重要的图

🌰 通俗类比

E-R 图就像 装修前的"户型图"

装修前先画图 → 客厅在哪、卧室多大、电线怎么走 → 一切都规划好了再动工。

建数据库前先画 E-R 图 → 有哪些实体、它们之间是什么关系 → 都想清楚再建表。

2.2 E-R 图的三大元素必考

整个 E-R 图就由三种符号构成。一定要记住每种代表什么、长什么样:

学生

实体(矩形)

现实中能区分的"事物"
如:学生、课程、老师

学号

属性(椭圆)

实体的"性质/特征"
如:学号、姓名、年龄

选修

联系(菱形)

实体之间的"关系/动作"
如:选修、属于、领导

⭐ 必背口诀

"矩形装实体,椭圆装属性,菱形装联系"

三个图形对应三个元素,千万别画错。考试要画图时这是基本功。

三个元素之间的连接规则

💬 连接规则

实体(矩形) 和它的 属性(椭圆)无向直线 连接(没有箭头)。

实体(矩形) 通过 联系(菱形) 连接到另一个实体。

联系(菱形) 也可以有自己的 属性(椭圆)

2.3 怎么区分"实体"和"属性"?必考

这是个 难点:什么时候把"系别"当属性?什么时候当实体?

🔑 两个判断标准

属性没有更细的描述,实体有更细的描述。
如果"系别"还要描述系主任、办公室、学生人数 → 应该是 实体
如果"系别"只是个名字,不需要其他信息 → 可以是 属性

属性不能与其他实体有联系,联系只能发生在实体之间。
如果某个东西要和其他实体建立联系 → 必须是实体。

🌰 用"系别"举例

① 简单情况:学生表里只需要"系别名称"这一个字段 → 系别是 属性

② 复杂情况:还要存"系主任、办公地点、学生人数" → 系别要 独立成实体,因为它有自己的描述。

三、三种联系类型核心重点

3.1 实体之间的三种联系必考

两个实体之间的关系,有三种类型:

1 : 1 一对一

A 中的 1 个对应 B 中的 1 个,反过来也一样。

例:学校 ↔ 校长

1 : n 一对多

A 中的 1 个对应 B 中的多个,但 B 中的 1 个只对应 A 中的 1 个。

例:班级 → 学生(一个班多个学生)

m : n 多对多

A 中的 1 个对应 B 中的多个,B 中的 1 个也对应 A 中的多个

例:学生 ↔ 课程(一个学生选多门课,一门课多个学生选)

三种联系的图形表示

1 : 1(一对一) 领导 系主任 1 1 一个系一个系主任 1 : n(一对多) 属于 学生 1 n m : n(多对多) 学生 选修 课程 m n 成绩 联系本身可以有属性(成绩) 自联系(同一实体内部) 职工 领导 1 n
三种联系类型 + 自联系(一个实体内部的联系,比如职工领导其他职工)
⚠️ 怎么判断是哪种联系?

问自己两个问题:

① "A 中的 1 个,对应 B 中几个?" 1 个 → 写 1,多个 → 写 m 或 n

② "B 中的 1 个,对应 A 中几个?" 1 个 → 写 1,多个 → 写 n 或 m

两个答案组合就是答案。比如:1 对应 多 → 1:n;多 对应 多 → m:n。

四、画一个完整的 E-R 图:学生选课必考实操

4.1 经典案例:学生选课系统

📋 需求描述

设计一个学生选课系统,包含以下需求:

① 一个 学生 有学号、姓名、年龄、所在系;

② 一个 课程 有课程号、课程名、学分;

一个学生可以选多门课,一门课可以被多个学生选

④ 学生选了某门课会有一个 成绩

分析步骤

💡 三步走画 E-R 图

第一步:找实体 —— 描述里提到的"事物"就是实体。
本例中:学生、课程(两个实体)

第二步:找属性 —— 每个实体的"特征"。
学生的属性:学号、姓名、年龄、所在系
课程的属性:课程号、课程名、学分

第三步:找联系 —— 实体之间的"动作"。
学生 选修 课程,是 m:n 关系(多个学生选多门课);
"选修"这个联系本身有属性 成绩(每次选修产生一个成绩)。

完整的学生选课 E-R 图

学生 学号 姓名 年龄 所在系 选修 m 成绩 课程 n 课程号 课程名 学分 主码用下划线标记 · m:n 联系,"成绩"是联系的属性
学生选课系统的完整 E-R 图(背下来这种画法!考试时多半就是画类似的图)
⭐ 画 E-R 图的小技巧

主码(主键)属性要加下划线,比如学号、课程号下面要画一条线。

m:n 联系常常自己有属性(比如选修产生成绩)。

1:n 联系一般没有自己的属性(特殊情况例外)。

属性多的时候:椭圆可以散开摆放,连线清晰即可,不要挤在一起。

五、逻辑结构设计:把图变成表核心重点

5.1 什么是逻辑结构设计?

📖 一句话定义

逻辑结构设计就是 把 E-R 图(概念模型)转换成关系模式(即将变成 MySQL 里的表)。

🌰 类比

概念结构设计 = 装修公司的 "户型图"(不涉及具体材料)
逻辑结构设计 = "施工图"(明确每堵墙用什么砖、每根线用什么型号)

从前者到后者,要按照"转换规则"一步步翻译。

六、E-R 图 → 关系模式:转换规则必考核心

6.1 总体原则必考

🎯 转换三件套

① 实体 → 关系模式(每个实体变成一张表)

② 属性 → 关系的属性(实体的字段就是表的字段)

③ 主码(实体的键)→ 关系的主键

简单实体的转换示例

把"学生"实体转换成关系模式:

📊 E-R 图(实体)

学生
属性:学号、姓名、年龄、所在系
主码:学号

📋 关系模式
学生(学号, 姓名, 年龄, 所在系)

下划线表示主键。这部分简单,问题在 "联系"怎么转

6.2 联系的转换:三种情况必考

这里是必考点。三种联系(1:1、1:n、m:n)的转换规则不一样。

联系类型 转换规则 结果(生成几张表)
1 : 1
一对一
把一方实体的主键放到另一方实体的关系模式中(作为外键);
或者两个实体的主键都可以是新表的候选键
不需要新增表(合并到一方)
1 : n
一对多
把"1"端的主键放到"n"端的关系模式中(作为外键)。
不用单独建表。
不需要新增表
m : n
多对多 ⭐
必须 单独建一张新表
新表 = 两个实体的主键 + 联系自己的属性。
主键 = 两个实体的主键组合
需要新增表
⭐ 必背口诀

"1:1 合并、1:n 加外键、m:n 必须建新表"

这一句话能解决考试中 95% 的转换题。

6.3 三种转换的具体例子必考

① 1:1 联系的转换

"系" 与 "系主任" 是 1:1 联系。

📊 E-R 图

系(系编号, 系名)
系主任(工号, 姓名)
1:1 联系:领导

📋 关系模式(合并到一方)
系(系编号, 系名, 系主任工号
系主任(工号, 姓名)

把"系主任工号"作为外键放到"系"表里。

② 1:n 联系的转换

"系" 与 "学生" 是 1:n 联系(一个系有多个学生)。

📊 E-R 图

系(系编号, 系名)
学生(学号, 姓名)
1:n 联系:属于

📋 关系模式(外键加到 n 端)
系(系编号, 系名)
学生(学号, 姓名, 系编号

关键:把"1"端的主键(系编号)放到"n"端(学生)作为外键。

③ m:n 联系的转换 ⭐

"学生" 与 "课程" 是 m:n 联系(学生选修课程)。这是最容易考的

📊 E-R 图

学生(学号, 姓名)
课程(课程号, 课程名)
m:n 联系:选修(属性:成绩)

📋 关系模式(必须新建一张表)
学生(学号, 姓名)
课程(课程号, 课程名)
选修(学号, 课程号, 成绩)
🔑 关键要点

必须新建一张"选修"表,不能省!

② 新表的属性 = 两个实体的主键 + 联系自己的属性(这里是成绩)

③ 新表的主键 = 两个实体主键的组合(学号 + 课程号)

七、完整案例:把学生选课 E-R 图转换成关系模式必考

7.1 完整转换演示

回到第四节画的"学生选课" E-R 图。它包含:

  • 2 个实体:学生、课程
  • 1 个 m:n 联系:选修(带属性"成绩")

转换步骤

第一步:每个实体变成关系模式
学生(学号, 姓名, 年龄, 所在系)
课程(课程号, 课程名, 学分)
第二步:m:n 联系单独建表
选修(学号, 课程号, 成绩)

主键是 (学号, 课程号) 组合,"成绩"是联系自带的属性。

✅ 最终结果(3 张表)
学生(学号, 姓名, 年龄, 所在系)
课程(课程号, 课程名, 学分)
选修(学号, 课程号, 成绩)

这 3 张表对应 MySQL 里就是 3 个 CREATE TABLE

💡 验证一下:这 3 张表满足第 12 章的 3NF 吗?

学生表:主键学号是单属性,自动满足 2NF;没有传递依赖,满足 3NF ✓

课程表:同理,满足 3NF ✓

选修表:主键 (学号, 课程号),唯一非主属性"成绩"必须两个键都给才能确定,是完全依赖,满足 2NF;没有传递依赖,满足 3NF ✓

所以 E-R 图正确转换的关系模式,天然就满足 3NF

7.2 注意事项必考易错点

⚠️ 转换中容易出错的地方

不要漏掉实体。把所有实体都转换成关系模式。

不要漏掉联系。特别是 m:n 联系必须单独成表。

转换后要标出主码(写答案时要加下划线)。

1:n 联系不用新增表,只把 1 端主键加到 n 端做外键。

联系的属性要加到哪里?

  • m:n 联系 → 加到新建的表里
  • 1:n 联系 → 加到 n 端的关系模式里
💬 关于 BCNF 和模式分解

这一步转换出来的关系模式,可以再用第 12 章的 规范化理论 做检查和分解,确保都是 3NF。

如果 E-R 图画得好,转换出来的关系模式一般直接就是 3NF,不需要再分解。

八、本章小结

📋 三句话总结整章

🎯 核心逻辑链
  • 概念结构设计 = 画 E-R 图(实体矩形、属性椭圆、联系菱形)
  • 逻辑结构设计 = 把 E-R 图按规则转换成 关系模式
  • 转换规则核心:1:1 合并 / 1:n 加外键 / m:n 单独建表。

本章必考点回顾

⭐ 期末考点(按出现频率排)

  1. 给一个需求描述,画 E-R 图(必考大题!)
  2. 把 E-R 图转换成关系模式(必考大题!)
  3. 三种联系类型的辨析(1:1、1:n、m:n 的判断)
  4. 转换规则的应用(特别是 m:n 必须新建表)
  5. E-R 图三大元素的图形(哪个是矩形、椭圆、菱形)

课堂综合测验

第 1 题

在 E-R 图中,以下哪种图形表示联系

A. 矩形
B. 椭圆
C. 菱形
D. 圆形

✅ 正确:C · 菱形

记忆:"矩形装实体,椭圆装属性,菱形装联系"

第 2 题

某公司有"员工"和"部门"两个实体。一个员工只能在一个部门工作,一个部门有多个员工。这两个实体之间是什么联系?

A. 1:1
B. 1:n(部门:员工 = 1:n)
C. m:n
D. 没有联系

✅ 正确:B · 1:n

判断方法:

① 一个部门 → 多个员工 → 写 n

② 一个员工 → 一个部门 → 写 1

所以是 1:n(部门是 1 端,员工是 n 端)

第 3 题

把 m:n 联系转换为关系模式时,应该如何处理?

A. 把一方主键加到另一方做外键
B. 不需要做任何处理
C. 必须单独建一张新表,主键是两个实体主键的组合
D. 把两个实体合并成一张表

✅ 正确:C

口诀:"1:1 合并、1:n 加外键、m:n 必须建新表"

m:n 联系如果不新建表,无法正确表达"多对多"关系。新表的主键是两端主键的组合,外加联系自身的属性(如选修中的成绩)。

第 4 题

某 E-R 图:学生(学号, 姓名)↔ 课程(课程号, 课程名)通过"选修"(成绩)联系,是 m:n 关系。下面哪组关系模式 转换正确

A. 学生(学号, 姓名, 课程号, 成绩) + 课程(课程号, 课程名)
B. 学生(学号, 姓名)+ 课程(课程号, 课程名)+ 选修(学号, 课程号, 成绩)
C. 学生选修(学号, 姓名, 课程号, 课程名, 成绩)一张表搞定
D. 学生(学号, 姓名)+ 课程(课程号, 课程名, 学号, 成绩)

✅ 正确:B

分析:

A 错:把课程号塞到学生表里,违反 m:n 转换规则。

C 错:合并成一张表会有大量冗余(就是第 12 章的"烂表")。

D 错:把学号塞到课程表里,无法表达多对多。

B 对:m:n 必须单独建"选修"表,主键 (学号, 课程号),加上联系属性"成绩"。

🚀 下节课:习题课

下节课通过 大量练习 巩固今天的知识:

  • 🎨 画 E-R 图(给一个需求描述,画出完整的 E-R 图)
  • 📋 转换关系模式(把 E-R 图变成一组关系模式)
  • 🔍 判断联系类型(识别 1:1、1:n、m:n)
  • 📝 综合大题:从需求 → E-R 图 → 关系模式(必考综合题)

本章是 纯设计 + 推导,没有上机部分。下节课请带上 纸笔和橡皮