接下来几篇文章会围绕「业务建模」这个方向,展开总结一下。讲到业务建模就联想到ER模型,ER建模可以说是B端产品经理必要掌握的技能。
本文会从以下几个点进行基础指引:
· 什么是ER模型?
· ER模型有什么作用?
· ER图的核心部分是什么?
· 产品经理如何进行ER建模绘制ER图?
➊什么是ER模型?
ER模型,全称为实体联系模型、实体关系模型(全称:Entity-Relationship Model)由美籍华人计算机科学家陈品山发明,是概念数据模型的高层描述所使用的数据模型或模式图。
ER模型常用于信息系统设计中;比如它们在概念结构设计阶段用来描述信息需求和/或要存储在数据库中的信息的类型。但是数据建模技术可以用来描述特定论域(就是感兴趣的区域)的任何本体(就是对使用的术语和它们的联系的概述和分类)。
在基于数据库的信息系统设计的情况下,在后面的阶段(通常叫做逻辑设计),概念模型要映射到逻辑模型如关系模型上;它依次要在物理设计期间映射到物理模型上。注意,有时这两个阶段被一起称为“物理设计”。
在以前的文章中有简单的提过「概念模型」,其实就是ER建模的输出产物——实体联系模式图(ERD,全称:Entity Relationship Diagram)。
产品经理接收到一个新的业务需求后,可以通过ERD进行梳理实体之间、实体与属性之间的关系,从中将整个业务抽象出共性与核心特征;当ERD给到我们的开发人员后,这些实体之间、实体属性之间的关系就演变成数据库的表与字段。有了ERD后对于整个系统的架构与后续扩展都有很大的好处,可以很好的理解与梳理业务。
➋ER模型有什么作用?
当我们理解了实际问题的需求之后,需要用一种方法来表示这种需求,ERD就是用来描述这种需求。
在梳理ERD的过程中,其实我们就是梳理业务,它在这个数据过程中起到的作用:
提升总结归纳的抽象能力:我们接收需求的时候,会有很多噪声需求,产品经理就需要从中提炼有意义的实体概念,实体属性,从而达到整个业务模式能在系统上运作起来。
提高沟通效率:当我们输出ERD后,与业务、开发、测试人员沟通时,能很好的表达出我们系统上的实体关系,这就是所谓的一图胜千言。
提高建模合理性,避免掉坑:在ER建模过程中,提高建模的合理性能让系统运作更良好,避免后续业务变化导致系统又需推到重来的结果,影响业务发展。
➌ER图的核心部分是什么?
ER图分为实体、属性、关系三个核心部分:
· 实体是长方形体现
· 属性是椭圆形体现
· 关系是菱形体现
ⓐ 实体(Entity)
即数据模型中的数据对象,例如门店、员工、物品都可以作为一个数据对象,用长方体来表示,每个实体都有自己的实体成员(entity member)或者说实体对象(entity instance),例如员工实体里包括张三、李四等,实体成员(entity member)/ 实体实例(entity instance) 不需要出现在ER图中。
◆ 弱实体:一个实体必须依赖于另一个实体存在,那么前者是弱实体,后者是强实体,弱实体必须依赖强实体存在,例如上图的门店实体和员工实体,员工依赖于门店实体而存在,因此门店是强实体,而员工是弱实体。
弱实体和强实体的联系必然只有1:N或者1:1,这是由于弱实体完全依赖于强实体,强实体不存在,那么弱实体就不存在,所以弱实体是完全参与联系的,因此弱实体与联系之间的联系也是用的双线菱形。
◆ 复合实体:复合实体也称联合实体或桥接实体,常常用于实现两个或多个实体间的M:N联系,它由每个关联实体的主码组成,用长方体内加一个菱形来表示。
举个复合实体的例子,还是以汽车美容门店的案例,车主和施工项目两个实体是M:N的关系,中间有施工订单这个实体联系,因此施工订单这个实体是一个复合实体,同时如果车主实体不存在,就没有施工订单实体的存在,因此对于车主实体来讲施工订单是弱实体,同理施工项目实体如果不存在,同样不存在施工订单实体,因此对施工项目实体而言施工订单是弱实体,具体如图:
我们如何找到业务中的实体?
首先我们要定义的实体,就是最终定义具体业务的关键核心点。而要在业务场景中找到有实际业务意义的实体,在找实体的过程中我们可以用以下思路:
㊀ 利益相关者法:思考业务本身有哪些利益相关者,这些利益相关者有需要我们解决什么问题?
在B端业务中,经常会涉及到很多利益相关者,而我们可以将一部分利益相关者抽象出一部分实体。
比如,前段时间的文章《一篇长文:总结B端业务调研的问题》,经过调研后,我们可以输出以下利益相关者:
这样一系列调研下来后,我们可以初步的确认这些实体:员工(客服人员/设计师/财务人员)、客户、渠道、量房记录、收款记录
㊁ 业务流程法:这个方法可以从流程中抽象出实体,因为业务流程往往体现了实体与实体之间的交互过程。
在《流程图——产品⽂档和原型咋弄(二)》有提到业务流程画法,其中我们还是以前面调研的例子绘制一个简单的业务流程图:
ⓑ 属性(Attribute)
即数据对象所具有的属性,例如员工具有姓名、工号、职位等属性,用椭圆形表示,属性分为唯一属性( unique attribute)和非唯一属性,唯一属性指的是唯一可用来标识该实体实例或者成员的属性,用下划线表示,一般来讲实体都至少有一个唯一属性。
ER图的属性还细分为复合属性、多值属性和派生属性、可选属性,同时还有用来表示联系的属性,称为联系属性。
◆ 复合属性(composite attribute):复合属性是指具有多个属性的组合,例如「姓名」属性,它可以包含「姓氏」属性和「名字」属性,如下图:
复合属性也有唯一属性,例如员工的「职位」属性,由于多个「职位」都有「职级」,所以单单「职位」属性是不唯一的,但是和「职级」组成的复合属性后则可以匹配成唯一属性。
◆ 多值属性(multivalued attribute):一个实体的某个属性可以有多个不同的取值,例如一辆车的「车型」属性,这辆车有多个「车型」,例如SUV、MPV等,这个「车型」就是多值属性, 用双线椭圆表示。
◆ 派生属性(derivers attribute):是非永久性存于数据库的属性。派生属性的值可以从别的属性值或其他数据(如当前日期)派生出来,用虚线椭圆表示,如下图。
类似上图「门店的营销活动参与情况」中,「参与人数」就是一个派生属性,随着车主参加的活动变化,「参与人数」属性也会变化,一般来说派生属性不存在数据库中,而是通过相应的公式逻辑查询出来,比如:参与记录、活动下单等。而如果存放在数据库中,那么就需要隔一段时间就进行更新,否则会出现数据不对的情况。
◆ 可选属性(optional attribute):并不是所有的属性都必须有值,有些属性的可以没有值,这就是可选属性,在椭圆的文字后用(O)来表示,如下图的地址就是一个可选属性。
◆ 联系属性:联系属性用于表示多个实体之间联系所具有的属性,一般来讲M:N的两个实体的联系具有联系属性,在1:1和1:M的实体联系中联系属性并不必要。
比如上图的「门店」需要开展「营销活动」,那么需要有个「门店开展活动」属性将两个实体联系起来,而这个属性其实是需要「门店id」、「活动id」组合而成的「开展ID」,这里类似数据库中的「复合主键」。而这个「开展日期」、「开展成本」都是用于门店开展活动整体情况数据。
ⓒ 关系(Relationship)
用来表现数据对象与数据对象之间的联系,例如「门店」的实体和「员工」的实体之间有一定的联系,每个「门店」都有自己的「员工」,这就是一种关系,关系用菱形来表示。
ER图中关联关系有三种:
◆ 1对1(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图?
前面提到ER图分为实体(长方形)、属性(椭圆形)、关系(菱形)三个核心部分,而对于之间的联系(直线表示),相关表示符号见下图:
其实这里从1976年3月陈品山博士发明ER图后,随着实体关系建模的发展,ER图的画法也出现了变化。比如上面是「亿图图示」这个软件提供的ER图图例。
◆陈氏符号,其实就是我们前面提到的案例:
实体是长方形体现;
属性是椭圆形体现,如果是唯一键值属性,就在内容文本中加下划线;
关系是菱形体现,菱形内注明实体之间的联系情况;
基数就是关系菱形两侧直线内标注关系类型;
◆UML画法
使用UML画ER图,其实只是用UML的符号进行绘制而已,并没有什么特别之处。
实体:还是使用矩形表示。
属性:这个时候我们初期都可以先忽略属性,先把实体与实体之间的关系梳理清楚。
联系:直接使用直线,对比前面的中间有个菱形,这样可能会快捷一些。
如果在考虑属性,那么就会到最开始的汽车美容门店排位系统的图。
◉ 拓展内容
本文章很多内容出自以下书籍(回复关键词「 ER模型」或「008」可获取):
• 陈品山博士发表的《The Entity-Relationship Model--Toward a Unified View of Data》
• 数据库领域的殿堂级作品《数据库系统概念》
• 亿图图示(https://www.edrawsoft.com/)