ER(实体关系)建模入门指引
编辑导语:产品经理在日常工作中需要掌握一些重要技能,比如本文说到的ER建模,在产品经理业务方面提供实体——关系模型的过程;本文作者详细分享了关于ER建模,我们一起来学习一下。
ER建模(Entity Relationship Modeling)是产品经理,特别是B端产品经理需要掌握的重要技能,本文将从以下几个方面详细介绍ER建模的基础知识。
- 什么是ER建模?
- ER建模对产品经理有什么意义?
- ER图的基本元素包括哪些?
- 从产品的角度,如何绘制ER图?
一、什么是ER建模?
ER建模(Entity Relationship Modeling),即实体关系建模,是指提炼业务,归纳并设计对应的实体——关系模型的过程。
ER建模最终输出的结果为实体关系图(ERD-Entity Relationship Diagram)。
对产品经理而言,ERD体现了实体、属性以及实体间的联系,抽象出了业务的核心特征;对开发人员来说,实体关系图显示数据库中的实体(表)以及该数据库中的表之间的关系,奠定了整个系统的框架基础。
二、ER建模对产品经理有什么意义?
- 提升抽象、归纳能力:ER建模从系统的实体出发,要得到一个有意义的实体关系模型,要求我们对业务进行深入分析,从业务流程、业务表象中归纳并抽象出核心的实体。
- 图形化沟通,提升效率:ER图可以帮助产品经理向开发人员传达系统主要核心实体及其关系,让开发人员准确理解需求,并就合理性、扩展性等问题进行深入沟通。
- 合理建模,少走弯路:ER建模的好坏,决定了软件产品的扩展性和灵活性;ER建模不准确,有可能导致软件设计缺陷,甚至带来严重的业务问题。
三、ER图的基本元素包括哪些?
ER图有三个基本元素,分别是:实体、属性、关系。
1. 实体
1)实体的定义以及符号
实际问题中客观存在的并且可以相互区别的事物或者概念称为实体,可以具体到人、对象、概念、事件。
下面举几个例子说明:人(例如学生)、对象(例如发票)、概念(例如简介)、事件(例如考试)。
每个实体本身包含多个实体成员,例如学生是一个实体,具体可能有小明、小王等实体成员。
在ER图中,实体通常使用矩形表示,如下所示:
2)进阶概念:弱实体与强实体
在众多的实体中,有些实体对另一些实体有很强的依赖关系,即一个实体的存在必须以另一实体的存在为前提,前者就称为“弱实体”。
比如学生家长就是一种弱实体,因为只有学生实体存在,家长实体才会存在。
一般情况下,产品经理只需要能够区分哪些是弱实体就可以了,不一定要在ER图中表现出来。要注意的是,强实体与弱实体的联系只能是1:1或1:N。
在ER图中,弱实体通常使用双线矩形表示,如下所示:
3)怎么找到实体?
实体最终源于具体的业务,要想找具有业务意义的实体,我们需要回归业务本身,下面提供两种思路,仅供参考:
方式一:思考我们的产品为哪些用户解决了什么问题。
特别是B端产品的设计,往往会涉及比较多的用户角色,可以抽象出一部分实体。
比如,我需要为某设计一个图书馆管理系统,经调研,相关的用户角色以及诉求如下:
通过以上分析,我们至少可以得出以下实体:借阅者、借阅者账号、图书管理员、图书管理员账号、书籍。
方式二:结合业务流程图去找实体。
这是一种主要的寻找实体的方式,业务流程图往往说明了主要实体之间的交互过程,可以帮助我们快速找到相关的实体。如下图为电商用户的下单流程:
4)实体有那么多,需要全部都列完吗?
产品经理的实体建模环节,更关注核心实体;一个稍微复杂点的产品,是会涉及到很多个实体的,但就前期的需求分析与业务抽象环节而言,我们仅需要关注几个核心的实体就可以了(往往跟核心业务流程相关),确定了核心实体以及关系,就确定了业务的整体方向。
2. 属性
属性是实体所具有的某一个特性,比如电商平台的用户可能有“用户ID”、“昵称”、“性别”等属性。
每个实体至少要有一个唯一属性(也称为主键-Primary Key),用于区分不同的实体成员。
例如就算两个用户的昵称相同,也可以通过用户id来区分。
下图是一个电商平台用户可能存在的部分属性,关于属性的定义、个数需要视具体的业务诉求而定,我们可以在具体的设计环节一步步完善,不一定要在实体关系建模中就要求全部罗列出来。
3. 关系
两个实体之间的关系表示这两个实体以某种方式相互关联。
例如在电商平台中,当用户下单时,一个订单可以包括多种商品,因此“订单”与“商品”之间是有关系的。而这关系则在 ER 图中以连接线表达着。
4. 基数
1)基数的定义以及类型
基数是定义关系所关联的两个实体的实例之间互相可以关联的个数。
常见的基数关系有:一对一、一对多、多对多。
一对一的关系
一对多的关系
多对多的关系
理解基数联系的方法是从两个方向进行解读,但不管从哪个方向开始读起,都必须是1开头,例如“1个学生可对应多门课程,1门课程可对应多个学生”。
2)进阶概念
关于基数,上述内容已经可以满足我们产品经理的日常使用,但如果你还想更加严谨界定基数的边界值,我们还可以使用区间来表达基数。
比如一个订单至少要包括1个商品,也可以包括多个商品。但是一个商品,可以不属于任何订单(比如没有交易的情况),也可以属于多个订单。
“1..*”表示1到多个,是一种强制性对应关系。
“0..*”表示0到多个,即0个或者1到多个,是一种可选对应关系。
上图表示1个实体A对应0到3个实体B,“0..3”表示0到3个,“x..y”表示(x到y个,且x小于y)。
四、从产品的角度,如何绘制ER图?
ER图最早是由美籍华裔计算机科学家陈品山(Peter Chen)发明,他创建了陈氏ER符号体系。
随着实体关系建模的发展,也出现了其他符号体系,下图是ER图的几种不同画法。其中比较常见有陈氏符号(Chen)、鸭掌模型(Crow’s Foot)、UML中的类图画法。
图来自决胜B端知识星球
个人感觉陈氏符号与UML画法更容易让常人理解,所以本文简单介绍这两种画法;至于鸭掌模型(Crow’s Foot),大家有兴趣可以自行了解。
陈氏符号
实体:实体用矩形表示。
属性:属性用椭圆表示,椭圆内注明属性内容,若是该属性为键值属性,可以在属性下方用横线表示。
联系:实体之间通过菱形与直线相连,菱形内注明实体之间的联系情况。
基数:菱形两侧注明基数关系。
UML画法
我们可以用UML类图的画法来构建实体关系模型,有些朋友可能会对类图和ER图的关系有疑问。ER图是表示实体关系模型的图形,ER图的画法有很多种,而UML类图的符号标准则是其中一种。
实体:实体用矩形表示。
属性:产品经理使用UML画法去绘制ER图的时候,其实可以先不标出属性,因为我们在实体关系建模阶段更关注的是有哪些实体,这些实体之间的关系是什么?至于属性,我们可以在具体的产品设计中去完善。
联系:实体之间通过直线相连,直线两端标明基数限制关系。关于基数的具体表达方式,我在上面已经做了介绍,就不赘述了。
延续上面举过的电商平台买家下单简易流程的例子,分别画出简易版的实体关系图以及进阶版(对基数关系做了更加充分的说明)。
实体关系基础版,可以帮助我们快速进行实体关系建模。
实体关系进阶版,更加严谨的说明了基数的限制关系。
五、写在最后
笔者认为ER建模最产品经理最大的意义还是在于帮助我们抽象、归纳业务本质,可以在一定程度上提升产品设计的效率与科学性。
本文只是从产品经理的角度出发,简单分享了实体关系建模的基础知识,实际上ER建模是一门很复杂的学问,需要长期的沉淀与实践。
作者:小狼人,微信公众号:人称产品汪。不定期更新本人在对接第三方支付平台与银行存管系统中的经验心得、支付知识、产品心得等。
本文由 @ 小狼人 原创发布于人人都是产品经理,未经作者许可,禁止转载。
题图来自Unsplash,基于CC0协议。
“理解基数联系的方法是从两个方向进行解读,但不管从哪个方向开始读起,都必须是1开头,例如“1个学生可对应多门课程,1门课程可对应多个学生”。”————想问下,如果这么理解的话,岂不是所偶的关系都是1:1或者1:N,那多对多的关系从何而来????
一个消费者可以购买多辆车,一辆车只能卖给一个消费者
谢谢
ER图这个产品经理必须要画吗?还是研发技术处理画吗?
简单的实体关系图,就我文章提到的那个颗粒度,如果涉及到复杂后台产品设计的时候,是必须要产品经理来画的
好的,了解了,谢谢
必然是同一个吧。我被自己打败了。为啥会问这个
基数比对时,一个是同一个吗?谢谢?