zoukankan      html  css  js  c++  java
  • ER图学习

    参考:

    https://blog.csdn.net/qq_35952082/article/details/60136737

    https://blog.csdn.net/ZGX4312651/article/details/86640605

    https://blog.csdn.net/star_of_science/article/details/83063165

    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 图,要求在图中画出实体的属性并注明联系的类型;

  • 相关阅读:
    Orleans is a framework
    修改emlog后台登录路径的方法(转)
    form表单中的 action=./?> 是什么意思
    10 个迅速提升你 Git 水平的提示(转)
    为什么国外程序员爱用苹果Mac电脑?(转)
    Socket 专题
    Android 时间戳简单转化
    Android 常用时间格式转换代码
    Android AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
    Android AlarmManager类的应用(实现闹钟功能)
  • 原文地址:https://www.cnblogs.com/xuwc/p/13200592.html
Copyright © 2011-2022 走看看