实体联系模型|如何用ER图绘制业务实体(更新了一下配图)

24 评论 110853 浏览 424 收藏 6 分钟

当你设计一个新的功能模块,服务端童鞋一定会追问你具体有哪几种实体以及之间的关系,如果你没想清楚或者描述含糊,那么就有必要学习一下ER图。

你是否碰到过类似的问题?

  • 设计优惠券模块,有几个概念容易混淆。比如运营新建的一批优惠券,然后用户领了其中一张优惠券,而这一张有可能可以多次使用(比如uber)。请问这3种分别是什么,之间的关系,以及如何区分这3者……
  • 设计商品模块,spu、sku、商品很容易混淆,更进一层有商品条形码、商品编码等等。怎么和服务端童鞋解释清楚他们是一件很头疼的事情。
  • 更复杂一点,如果设计商城系统,服务端童鞋会问你这个商城的怎么搭建,核心有哪些东西。

这些问题该怎么解决?

其实这些看似复杂的问题,作为PM先用ER图来梳理清楚,再和服务端确认是最合适的工作方法。你要知道文字很难描述清楚。而原型线框图无法直接表现这些。

ER图是什么?

先说概念,ER图是用来描述现实世界中的实体关系模型,所谓实体是指客观上或者逻辑上存在并且可以区分的人事物。

ER图有什么作用?

ER图会促使你以最适合技术理解实现的方法,来规范的描述功能模块的核心要素,其实就是数据库的物理结构。而这种描述是无二义的,最清晰传达PM的设计思想。

优惠券的ER图

拿上面的案例1来画一张ER图,这样子表述就很清晰,其中联系“生成”属性可以不画。

当然如果业务不一样,比如限定每张领到的券和线下商场一样只能用一次。那图应该是这样,注意区别。

ER图包含哪几种要素?

实体

是指客观上或者逻辑上能够相互区分的事物。

在ER图中用矩形表示,矩形框内写明实体名。

属性

实体所具有的某一特性,一个实体可由若干个属性来刻画。

在ER图中用椭圆形表示,并用无向边将其与相应的实体连接起来。

联系

也称关系,反映实体内部或实体之间的关联。实体内部的联系通常是指组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。

在ER图中用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)。

连接线

实体与属性之间;实体与联系之间;联系与属性之间均用直线相连,并在直线上标注联系的类型。

ER图该怎么画?

要素如何表示

画图步骤

  • 首先确定这个模块有哪几个核心的对象以及具体有哪些特征,
  • 其次思考这些对象之间的关系,如何相互转变。
  • 最后把他们用ER图的方法表述出来。
  • 当然需要尽量精简实体以及优化属性。

接下来把最开始的2个案例也画一下,方便大家理解。

B2C商城的商品模块

B2C商城的系统

注意里面有个仓库的概念。

总结

ER图是一种高效传达功能的手段,状态机也是。千万不要以为不学会就没办法做产品,但是学会了这些方法之后,对于设计和实现层面会有极大的效率提升。

#专栏作家#

浪子,业务型PM。公众号langzisay,人人都是产品经理专栏作家。

本文原创发布于人人都是产品经理。未经许可,禁止转载。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 一个学生对应班级,一个班级可以有多个学生。两个框框从两头解读一个是1.1一个是1对多。到底咋写

    回复
    1. 你的实体‘学生’的含义是什么?

      来自北京 回复
    2. 你从两头解读完,有多的那一边自然是多,而两边都解读为1的,自然是一了

      来自辽宁 回复
  2. 受教了,写的真好!

    来自广东 回复
  3. 浪子,你好。订单和sku,会不会是n:m的关系呢?图中画的1:n,个人认为不太对

    来自湖北 回复
  4. 写的真好

    回复
  5. 大神写的很好,很有用。有点疑惑,请教大神,B2C商城的那张图里面,sku 和订单的关系,sku 和购物车的关系 大神画的是n:1,我怎么理解是1:n,一个sku 可以加入不同的购物车,加入不同的订单。不知是否理解有误?

    来自北京 回复
    1. 1购物车后面对的是1个用户,也就是1个用户对应1个购物车,1个购物车有很多sku。这是我的理解,不一定对哈

      来自四川 回复
    2. 严谨

      来自江苏 回复
    3. 我的理解是:从不同的角度去看待会有不同的关系,若是对于管理系统来说,这里的关系就是:一类sku会对应放在多个不同的购物者的购物车中。但要从购物者的角度出发,关系确实是:将多个不同的sku放在一个自己的购物车中。

      来自山西 回复
  6. 打扰大神,我有个地方不懂:菱形表示关系,矩形表示实体,实体可以用属性来刻画,请问关系也可以用属性来刻画吗?如果可以,那它刻画的是两个实体共有的属性吗?

    来自上海 回复
    1. 我在其他文章中看到过,这类描述两个实体间关系的属性被称为“联系属性”,我个人的理解是:“联系属性”并不是两个实体共有的属性,而是这两个实体间产生联系之后所形成的整体才具备的属性,就像是饺子,可以把“肉馅”看作为一个实体,把“面皮”看做另一个实体,这两个实体产生“包饺子”的关系后形成的“饺子”才具备应有的“皮薄馅嫩”属性。

      来自山西 回复
  7. 每一篇文章反复看了三遍,收获很大,感谢分享

    来自广东 回复
  8. 不是技术出身的我,没看懂m、n、1是什么意思,能针对这点再解释下吗?

    来自广东 回复
    1. 1:n意思是1对多,1:1意思是1对1,m:n意思是多对多,举个上面的例子:用户和购物车是1:1,也就是一个用户只能有一个购物车,其余类似。

      来自上海 回复
  9. 有推荐的免费的工具能画ER的吗

    来自北京 回复
    1. axure感觉就够了,visio也可以。

      来自上海 回复
    2. chrom 的gliffy

      来自北京 回复
  10. 建议再深一点,把数据关系除了这个1:N,N:M之外也加上他们之间的数据关系。

    来自北京 回复
    1. 可以有,只是觉得用的比较少。

      来自浙江 回复
  11. 没有说出:强包含、弱包含、关联等关系

    来自北京 回复
    1. 是的,但是感觉APP设计中只要懂文中的知识点就够用了。

      来自浙江 回复
  12. 感谢,大学学的东西又用起来了

    来自浙江 回复
  13. 写的不错,下次再长点,深点

    回复