知识卡片

E-R模型向关系模型转换的映射规则

结构图卡

内容

把E-R图转成关系模型,本质是把[[E-R模型的三要素与二元联系的三种基数 类型]]里三种不同的联系基数各自映射成不同的表结构方案,映射规则由 基数类型唯一决定,不是随意选择的。一个实体直接转换为一张关系(表), 实体的属性变成表的属性,实体的标识符变成表的主码,这一步是最直接、 没有分歧的。联系的转换才是关键:一对一联系可以把任意一方的主码作为 外码加进另一方的表(选哪一方通常看查询习惯,两种做法逻辑等价); 一对多联系必须把”一”这一方的主码作为外码加进”多”这一方的表——顺序 不能反过来,因为”多”的一方每条记录只能对应”一”的一方的一条记录, 外码放在”多”的一方才能正确表达这种约束;多对多联系无法用简单的”加 外码”表达,必须把联系本身也转换成一张独立的关系表,这张新表的属性 是两端实体的主码加上联系本身的属性,它的主码是两端实体主码的组合。 这套规则的核心逻辑是:一对一和一对多能用”外码指向唯一一方”表达约束, 而多对多的约束天然需要一张独立的”关联表”才能承载,这正是[[实体完整性 参照完整性用户自定义完整性三层约束体系]]中外码约束在数据库设计阶段 的源头——设计阶段决定了往哪张表加外码,运行阶段的参照完整性检查 才有依据可循。

结构图

flowchart TD
    A[E-R模型联系] --> B{联系基数类型}
    B -->|一对一 1:1| C[任一方表中加入<br/>另一方的主码作外码]
    B -->|一对多 1:n| D["'多'一方的表中加入<br/>'一'一方的主码作外码"]
    B -->|多对多 m:n| E[联系本身转换为独立关系表<br/>属性=两端主码+联系属性<br/>主码=两端主码组合]

参考来源

- 位置:《数据库原理(微课版)》第6章《数据库设计》6.4.1节"E-R模型向 关系模型的转换"(源文件:_epub-src/index_split_004.html) - 结论依据:原文明确"一个实体转换为一个关系模式……两个实体间为1∶1 联系,可以在两个实体转换成的两个关系模式的任意一个关系模式属性中, 加入另一个关系模式的码……两个实体间为1∶n联系,在n端实体转换成的 关系模式中加入1端实体的码……两个实体间为m∶n联系,将联系类型也 转换成关系模式,其属性为两端实体的码加上联系类型属性,而键为两端 实体的码的组合",因此可以推出三种基数类型对应的转换规则。 - 原始内容:两个实体间为1∶n联系,在n端实体转换成的关系模式中加入1端 实体的码和联系类型属性……两个实体间为m∶n联系,将联系类型也转换 成关系模式,其属性为两端实体的码加上联系类型属性,而键为两端实体 的码的组合。