Skip to content
难度基础(★)
建议时长45分钟

3.4.3 E-R图转关系模式

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

转换的总原则

E-R 图转关系模式的目标,是把概念模型中的实体、属性和联系完整地落到二维表结构中。实体通常比较直接,难点在联系:联系到底单独成表,还是归并到某一端实体表里。

可以先记住总公式:

E-R 元素关系模式中的处理
实体集转换为一个关系模式
实体属性转换为该关系模式的属性
实体标识符转换为主键
联系根据 1:1、1:n、m:n 决定单独成表或归并
联系属性跟随联系所在的关系模式

实体转换:先把对象落表

例如:

客户(身份证号,客户名,地址,联系电话)账户(账户号,余额)

下划线表示主键。字幕中特别提醒:人员信息若有身份证号、人员编号等稳定唯一标识,通常不要用姓名作主键,因为重名很常见。

1:1 联系:最灵活

一对一联系有三种处理方式:

处理方式做法适用理解
独立成表联系关系包含两端主键和联系属性语义清楚,但多一张表
并入左端把右端主键和联系属性放入左端左端更常发起访问时可考虑
并入右端把左端主键和联系属性放入右端右端更常发起访问时可考虑

因为双方都是“一”,把外键放任一方都不会造成一条记录需要保存多个对方主键的问题。归并后被归并关系的原主键通常不变,只是增加外键和联系属性。

1:n 联系:归并只能进多端

字幕用“客户-账户”说明一对多:一个客户可以有多个账户,一个账户只属于一个客户,联系上有“开户时间”。

若单独成表,可以有:

存款者(身份证号,账户号,开户时间)

这里主键应是账户号,因为一个账户唯一对应一个客户;身份证号会重复出现。

更常见的归并方式是把联系并入多端:

账户(账户号,余额,身份证号,开户时间)

为什么只能并入多端?如果把账户信息并入客户端,一个客户有 100 个账户,就需要在客户记录中重复或扩展 100 组账户字段,破坏二维表结构并造成大量冗余。把客户身份证号放到账户表中,每个账户只记录一个所属客户,结构自然。

联系类型独立成表时联系表主键归并方式归并后主键
1:1任一端主键通常都可唯一标识可并入任一端被并入实体原主键不变
1:n多端主键只能并入多端多端原主键不变
m:n两端主键组合不能归并独立联系表通常用组合主键

m:n 联系:必须独立成表

多对多双方都可能对应多个对方实例,只在一端加一个外键无法表达“多个”。例如学生选课:

学生(学号,姓名)课程(课程号,课程名)选课(学号,课程号,成绩,选课时间)

其中 学号 + 课程号 组合起来标识一条选课事实;成绩和选课时间是联系属性,必须放到选课关系中。

下午题常见补空逻辑

关系模式补空题常隐藏在“联系归并”里。看到缺字段时,不要只从实体属性里找,还要回头看 E-R 图的联系:

  1. 缺的是另一端实体主键吗?可能是外键归并。
  2. 缺的是联系上的属性吗?应随联系表或归并后的多端表保存。
  3. 缺的是组合主键的一部分吗?多对多联系表常以两端主键组合为主键。
  4. 1:n 归并后,多端实体原主键不应被改成一端主键。

做题路线

  1. 先把所有实体单独转换成关系模式,并标出主键。
  2. 再逐个处理联系:1:1 看是否可归并,1:n 优先并入多端,m:n 独立成表。
  3. 联系有属性时,属性跟着联系走,不能随意放到某个实体上。
  4. 最后检查主键是否仍能唯一标识元组,外键是否指向被引用关系的主键或候选键。

例题

单选
1:n 联系转换为关系模式时,外键通常放在:
单选
m:n 联系转换时通常应:

自查要点

  1. 实体转换为关系模式时,标识符如何处理?
  2. 1:n 联系为什么外键放在 n 方?
  3. m:n 联系为什么通常要单独建表?