数据库关系建模(ER图设计关系表)

article/2025/5/1 14:56:26

目录

一、概述

二、基本概念

 1. 关系(relation)

 2. 列(column)

 3. 行(row)

4. 关系表 VS 一般的表

5. 主码(主键primary key)

 6. 实体完整性约束(entity integrity constraint)

7. 外码(外键foreign key)

8. 参照完整性约束(reference integrity constraints)

三、ER模型到关系表的映射

 1. 将常规实体映射为关系

  2. 将具有复合属性的实体映射为关系

  3. 将具有唯一复合属性的实体映射为关系

4. 将具有可选属性的实体映射为关系

5. 一对多(1:M)联系的映射

6. 多对多(M:N)联系映射

7. 一对一(1:1)联系的映射

8. 将具有若干候选码的实体映射为关系

9. 将具有多值属性的实体映射为关系

10. 将具有派生属性的实体映射为关系

11. 一对多(1:M)一元联系的映射

12. 多对多(M:N)一元联系的映射

13. 一对一(1:1)一元联系的映射

14. 将弱实体映射为关系

 15. 将关联实体映射为关系

 16. 三元联系的映射


一、概述

 ER建模环节完成后,需求就被描述成了ER图。之后,便可根据这个ER图设计相应的关系表了。

        但从ER图到具体关系表的建立还需要经过两个步骤:1. 逻辑模型设计 2. 物理模型设计。其中前者将ER图映射为逻辑意义上的关系表,后者则映射为物理意义上的关系表。逻辑意义上的关系表可以理解为单纯意义上的关系表,它不涉及到表中字段数据类型,索引信息,触发器等等细节信息。

        本文将详细介绍前者。确切来说,也就是ER模型到逻辑关系表的映射是如何完成的。

二、基本概念

 1. 关系(relation)

        关系就是在数据库中存在的,包含行和列的一张表。也常被称为关系表,或者表。注意只有在确保不会引起混乱的时候使用最后一种称呼,因为关系表和一般意义上的表有很大区别(下文会分析)。

 2. 列(column)

        列就是字面意义上表的列。但是它也有时被称作属性,或者域。

 3. 行(row)

        行就是字面意义上表的行。但是它也有时被称作元祖,或者记录。

4. 关系表 VS 一般的表

        关系表有以下几个基本约束:

                a. 一个列只能有一个名称;

                b. 不能出现完全一样的行;

                c. 表中每个值都必须为单值;

                d. 同一列中的所有值都必须属于同一个域;

                e. 行/列顺序无关

5. 主码(主键primary key)

        每个关系必须要有一个主码(可含多列),用来唯一标识表中各行记录。

 6. 实体完整性约束(entity integrity constraint)

        指所有主码必须非空。

7. 外码(外键foreign key)

        外码是某关系中的一列,而这一列恰恰又是另一个关系的主码。

8. 参照完整性约束(reference integrity constraints)

        外码取值要么为空,要么为其参照关系中的主码取值。

三、ER模型到关系表的映射

 1. 将常规实体映射为关系

        对常规实体来说,每个常规属性对应到关系表中的一列,而某单值且唯一的列则映射为主码,标记下划线。

        如下实体:

将映射为关系:

  2. 将具有复合属性的实体映射为关系

        这类映射中,复合属性的各子属性会映射到的新的关系中,但是复合属性名本身不会。

        如下实体:

将映射为关系:

虽然关系中没有出现符合属性名,但数据库上层的前端应用可能会利用到复合属性名。也就是ER图在各个阶段都有可能用到,不是说映射为关系后就没啥事了。

  3. 将具有唯一复合属性的实体映射为关系

        这类映射中,将会形成一个复合主码,其成员为复合属性的各子属性。

        如下实体:

一个building有很多roomnumber,不同的building可能有相同的roomnumber,比如不同的building可能都有101号房间号,只有building和roomnumber一起才能确定classroom。

将映射为关系:

4. 将具有可选属性的实体映射为关系

        这类映射中,需要将可选属性对应的列标记一个(O)。

        如下实体:

bonus奖金,可能有也可能没有,所以是可选的

将映射为关系:

5. 一对多(1:M)联系的映射

        这类映射的规则为:在由1:M联系中属于M侧的实体所映射得到的关系中设置一个外码,这个外码对应于由1侧的实体映射得到的关系中的主码。

        如下ER模型:

将映射为关系:

注意,外码命名不一定要和它对应的主码一致,应根据实际情况决定。

6. 多对多(M:N)联系映射

        这类映射的规则为:除了具有多对多联系的两个实体之外,联系本身也需要映射为关系。联系对应的关系中将有两个外码,分别对应两个实体的主码,同时这两个外码构成新关系的主码。

        比如下面这个ER模型:

将映射为关系:

7. 一对一(1:1)联系的映射

        这类映射和1:M的很相似。原则上外键设在任何一个实体的关系中都OK,但如果一对一联系中的基数约束是强制单个和可选单个这种类型,则最好将外键设置在可选多的一侧。因为这样可以保证关系中不会出现太多空值。

        比如下面这个ER模型:

