如何画数据库ER图

如何画数据库ER图一、ER图基本概念ER图分为实体、属性、关系三个核心部分。在ER图中,实体是长方形,属性是椭圆形,关系为菱形。1、实体(entity)即数据模型中的数据对象(即数据表),用长方体来表示,每个实体都有自己的实体成员(entitymember)或者说实体对象(entityinstance),例如学生实体里包括张三、李四等。实体还会细分为弱实体和复合实体,一个实体必须依赖于另一个实…

大家好,又见面了,我是你们的朋友全栈君。

一、ER图基本概念

ER图分为实体、属性、关系三个核心部分。在ER图中,实体是长方形,属性是椭圆形,关系为菱形。

1、实体(entity)

数据模型中的数据对象(即数据表),用长方体来表示,每个实体都有自己的实体成员(entity member)或者说实体对象(entity instance),例如学生实体里包括张三、李四等。
实体还会细分为弱实体和复合实体,一个实体必须依赖于另一个实体存在,那么前者是弱实体,后者是强实体,弱实体必须依赖强实体存在,例如上图的学生实体和成绩单实体,成绩单依赖于学生实体而存在,因此学生是强实体,而成绩单是弱实体。
弱实体和强实体的联系必然只有1:N或者1:1,这是由于弱实体完全依赖于强实体,强实体不存在,那么弱实体就不存在,所以弱实体是完全参与联系的,因此弱实体与联系之间的联系也是用的双线菱形。
复合实体也称联合实体或桥接实体,常常用于实现两个或多个实体间的M:N联系,它由每个关联实体的主码组成,用长方体内加一个菱形来表示。

2、属性(attribute)

即实体所具有的属性,例如学生具有姓名、学号、年级等属性,用椭圆形表示,属性分为唯一属性( unique attribute)和非唯一属性,唯一属性指的是唯一可用来标识该实体实例或者成员的属性,用下划线表示,一般来讲实体都至少有一个唯一属性。
ER图的属性还细分为复合属性、多值属性和派生属性、可选属性,同时还有用来表示联系的属性,称为联系属性。

    复合属性是指具有多个属性的组合,例如名字属性,它可以包含姓氏属性和名字属性。复合属性也有唯一属性,例如学生的所在班级属性,由于多个年级都有班级,所以单单班级属性是不唯一的,但是和年级组成的复合属性后则可以匹配成唯一属性。
    多值属性:一个实体的某个属性可以有多个不同的取值,称为多值属性。例如一本书的分类属性,这本书有多个分类。
    派生属性:是非永久性存于数据库的属性。派生属性的值可以从别的属性值或其他数据(如当前日期)派生出来,用虚线椭圆表示。
    可选属性:并不是所有的属性都必须有值,有些属性的可以没有值,这就是可选属性,在椭圆的文字后用(O)来表示。
    联系属性:联系属于用户表示多个实体之间联系所具有的属性,一般来讲M:N的两个实体的联系具有联系属性,在1:1和1:M的实体联系中联系属性并不必要。

