从 E/R 图(实体 - 联系图)转换为关系模式(数据库表结构)的核心规则,是数据库设计中 "概念模型→逻辑模型" 的关键步骤。以下是详细拆解:
一、核心逻辑:E/R 图的元素如何对应数据库表
E/R 图的核心元素是实体(Entity) 、属性(Attribute) 、联系(Relationship),它们会被转换为数据库中的 "表(Relation)""列(Column)""外键(Foreign Key)"。
二、实体(Entity)的转换规则
实体对应数据库中的表 ,实体的属性对应表的列,但不同类型的属性有不同处理方式:
- 普通属性(单值、原子属性) :直接转为表的列,实体的主码(主键)对应表的主键。
- 例:"Product(产品)" 实体→
Product表,其属性 "产品 ID""名称"→Product表的列,"产品 ID" 作为主键。
- 例:"Product(产品)" 实体→
- 复合属性 :拆分为多个原子属性(列)。
- 例:"地址"(含省、市、街道)→拆为 "省份""城市""街道" 三列。
- 多值属性 :单独新建一个表,通过外键关联原实体表。
- 例:"Product" 的 "标签"(一个产品可多个标签)→新建
Product_Tag表,包含 "产品 ID(外键,关联 Product 表)""标签内容" 两列。
- 例:"Product" 的 "标签"(一个产品可多个标签)→新建
- 实体象形图(空间数据) :在 PostGIS 等空间数据库中,转为
Geometry类型列(存储 WKB/WKT 格式的空间几何数据)。
三、联系(Relationship)的转换规则
联系的转换取决于其基数(1:1、1:N、M:N),核心是通过 "外键" 或 "新表" 实现关联:
- 1:1(一对一)联系 :
- 方式:可新建一个表,或把其中一个实体的主键作为外键,放到另一个实体的表中(需加唯一约束,保证 "一对一")。
- 例:"员工" 与 "工牌"(1:1)→可在
员工表中加 "工牌 ID(外键 + 唯一约束)" 列。
- 1:N(一对多)联系 :
- 方式:将 "1 端" 实体的主键作为外键,放到 "N 端" 实体的表中(无需唯一约束,因为 N 端可对应多个)。
- 例:图中 "Company(公司)-makes-Product(产品)" 是 1:N(一个公司可生产多个产品)→在
Product表中加 "公司 ID(外键)" 列。 - 优势:减少表的数量,提升查询效率。
- M:N(多对多)联系 :
- 方式:必须新建一个表,包含参与联系的两个实体的主键(作为外键),这两个外键共同构成新表的主键。
- 例:"学生" 与 "课程"(M:N)→新建
学生_课程表,包含 "学生 ID(外键)""课程 ID(外键)" 两列(联合主键)。
- part-of 联系(部分 - 整体联系,如聚合 / 组合) :
- 通常按 "1:N" 或 "M:N" 处理,若为 "组合"(整体删除则部分也删除),需在数据库中设置 "级联删除" 约束。
四、E/R 图中的约束在关系模式中的体现
- 主键约束:实体的主码对应表的主键,保证实体的唯一性。
- 单值约束(1:1、1:N):通过外键的 "唯一约束"(1:1)或 "非唯一约束"(1:N)实现。
- 参照完整性约束 :外键必须关联到对应表的主键,保证数据的一致性(如
Product表的 "公司 ID" 必须是Company表中存在的 ID)。
总结
E/R 图转关系模式的核心是:
- 实体→表,属性→列;
- 联系→外键或新表(根据基数选择);
- 多值 / 复杂属性→拆分为新表或特殊类型列。
这一过程是将 "概念上的实体 - 联系" 转化为 "数据库可存储的表结构",是数据库设计的基础步骤。
E/R 转关系模式的规则速查表
这是一份E/R 图转关系模式的规则速查表,涵盖核心元素 + 不同场景的处理方式,方便你快速查阅:
E/R 图元素 → 关系模式对应表
| E/R 图元素 | 关系模式(数据库)对应物 | 处理规则 |
|---|---|---|
| 实体(Entity) | 表(Relation) | 实体名→表名;实体属性→表的列;实体主码→表的主键。 |
| 普通属性(单值、原子) | 表的列(Column) | 直接作为对应实体表的列。 |
| 复合属性 | 多个列 | 拆分所有原子子属性,作为对应实体表的多个列。 |
| 多值属性 | 新表 + 外键 | 新建表(含 "原实体主键(外键)"+"多值内容"),外键关联原实体表。 |
| 空间属性(象形图) | 特殊类型列(如 PostGIS 的Geometry) |
存储 WKB/WKT 格式的空间数据,对应实体表的一列。 |
| 1:1 联系 | 外键(二选一) | 方式 1:将 A 的主键作为外键(加唯一约束)放到 B 表;方式 2:新建表,含 A、B 的主键(联合主键)。 |
| 1:N 联系 | 外键(放 N 端) | 将 "1 端" 实体的主键作为外键,放到 "N 端" 实体的表中。 |
| M:N 联系 | 新表 + 双外键 | 新建表,含参与联系的两个实体的主键(作为外键,联合主键)。 |
| part-of 联系(聚合 / 组合) | 外键 + 约束 | 按 1:N/M:N 处理;若为组合,加 "级联删除" 约束(整体删除时,部分自动删除)。 |
示例对照(以 "Company-makes-Product" 为例)
| E/R 图元素 | 关系模式实现 |
|---|---|
| 实体 Company(主码:公司 ID) | 表Company(列:公司 ID <主键>、公司名、地址) |
| 实体 Product(主码:产品 ID) | 表Product(列:产品 ID <主键>、产品名、价格、公司 ID <外键>) |
| 1:N 联系 "makes" | Product表中的 "公司 ID" 外键关联Company表的 "公司 ID" |