第2章 ER模型(实体-联系模型)

课程:《数据库设计与实践》(0A102) 章节:第2章 ER模型 来源:chap02 ER模型.ppt(6.73MB,PowerPoint 97-2003 图片型格式) 状态说明:PPT为图形化矢量图格式,文本层提取有限(仅获得实体、联系、ISA、UML、overlapping、WorksIn、ReportsTo、D1234、D5678 等关键词)。本篇笔记基于 ER 模型标准知识体系 + 课程框架整理,核心概念和结构与授课内容一致,具体案例和图示细节为推测,以实际课堂为准。


一、ER模型概述

1.1 什么是 ER 模型

实体-联系模型(Entity-Relationship Model,简称 ER 模型)是概念数据库设计的核心工具,由 Peter Chen 于 1976 年提出。它用图形化的方式描述现实世界中的数据及其联系,独立于具体的 DBMS 和数据模型。

ER 模型是从现实世界到关系模型的桥梁:先做 ER 设计,再转换为关系模式。

1.2 ER 模型的三要素

要素英文表示说明
实体Entity矩形客观存在并可相互区分的事物
属性Attribute椭圆形实体所具有的某一特性
联系Relationship菱形实体之间的关联

二、实体(Entity)

2.1 实体与实体集

  • 实体:客观存在并可相互区别的事物。可以是具体的人、事、物,也可以是抽象的概念。
    • 例:一个学生、一门课程、一次选课
  • 实体集(Entity Set):同类型实体的集合
    • 例:全体学生、所有课程
  • 实体型(Entity Type):实体集的结构描述,即实体名 + 属性名集合
    • 例:学生(学号,姓名,性别,出生日期,系别)

2.2 码(Key)

  • 码:唯一标识实体的属性或属性组
  • 候选码:能唯一标识实体的最小属性集,可以有多个
  • 主码(Primary Key):从候选码中选定的一个
  • 超码(Superkey):包含候选码的属性集(可能有冗余属性)

例:学生实体中,学号是候选码(也是主码),(学号, 姓名) 是超码但不是候选码。

2.3 属性的分类

按结构分

类型说明示例
简单属性不可再分的原子属性学号、性别
复合属性由多个子属性组成地址(省, 市, 街道, 邮编)

取值数量分

类型说明示例
单值属性一个实体只取一个值学号、姓名
多值属性一个实体可取多个值联系电话(手机号+座机)

多值属性在 ER 图中用双椭圆表示。

按性质分

类型说明示例
基本属性直接存在的属性姓名、出生日期
派生属性由其他属性计算得到年龄(由出生日期推导)

派生属性在 ER 图中用虚椭圆表示。


三、联系(Relationship)

3.1 联系与联系集

  • 联系:实体之间的关联
  • 联系集:同类联系的集合
  • 联系型:联系集的结构描述

3.2 联系的元数

按参与联系的实体集个数划分:

元数名称说明示例
1:1一元联系同一实体集内部实体之间的联系职工-领导(递归联系)
2二元联系两个实体集之间的联系学生-选课-课程
3三元联系三个实体集之间的联系供应商-项目-零件供应关系
nn元联系多个实体集之间的联系

3.3 映射基数(Mapping Cardinalities)

即一个实体通过联系集可以与另一个实体集中多少个实体相关联。

二元联系的四种基本类型

类型含义例子
1:1(一对一)A中一个实体至多与B中一个实体关联,反之亦然班级-班长
1:N(一对多)A中一个实体可与B中多个实体关联,B中一个实体至多与A中一个实体关联系-学生
N:1(多对一)1:N 的反方向学生-系
M:N(多对多)A中一个实体可与B中多个实体关联,反之亦然学生-课程(选课)

3.4 参与约束(Participation)

  • 全参与(Total Participation):实体集中的每一个实体都必须参与联系
    • 例:每个学生必须属于一个系(学生端全参与)
    • ER 图中用双线表示
  • 部分参与(Partial Participation):实体集中的实体可以不参与联系
    • 例:并非所有教师都担任班主任
    • ER 图中用单线表示

3.5 联系的属性

联系本身也可以有属性:

  • 例:学生选修课程的”成绩”是选课联系的属性,不是学生的属性,也不是课程的属性
  • 只有 M:N 联系的属性是必须的;1:1 和 1:N 联系的属性通常可以合并到某一端实体中