3、关系(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实体补充讲解

1、ER的实体分为弱实体 和 复合实体:
(1)弱实体:一个实体必须依赖另一个实体存在,那么前者是弱实体,后者是强实体。
弱实体和强实体的联系必然只有1:N或者1:1,这是由于弱实体完全依赖于强实体,强实体不存在,那么弱实体就不存在,所以弱实体是完全参与联系的,因此弱实体与联系之间的联系也是用的双线菱形。

 

如何画数据库ER图

图一-栗子.png

2,ER图的属性分为复合属性、多值属性和派生属性、可选属性,同时还有用来表示联系的属性,称为联系属性;
(1)复合属性(composite attribute):
复合属性是指具有多个属性的组合,例如名字属性,它可以包含姓氏属性和名字属性,如下图:

 

如何画数据库ER图

图三.png

 

(2)多值属性(multivalued attribute):
一个实体的某个属性可以有多个不同的取值,例如一本书的分类属性,这本书有多个分类,例如科学、医学等,这个分类就是多值属性, 用双线椭圆表示。

如何画数据库ER图

图四.png

(3)派生属性(derivers attribute):
是非永久性存于数据库的属性。派生属性的值可以从别的属性值或其他数据(如当前日期)派生出来,用虚线椭圆表示,如下图。

 

如何画数据库ER图

图五.png

(4)可选属性(optional attribute):
并不是所有的属性都必须有值,有些属性的可以没有值,这就是可选属性,在椭圆的文字后用(O)来表示,如下图的地址就是一个可选属性。

 

如何画数据库ER图

图六.png

(5)联系属性:
联系属于用户表示多个实体之间联系所具有的属性,一般来讲M:N的两个实体的联系具有联系属性,在1:1和1:M的实体联系中联系属性并不必要。

 

如何画数据库ER图

图七.png

 

三、ER图实例

假设教学管理规定:
一个学生可选修多门课,一门课有若干学生选修;
一个教师可讲授多门课,一门课只有一个教师讲授;
一个学生选修一门课,仅有一个成绩。
学生的属性有学号、学生姓名;教师的属性有教师编号,教师姓名;课程的属性有课程号、课程名。

要求:根据上述语义画出ER 图,要求在图中画出实体的属性并注明联系的类型。
如何画数据库ER图
————————————————
版权声明:本文为CSDN博主「一骑走烟尘」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zgcr654321/article/details/93394105

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152008.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android多线程:HandlerThread详细使用手册(含实例讲解)

    Android多线程:HandlerThread详细使用手册(含实例讲解)前言多线程的应用在Android开发中是非常常见的,常用方法主要有:继承Thread类实现Runnable接口HandlerAsyncTaskHandlerThread今天,我将全面解析多线程其中一种常见用法:HandlerThread由于本文涉及多线程知识和Handler源码解析,所以阅读本文前建议先看:Android开发:Handler异步通信机制全面解…

    2022年7月27日
    6
  • Python语法详解

    Python语法详解python语法解析Python的结构有三种:顺序结构、分支结构、循环结构。一、顺序结构具体结构如下:顺序结构比较简单,就是按照代码的顺序从上到下执行,这是Python最基本的程序执行结构,也

    2022年7月5日
    33
  • C语言学习——字符串与整数、浮点数、无符号整数之间的转换常用函数

    C语言学习——字符串与整数、浮点数、无符号整数之间的转换常用函数atof(将字符串转换成浮点型数)表头文件 #include <stdlib.h>定义函数 double atof(const char nptr);函数说明atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(’’)才结 束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,…

    2022年8月18日
    9
  • Pytorch_hook机制的理解及利用register_forward_hook(hook)中间层输出[通俗易懂]

    Pytorch_hook机制的理解及利用register_forward_hook(hook)中间层输出[通俗易懂]参考文献:【1】梯度计算问题含公式:参考链接1.【2】pytorch改动和.data和.detch()问题:https://blog.csdn.net/dss_dssssd/article/details/83818181【3】hook技术介绍:https://www.cnblogs.com/hellcat/p/8512090.html【4】hook应用->中间层的输出:https://blog.csdn.net/qq_40303258/article/details/10688431

    2025年7月18日
    5
  • 字典序排序_排列字典序问题算法

    字典序排序_排列字典序问题算法前言字典序排序是基于字母顺序排列的单词按字母顺序排列的方法JavaList<String>list=newArrayList<>();list.add(“a”);list.add(“d”);list.add(“c”);list.add(“b”);Collections.sort(list);System.out.println(list);JSletdic=newArray(“a”,”c”,”d”,”b”);console.log(

    2025年7月15日
    5
  • poj3984迷宫问题_迷宫代码

    poj3984迷宫问题_迷宫代码POJ 3984 迷宫问题

    2022年4月21日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号