将映射为关系:

8. 将具有若干候选码的实体映射为关系

        这类映射中,主码依然标记划线,而非主码唯一属性则标记(U)。

        如下实体:

 将映射为关系:

9. 将具有多值属性的实体映射为关系

        这类映射中,需要为多值属性创建一个新的关系。新的关系中包含一个外码,对应到主实体的主码。同时属性值和外码构成新的关系的复合主码。

        如下实体:

将映射为关系:

10. 将具有派生属性的实体映射为关系

        派生属性不需要做什么特别处理,为前端的事情。

11. 一对多(1:M)一元联系的映射

        这类映射的规则为:实体映射得到的关系中包含一个外码,对应到关系自身的主码。

        如下ER模型:

 将映射为关系

需要注意的是,该映射中外键名和主键名是不同的,以区分它和主码。事实上关系中也不允许出现名称相同的两列。

12. 多对多(M:N)一元联系的映射

        这类映射的规则为:除了实体本身需要映射为关系之外,多对多联系需要映射为另一个关系。新的关系中将有两个外码,它们均对应到实体主码。且这两个外码又组合为新关系的复合主码。

        如下ER模型:

 将映射为关系:

这里同样要注意外键名要避免和主键名重复。

13. 一对一(1:1)一元联系的映射

        和上面第11条讲的一对多的一元联系映射规则完全相同,此处不再举例说明。

14. 将弱实体映射为关系

        弱实体映射和常规一对多联系映射一样需要在弱实体(M侧实体)中建立一个对应到属主实体(1侧实体)的外码。然而区别是弱实体中的主码是弱实体自身的部分码+外码构成的复合主码,而后者的主码仅是M侧实体自己的主码。

        如下ER模型:

 将映射为关系:

当然,如果联系是一对一,则弱实体的主码就是那个对应到其属主实体的外码而没有部分码了。

        如下ER模型:

     将映射为关系:

 15. 将关联实体映射为关系

        关联实体本身就是联系,因此它的映射规则和联系是一样的。联系的映射在前文已经完成讲解,此处不再累述了。

 16. 三元联系的映射

        这类映射和多对多联系的映射比较相似。如下ER模型:

 可映射为:

这里提示下,三元联系的情况,联系肯定是多对多对多的。因为如果这三元中有一个为一,那么三元联系就应转成两个二元的一对多联系。

        概念模型建模和ER建模,需求可视化表达的是一个意思。在这个环节中,数据开发人员绘制ER图,并和项目各方人员协同需求,达成一致。由于这部分的工作涉及到的人员开发能力比较薄弱,甚至不懂开发,因此ER图必须清晰明了,不能涉及到过多的技术细节。在ER图绘制完毕之后,才开始将它映射为关系表。这个映射的过程,就叫做逻辑模型建模或者关系建模。

        有人会说,ER图不是可以直接映射到关系吗,而且已经有了相应的映射工具了,为什么还要绘制ER图多此一举呢?针对这个问题前文已经回答了。ER图是拿出去和别人谈需求的,要求各方人员都能看得懂。而关系表设计到了过多实现细节,比如:要给多对多联系/多值属性等多建一张表,要设置外码,各种复合主码等。这些东西不应该在谈需求的时候出现,它们应当对非开发人员透明。而且ER图中每个属性只会出现一次,减少了蕴含的信息量,是更好的交流和文档化工具。

        还有,ER模型所蕴含的信息,也没有全部被逻辑模型包含。比如联系的自定义基数约束,比如实体的复合属性,派生属性,用户的自定义约束等等。因此ER模型在整个开发流程(如物理模型建模,甚至前端开发)中是都会用到的,不能认为ER模型转换到逻辑模型后就可以扔一边了。


http://chatgpt.dhexx.cn/article/EWTwHWT4.shtml

相关文章

ER图如何画?如何根据ER图转换成表结构?示例:图书管理系统ER图

一、ER图如何画? 很多同学不会画ER图,我就以图书管理系统为例画一张ER图和ER图如何转成数据库,科普一下。ER图是实体、属性、关系组成的图,主要用于数据库概念设计的时候,通过业务分析画出来的图,最终每一个…

ER图,以及转化成关系模式

软考复习get一个知识点 .找出条件中的实体(矩形),属性(椭圆),关系(菱形)关系分为1:1,1:N,M:N,列出ER图 2. -1:1联系的转换方法 -两个实体分别转化为一个关系模式,属性即是本来的属性 -关系可以与任意一个实体合并,关系的属性,以及另一个实体的主码…

ER图(把ER模型转换为关系模式、关系范式概念)

关于ER模型的转换,我们只需要记住三个转换准则: 1:1、1:N、M:N 二元联系: (1)一对一关系(One to One) 映射规则一:当转换为关系模型时,在两个实体任选一个添加另一个实体的主键即可。 例子&am…

数据库——ER图

参照:https://zhuanlan.zhihu.com/p/29029129 1、ER图分为实体、属性、关系三个核心部分。实体是长方形体现,而属性则是椭圆形,关系为菱形。 1)ER图的实体(entity):即数据模型中的数据对象&…