四、弱实体(Weak Entity)

4.1 定义

不能用自身属性唯一标识的实体,称为弱实体。它依赖于另一个实体(标识实体/Owner Entity)才能存在。

4.2 特点

  • 弱实体有一个部分码(Partial Key)/ 分辨符:在同一个属主实体内可以唯一标识弱实体
  • 弱实体的完整码 = 属主实体的主码 + 部分码
  • ER 图中弱实体用双矩形表示,其与属主实体的联系用双菱形表示

4.3 示例

  • 属主实体:职工(职工号为主码)
  • 弱实体:职工家属
    • 部分码:家属姓名
    • 完整码:职工号 + 家属姓名
    • 因为两个不同职工的家属可能同名

五、扩展 ER 模型(EER)

5.1 超类与子类(特化/泛化)

概念

  • 超类(Superclass):具有共同特征的一般化实体集
  • 子类(Subclass):超类中具有特殊特征的子集
    • 子类继承超类的所有属性和联系
    • 子类可以有自己特有的属性和联系

特化(Specialization)

从一般到特殊:自顶向下,将一个实体集按某些特征分解为多个子实体集。

例:

    学生
   /  |  \
本科生 研究生  进修生

泛化(Generalization)

从特殊到一般:自底向上,将多个具有共同特征的实体集抽象为一个更高层的实体集。

例:

本科生  研究生  进修生
   \   |    /
      学生

特化和泛化在 ER 图中用**三角形(ISA)**表示,顶点指向超类。提取到的关键词 “ISA” 即代表此概念。

5.2 特化/泛化的约束

成员资格约束

约束类型说明
条件定义按某个属性的值自动划分(如:学生按”类别”属性分为本科/研究生)
用户定义由用户手工指定分配

不相交性约束

约束类型说明
不相交(Disjoint)一个实体最多属于一个子类
重叠(Overlapping)一个实体可以同时属于多个子类

提取到的关键词 “overlapping” 即重叠约束。

完备性约束

约束类型说明
全特化(Total)每个超类实体必须属于某个子类
部分特化(Partial)超类实体可以不属于任何子类

四种组合:全-不相交、全-重叠、部分-不相交、部分-重叠。

5.3 聚集(Aggregation)

将一个联系集(连同参与的实体集)抽象为一个高层实体,参与其他联系。

  • 适用场景:联系本身需要参与另一个联系
  • 例:“学生-项目-导师”三元联系可以聚集为”指导”实体,再与”评价”联系关联

5.4 范畴(Category)/ 联合类型

由多个不同实体集的并集构成的超类。

  • 与特化的区别:范畴的子类可以从多个不相关的实体集中选择成员
  • 例:账户持有人可以是个人客户,也可以是公司客户

六、ER 图设计原则

6.1 实体 vs 属性

  • 作为属性的条件:不需要再分解,也不需要与其他实体发生联系
  • 作为实体的条件:有自己的多个属性,或需要参与其他联系

判断技巧:如果某”属性”在别处被引用,或者需要独立维护,就应该建模为实体。

6.2 实体 vs 联系

  • 描述事物用实体
  • 描述事物之间的关联用联系
  • 一个动作事件如果有多个参与方,通常是联系(也可能是弱实体)

6.3 常见设计陷阱

陷阱说明
用联系代替实体把本应是实体的事物设计成了联系
用属性代替实体把本应有独立结构的事物设计成了属性
不必要的联系可以通过其他联系推导出来的冗余联系
联系方向搞反1:N 的方向搞反
基数标注错误把 M:N 错标成 1:N

七、ER 模型到关系模型的转换

7.1 实体 → 关系表

  • 每个实体集 → 一张关系表
  • 实体的属性 → 表的列
  • 主码 → 表的主键

7.2 联系 → 关系表/外键

联系类型转换方式
1:1在任意一端加入对方主码作为外键
1:N在 N 端实体表中加入 1 端主码作为外键
M:N单独建一张联系表,包含两端主码+联系属性
弱实体建表,主码 = 属主主码 + 部分码
ISA特化多种策略:只建超类表 / 每个子类建表 / 每个实体型建表

八、与其他章节的关联

数据库设计流程:需求分析 → ER 概念设计 → 关系模式转换 → 规范化 → 物理设计 → 实现