
大家好,我是渣哥,是一个每天都在攒钱植发的程序猿。
今天我们来聊聊数据库设计最基础的部分:E-R图设计。
为什么突然要聊这个东西呢?

因为啊,渣哥发现很多同学自己写项目的时候,最开始都是跟着老师一步一步来的,从数据库搭建到功能实现,基本上都是老师在上面敲一行代码,同学在下面写一行。
数据库为什么这么设计?不知道。
这段代码为什么这么写?不知道。

知道的只是这么写代码能跑起来,功能可以实现,但是到了自己独立开发一个项目的时候,一开始就难住了,数据库咋设计呀?

这就是今天渣哥写这篇文章的原因,搞清楚数据库设计的第一个步骤:画一个分析出所有业务对象及其所属关系的E-R图!
本文目标:
●了解E-R图(实体-关系映射图)是什么,有什么作用
● 认识E-R图的各种元素在图中的表示方式
● 分辨E-R图三种约束的区别与表示方式的不同
● 掌握E-R图的绘制流程,学会绘制E-R图
全文共2816字,阅读预计需要10分钟;
E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界或业务系统的概念模型。
●分析业务中所包含的实体对象及其属性
●找出对象之间的关系
●设计数据结构概念模型
●帮助我们更方便、合理的设计数据库结构
以上两点,讲人话就是:E-R图老牛X了,它用来描述系统中所涉及的实体类、实体类的属性、以及实体之间的联系方式,学会了E-R图,我们可以分析业务系统中的数据结构,并以此设计更合理的数据库结构!
E-R图这么厉害的嘛?我要学我要学!
别急,接下来,咱们就来通过一个例子了解一下E-R图的结构。
现在有这么一个业务场景:
●某一个学校下辖若干个学院,
●每一个学院管理着若干个专业,
●每一个专业有若干个教师,有若干个不同年级的学生;
再给出根据该业务场景下分析得出的E-R图:


这是个啥啊?我就看到了长方形,原型和棱形,还有一堆的线啊!这就是E-R图嘛?
没错,这就是传说中的E-R图,它就是由你看到的长方形、椭圆形、棱形和线,通过一定规则组成的图。那这些图形分别都代表什么意思呢?我们接着往下看!
实体对象:一般认为,客观上可以相互区分的事物就是实体,如:学院、专业;在E-R图中用矩形表示,矩形框内写明实体名;
比如上图中的学校、学生、老师等,这些都是涉及到的业务对象,就用长方形表示啦。
属性:实体所具有的某一特性;如学生具有姓名、性别等属性;在E-R图中用椭圆形表示,并用无向边将其与相应的实体连接起来;
比如上图中的学校肯定有一个学校名称的,那这个名称就是学校的一个属性,所以名称这个属性用椭圆形表示,并用线链接到学校,代表这个是学校的一个属性。
关系:联系也称关系,信息世界中反映实体内部或实体之间的关联,如一个专业有多个学生;在E-R图中用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n);
比如上图中的老师跟学生的关系,一个老师会有多个学生,一个学生也会有好几个老师,所以学生跟老师之间的关系是一个多对多的关系 ,就要用棱形将学生和老师链接起来,并且在两侧分别写上M和N,代表是一种多对多的关系。
其实实体对象和对象的属性都比较容易分析得出,比较难一点的是实体对象之间的关系,也称为“约束”,约束的类型分为三种,接下来我们就来看一下吧。
一对一约束(联系)对于两个实体集A和B,若A中的每一个值在B中至多有一个实体值与之对应,反之亦然,则称实体集A和B具有一对一的联系。如:一个学生有一个名字(一般情况)
一对多约束(联系)对于两个实体集A和B,若A中的每一个值在B中有多个实体值与之对应,反之B中每一个实体值在A中至多有一个实体值与之对应,则称实体集A和B具有一对多的联系。如:一个学校有很多老师,一个老师隶属于一个学校(一般情况)
多对多约束(联系)对于两个实体集A和B,若A中每一个实体值在B中有多个实体值与之对应,反之亦然,则称实体集A与实体集B具有多对多联系如:一个老师有很多学生,一个学生也有很多老师
好的,我们现在了解了E-R图的基本要素,和三种约束,那么如何去绘制一个E-R图呢?让我们来了解一下E-R的设计流程吧!
绘制E-R图的工具有很多,这边比较推荐的是processon,官网地址是:https://www.processon.com/ ,可以在线绘制,特别方便;
登录之后,新建一个文件,在右下角可以选择更多图形,然后勾选E-R图,就可以使用图标了;

(1)确定所有的实体集合;
(2)选择实体集应包含的属性;
(3)确定实体集之间的联系;
(4)确定实体集的关键字,用下划线在属性上表明关键字的属性组合;
(5)确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明是1或n(多)来表示联系的类型。
好啦,今天的分享就到这里啦!E-R图设计是数据库设计的第一步,有了一个清晰的E-R图,数据库设计就会事半功倍,并且后期维护也方便很多,相信聪明的你看完了这篇文章已经学会了E-R的设计,那接下来有个小任务,回到我们最开始的例子,不看已经画好了E-R图,请你把它的E-R图重新绘制一遍,可以吗?
我是渣哥,我们下期再见!

对了,渣哥原创文章到这已经是第八篇了,现在要做一个违背XX的决定,自掏腰包(从植发资金中)抽取两位粉丝每人送优酷会员月卡一份!点击在看+转发朋友圈并截图回复到公众号后台即可参与抽奖,下周五开奖,开奖信息会同步到当天的推文中。!!!(请留下微信号,方便渣哥发奖哦!)
奖品价值不高,是渣哥的一点小心意,还请各位大佬多多支持!感谢!