ER图连接线上加个圆圈什么意思_ER图模板实例,一篇文章教你绘制专业ER图

ER图是什么呢?ER是Entity Relationship的缩写,ER图翻译过来就是实体-联系图的意思。它由美籍华裔计算机科学家陈品山发明,是用来描述现实世界概念结构模型的有效方法,包括实体型、属性、联系这三个基本构成要素,实体型用矩形框表示,实体性的属性用椭圆图框或者圆角矩形表…

ER图的概念及例子

E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法。 用来描述现实世界的概念模型: 用矩形表示实体型,矩形框内写明实体名:比如学生张三、学生李四都是实体; 用椭圆表示实体…

mysql中e r图又叫_E-R图是什么

E-R图,也称实体-关系图,是用来显示了实体集之间关系的。它提供了表示实体类型、属性和联系的方法;用来描述现实世界的概念模型。ER模型是数据库的设计或蓝图,以后可以作为数据库实现。 在E-R图中,实体集是一组相似的实…

ER图与关系模型

5.13 设某商业集团数据库中有3个实体集。一是商店实体集,属性有商店编号、商店名、地址等;二是商品实体集,属性有商品号、商品名、规格、单价等;三是职工实体集,属性有职工编号、姓名、性别、业绩等。 商店与商品间存在…

概念结构设计ER图

文章目录 概念层数据模型——E-R模型实体:属性:联系: E-R图表示两个实体之间的联系一对一联系一对多联系多对多联系多个实体之间的联系 概念设计的特点和策略设计全局E-R模型E-R图之间的冲突优化全局E-R模型逻辑结构设计E-R模型的转换一E-R模…

怎样绘制ER图

E-R图也称实体-联系图(Entity Relationship Diagram),1976年由P.Pchen 提出,提供了表示实体类型、属性和联系的方法。 ER图是我们在上数据库课的时候提到的,简单来说就是辅助数据库设计的概念模型。 1.表示方法 实体型:用矩形框&…

【系统架构】ER图

文章目录 ER图是什么?ER图的组成元素是什么?规范 ER图是什么? E-R图也称实体-联系图(Entity Relationship Diagram),它提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 ER图(实体关系…

什么是ER图?

实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,形成一个独立于机器,独立于DBMS的ER图模型。 通常将它简称为ER图,相应地可把用ER图描绘的数据模型称为ER模型。ER图提供了表示实体(即…

什么是ER图?数据库ER图基础概念整理

前置知识 概述:数据模型的基本概念 模型就是对现实世界特征的模拟和抽象,数据模型是对现实世界数据特征的抽象。对于具体的模型人们并不陌生,如航模飞机、地图和建筑设计沙盘等都是具体的模型。最常用的数据模型分为概念数据模型和基本数据模…

ER图是啥?

文章转载自「开发者圆桌」一个关于开发者入门、进阶、踩坑的微信公众号 E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 用矩形表示实体型,矩形框内写明实体名&…

ER图是什么?

ER图分为实体、属性、关系三个核心部分。实体是长方形体现,而属性则是椭圆形,关系为菱形。 ER图的实体(entity)即数据模型中的数据对象,例如人、学生、音乐都可以作为一个数据对象,用长方体来表示&#xff…

实体关系 (ER) 图的几种不同风格的符号

什么是 ER 图? 实体关系 (ER) 图是一种流程图,用于说明“实体”(如人、对象或概念)如何在系统中相互关联。ER 图最常用于设计或调试软件工程、商业信息系统、教育和研究领域的关系数据库。也称为 ERD 或 E…

【C】C语言int型数组转化为char型字符串数组

文章目录 C语言int型数组转化为char型字符串数组一、代码二、结果三、说明 C语言int型数组转化为char型字符串数组 一、代码 /* 程序功能&#xff1a;int型数组转化为char型字符串数组*/ #include <stdio.h> #include <stdlib.h> #include <math.h> int nu…

C语言:int型数据向char型数据的强制类型转换原理

int型数据向char型数据强制转换原理 C语言中int是四个字节&#xff0c;char是1个字节&#xff0c;占字节多的int型向字节少的char型强制类型转换的原理就是字节截断。 转换时系统会自动删除高位的三个字节&#xff0c;只留下低位的一个字节&#xff0c;这就是int型想char型转换…

数据类型的大小(int型为例)

上图 int型能表示的范围是-2147483648&#xff08;-215&#xff09; – 2147483647(215 -1) int型占系统分配的4个字节&#xff08;不同系统不一样&#xff09;8个位&#xff0c;最高一位为符号位。10000000时表示-215 、01111111时表示215 - 1 unsigned int 为无符号整型范围…

【C】C语言判断字符串是否是int型正整数

文章目录 【C】C语言判断字符串是否是int型正整数前言一、代码二、结果 【C】C语言判断字符串是否是int型正整数 前言 此程序功能主要是实现&#xff1a;判断在CMD下输入的字符串是是否是int型的正整数。 在判断字符是数值时还可以了解一下isdigit()函数&#xff0c;可…