ER图学习(一)
E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
用矩形表示实体型,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。
实体联系模型,是概念数据模型的高层描述所使用的数据模型或模式图,它为表述这种实体联系模式图形式的数据模型提供了图形符号。
下面是一个最常见的ER图,基本上只要讲解ER图就会碰到它。
通俗的讲,ER图是把现实生活中的各种关系,以图片的形式,抽象出来,形成一个思维导图,通过ER图可以了解现实中的各种关系,比如一个班有很多学生组成。
ER图的应用,最最难的地方我觉得是抽象思维能力,你需要把现实生活中各种关系映射到大脑里面,然后以ER图的形式输出可分析和可视化的东西。
通过实例来拆解ER图
一、学校里的那点事儿
现实生活
一个班级有N多的学生组成,每个班级有一个班级号,每一名学生有一个学号;学生可以根据自己的兴趣爱好选修课程,对于选修的课程需要考试,然后出成绩有学分;一名老师可以教授几门课程。
ER图
通过现实的描述分解出几个实体,分别为班级、学生、课程、教师。出现了几组关系,分别为一个班级由多名学生组成(1对多)、一名学生可以选多门课程,同时一门课程可能被多名学生选修(多对多)、一名教师可传授多门课程,同时一门课程可能被多名教师传授(多对多)。这个场景里面没有一对一的关系。
关系数据库
ER图画出来以后,如何映射到关系数据库中的表呢?这一步就非常简单了,分步骤进行创建:把实体映射为表、把关系映射为表。实体映射为表,比较简单,不再赘述。
关系映射为表,相对来说比较复杂,以这里的ER图为例,存在1对多和多对多两类关系。
1对多或者多对1时,在多方添加一个外键,对应到1方,如学生表里的所在班级这个外键。多对多时,需要新增一个关系表,把两个实体间的关系记录下来,比如下面的学生选课关系表、教师任课关系表。根据ER图创建表如下:
班级表(主键:班级号 )
班级号 班级名 专业 人数
C001 动漫一班 动漫设计 60
C002 动漫二班 动漫设计 80
C003 计算一班 计算机应用 70
学生表(主键:学号,外键:所在班级 )
学号 姓名 性别 年龄 所在班级
S001 小明 男 20 C001
S002 小王 女 19 C002
S003 小朱 男 21 C003
课程表(主键:课程号)
课程号 课程名 课时 学分
K001 PS 20 5
K002 玛雅 25 6
K003 数据库 30 10
教师表(主键:编号)
编号 职称 姓名 性别 年龄
T001 助教 李老师 男 30
T002 讲师 朱老师 女 33
T003 教授 王老师 男 43
学生选课关系表
编号 学号 课程号 成绩
SK001 S001 K001 80
SK002 S001 K002 76
SK003 S002 K001 89
SK004 S003 K002 90
教师任课关系表
编号 教师号 课程号 时间
TK001 T001 K001 16:00
TK002 T001 K002 14:00
TK003 T002 K001 10:00
TK004 T003 K002 15:00
二、说说电商
现实生活
我打开淘宝,登录我的账户,查看了一下昨天下的单快递到哪里了,然后又逛了逛,把几个中意的小家电放到购物车里面,这次钱不够了,下次再买,嘿嘿。
ER图
通过上面简短的描述分解出几个实体,分别为用户、订单、购物车、商品、供应商。出现了几组关系,分别为一个用户会有多个订单(1对多)、一名用户只有一个购物车(1对1),一个购物车选购多种商品,同时一个商品可能存在多个用户的购物车中(多对多)、一个供应商可以供应多种商品,一个商品只能属于一个供应商(多对1)。
关系数据库
同理,根据ER图映射到数据库表,实体首先映射,然后再映射关系,1对1、1对多以及多对1以主外键的形式进行关系映射,多对多以新增一个关系表来进行关系映射。根据ER图创建表如下:
用户表(主键:用户ID)
用户ID 用户名 密码 昵称 身份证
U001 USER01 *** 小马哥 3729***
U002 USER02 *** 购物狂 1010***
U003 USER03 *** 买买买 3302***
订单表(主键:订单ID,外键:用户ID)
订单ID 用户ID 金额 状态
D001 U001 500¥ 完成
D002 U001 600¥ 派送中
D003 U003 700¥ 待评价
购物车表(主键:购物车ID)
购物车ID 用户ID 总价 优惠价
C001 U001 50¥ 45¥
C002 U002 150¥ 120¥
C003 U003 50¥ 40¥
供应商表(主键:注册号)
注册号 名称 联系人
G001 xx电器公司 高先生
G002 yy洗化公司 李先生
G003 zz服装公司 王先生
商品表(主键:编码,外键:供应商注册号)
编码 名称 分类 重量 单价 供应商注册号
P001 热水壶 家电 1kg 50¥ G001
P002 洗衣粉 洗化 3kg 20¥G001
P003 毛衣 服装 400g 150¥G002
选购关系表
编号 购物车ID 商品编码
X001 C001 P001
X002 C001 P002
X003 C002 P001
X004 C003 P002
三、你真的理解1对1、1对多和多对多吗?
要想彻底理解这三类关系,不能只读理论定义,而是从SQL查询结果出发,来从实践层面加深理解。
1对1,在任意一张表中添加外键
1对1的意思是指第一张表中的某条记录,根据主外键关联,只能查询到另一张表中的0条或者1条记录,同时表中的所有其他记录都满足这个特性,反之亦然。
1对1时,需要添加一个外键,外键添加到任何一张表中都可以。
1对多,1方属于主表,多方属于从表,在从表添加外键
1对多的意思是指第一张表中的某条记录,根据主外键关联,能查询到另一张表中的0条、1条或者N条记录,同时表中的所有其他记录都满足这个特性,反之是多对1。
1对多时,以1方为主表,多方为从表,在多方添加一个外键。
多对多,新增一张关系表
多对多的意思是指第一张表中的某条记录,根据主外键关联,能查询到另一张表中的0条、1条或者N条记录,同时表中的所有其他记录都满足这个特性,反之亦然。
多对多时,要新增一张关系表,以记录多对多的数据关系,举个栗子:
课程表(主键:课程号)
课程号 课程名 课时 学分
K001 PS男 20 5
K002 玛雅 25 6
K003 数据库 30 10
教师表(主键:编号)
编号 职称 姓名 性别 年龄
T001 助教 李老师 男 30
T002 讲师 朱老师 女 33
T003 教授 王老师 男 43
教师任课表(多对多关系衍生出来的表)
编号 教师号 课程号 时间
TK001 T001 K001 16:00
TK002 T001 K002 14:00
TK003 T002 K001 10:00
TK004 T003 K002 15:00
ER图学习(二)
我们通常用实体、联系和属性这三个概念来理解现实问题,因此ER模型比较接近人的思维方式。此外,ER模型用简单的图形符号表达系统分析员对问题的理解,不熟悉计算机技术的用户也能理解它,因此,ER模型可以作为用户与分析员之间有效的交流工具。
一、ER模型
ER模型中包含3种相互关联的信息:数据对象、数据对象的属性及数据对象彼此之间相互连接的关系。
1.数据对象
数据对象是对软件必须理解的复合信息的抽象。所谓复合信息是指具有一系列不同性质或属性的事物,仅有单个值的事物(例如,宽度)不是数据对象。数据对象可以是外部实体(例如,产生或使用信息的任何事物)、事物(例如,报表)、行为(例如,打电话)、事件(例如,响警报)、角色(例如,教师、学生)、单位(例如,会计科)、地点(例如,仓库)或结构(例如文件)等。总之,可以由一组属性来定义的实体都可以被认为是数据对象。
数据对象彼此间是有关联的,例如,教师“教”课程,学生“学”课程。教或学的关系表示教师和课程或课程之间的一种特定的连接。
数据对象只封装了数据而没有对施加于数据上的操作的引用,这是数据对象与面向对象范型中的“类”或“对象”的显著区别。
2.属性
属性定义了数据对象的性质。必须把一个或多个属性定义为“标识符”,也就是说,当人们希望找到数据对象的一个实例时,用标识属性作为“关键字”(通常简称为“键”)。
应该根据对所要解决的问题的理解,来确定特定数据对象的一组合适的属性。例如,为了开发机动车管理系统,描述汽车的属性应该是生产厂、品牌、型号、发动机号码、车体类型、颜色、车主姓名、住址、驾驶证号码、生产日期及购买日期等。但是,为了开发设计汽车的CAD系统,用上述这些属性描述汽车就不合适了,其中车主姓名、住址、驾驶证号码、生产日期和购买日期等属性应该删去,而描述汽车技术指标的大量属性应该添加进来。
3.联系
客观世界中的事物彼此间往往是有联系的。例如,教师与课程渐存在“教”这种联系,而学生与课程间则存在“学”这种联系。
数据对象彼此之间相互连接的方式称为联系,也称为关系。联系可分为以下3种类型。
•一对一联系(1:1)
例如,一个部门有一个经理,而每个经理只在一个部门任职,则部门与经理的联系是一对一的。
•一对多联系(1:N)
例如,某校教师与课程之间存在一对多的联系“教”,即每位教师可以教多门课程,但是每门课程只能由一位教师来教。
•多对多联系(M:N)
例如,学生与课程间的联系(“学”)是多对多的,即一个学生可以学多门课程,而每门课程可以有多个学生来学。
联系也可能有属性。例如,学生“学”某门课程所取得的成绩,既不是学生的属性也不是课程的属性。由于“成绩”既依赖于某名特定的学生又依赖于某门特定的课程,所以它是学生与课程之间的联系“学”的属性。
二、如何画ER图
1.要素表示
2.画图步骤
首先确定这个模块有哪几个核心的对象以及具体有哪些特征,
其次思考这些对象之间的关系,如何相互转变。
最后把他们用ER图的方法表述出来。
当然需要尽量精简实体以及优化属性
3.画图工具
processon在线画图、Mircosoft Office VISO2013、亿图图示等
4.示例
假设每个学生选修若干门课程,且每个学生每选一门课只有一个成绩,每个教师只担任一门课的教学,一门课由若干教师任教。“学生”有属性:学号、姓名、地址、年龄、性别。“教师”有属性:职工号、教师姓名、职称,“课程”有属性:课程号、课程名。
ER图学习(三)
实体是长方形,属性是椭圆形,关系为菱形。
实体(entity):
即数据模型中的数据对象(即数据表),用长方体来表示,每个实体都有自己的实体成员(entity member)或者说实体对象(entity instance),例如学生实体里包括张三、李四等。
属性(attribute):
即实体所具有的属性,例如学生具有姓名、学号、年级等属性,用椭圆形表示,属性分为唯一属性( unique attribute)和非唯一属性,唯一属性指的是唯一可用来标识该实体实例或者成员的属性,用下划线表示,一般来讲实体都至少有一个唯一属性。
关系(relationship):
用来表现数据对象与数据对象之间的联系,例如学生的实体和成绩表的实体之间有一定的联系,每个学生都有自己的成绩表,这就是一种关系,关系用菱形来表示。
关联关系有三种:
1对1(1:1):
指对于实体集A与实体集B,A中的每一个实体至多与B中一个实体有关系;反之,在实体集B中的每个实体至多与实体集A中一个实体有关系。
1对多(1:N):
1对多关系是指实体集A与实体集B中至少有N(N>0)个实体有关系;并且实体集B中每一个实体至多与实体集A中一个实体有关系。
多对多(M:N):
多对多关系是指实体集A中的每一个实体与实体集B中至少有M(M>0)个实体有关系,并且实体集B中的每一个实体与实体集A中的至少N(N>0)个实体有关系。
举例说明:
ER实体补充讲解:
ER的实体还会细分为弱实体和复合实体:
弱实体:一个实体必须依赖于另一个实体存在,那么前者是弱实体,后者是强实体,弱实体必须依赖强实体存在,例如上图的学生实体和成绩单实体,成绩单依赖于学生实体而存在,因此学生是强实体,而成绩单是弱实体。
弱实体和强实体的联系必然只有1:N或者1:1,这是由于弱实体完全依赖于强实体,强实体不存在,那么弱实体就不存在,所以弱实体是完全参与联系的,因此弱实体与联系之间的联系也是用的双线菱形。
上面实例根据弱实体的情况更改如下图:
复合实体:复合实体也称联合实体或桥接实体,常常用于实现两个或多个实体间的M:N联系,它由每个关联实体的主玛组成,用长方体内加一个菱形来表示。
ER属性补充讲解:
ER图的属性还细分为复合属性、多值属性和派生属性、可选属性,同时还有用来表示联系的属性,称为联系属性;
复合属性(composite attribute):
复合属性是指具有多个属性的组合,例如名字属性,它可以包含姓氏属性和名字属性,如下图:
复合属性也有唯一属性,例如学生的所在班级属性,由于多个年级都有班级,所以单单班级属性是不唯一的,但是和年级组成的复合属性后则可以匹配成唯一属性。
多值属性(multivalued attribute):
一个实体的某个属性可以有多个不同的取值,例如一本书的分类属性,这本书有多个分类,例如科学、医学等,这个分类就是多值属性, 用双线椭圆表示。
派生属性(derivers attribute):
是非永久性存于数据库的属性。派生属性的值可以从别的属性值或其他数据(如当前日期)派生出来,用虚线椭圆表示,如下图。
下面的小组人数就是典型的派生属性,随着学生实例的参加的兴趣小组变化,小组人数属性也会变化,一般来讲派生属性不存在于数据库中,而是通过相应的公式进行计算得到,如果要放到数据库中,那么隔一段时间就要进行更新,否则会出现数据错误。
可选属性(optional attribute):
并不是所有的属性都必须有值,有些属性的可以没有值,这就是可选属性,在椭圆的文字后用(O)来表示,如下图的地址就是一个可选属性。
联系属性:
联系属于用户表示多个实体之间联系所具有的属性,一般来讲M:N的两个实体的联系具有联系属性,在1:1和1:M的实体联系中联系属性并不必要。
实例题目:
假设教学管理规定:
一个学生可选修多门课,一门课有若干学生选修;
一个教师可讲授多门课,一门课只有一个教师讲授;
一个学生选修一门课,仅有一个成绩。
学生的属性有学号、学生姓名;教师的属性有教师编号,教师姓名;课程的属性有课程号、课程名。
要求:根据上述语义画出ER 图,要求在图中画出实体的属性并注明联系的类型;