ER 图是什么

文章目录

    • 前言
    • [什么是 ER图](#什么是 ER图)
    • [ER 图实例](#ER 图实例)
    • [简化的 ER 图](#简化的 ER 图)
    • 总结

前言

产品经理在梳理产业业务逻辑的过程中,非常重要的一项工作就是梳理各个业务对象之间的关系。如果涉及对象很对的时候,没有工具支持的话很难处理清楚。今天我们就来介绍一个梳理业务对象关系的工具 ------ ER 图。

什么是 ER图

来自百度百科的解释:

ER图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

ER 图由下面三个要素组成:

● 实体:通常是现实世界的业务对象,当然使用一些逻辑对象也可以。比如对于一个校园管理系统,会涉及学生、教师、课程、班级等等实体。在 ER 图中,实体使用矩形框表示。

● 属性:即某个实体拥有的属性,属性用来描述组成实体的要素,对于产品设计来说可以理解为字段。在 ER 图中,属性使用椭圆形表示。

● 联系:即实体与实体之间的关系,这个关系不仅有业务关联关系,还能通过数字表示实体之间的数量对照关系。例如,一个班级会有多个学生就是一种实体间的联系。

ER 图实例

实际梳理业务对象关系的时候,我们可以先列举出某个模块涉及到的业务对象,然后再注明业务对象之间的联系。至于属性,可以根据实际情况决定要不要标明。因为,属性标记太多的话会占据 ER 图的大部分区域,反而导致实体关系不容易察觉。

以校园管理系统为例,我们梳理出来的业务对象会有学校、班级、教师、学生、课程等对象。它们之间的关系如下:

● 一个学校有多个班级,多名教师;

● 一个班级有多名学生,一个班级会有一名班主任(也是教师),一个班级开设多门课程;

● 一名教师教授1门或多门课程(视情况而定,对小学来说通常会出现一名教师同时教一些非主课课程),一名教师会教多个班级的课程;

● 一名学生属于一个班级,一名学生同时学习多门课程。

可以看到,随着业务对象的增加,上面的关系文字说明会越来越多,让人很难理清楚关系,这个时候我们用 ER 图来表示就会清晰很多,如下图所示。

通过这个图,我们还可以进一步优化,比如通过学生所在的班级可以知道学生学习的课程(假设班级课程统一)。同时,我们发现班主任其实是班级的一个属性,就可以去掉教师和班级之间的关系。这种优化非常关键,因为关系越多意味着业务系统的实现越复杂,也很难进行扩展。优化后的 ER 图如下。

简化的 ER 图

当大家对领域知识熟悉后,其实联系就可以去掉,比如我们都知道学生是属于某个班级的,教师是教授课程的,因此只需要保持数量关系就可以,而且数量对应关系在 ER 图中也有约定的表现形式,常见的对应关系如下图所示。

下面是简化后的 ER 图,这里我们将班主任放到了教师上面,表示一个班级会由一名教师担任班主任。

不拘泥于形式

虽然 ER 图是一种规范,但是有时候为了更清晰地表明业务对象属性或关系,可以做一些变通,比如我们上面的班主任其实并不属于 ER 图的规范。下面的ER图同时将业务对象的属性和关系描述了出来,并且将实体的字段与其他实体的字段对应了起来(如订单的所属客户对应了客户 id)。这种图形更偏向技术上的数据表设计,对于产品经理来说,我们只需要列出关键的属性即可。在实际绘制 ER 图的时候,不要拘泥于固定的形式,更重要的是能够实现清晰地表达业务对象关系的目的。

总结

ER 图用于描述业务对象关系来说非常实用,尤其是对于复杂业务来说,通过ER 图能够让我们理清业务对象关系之外,还能够通过一定手段简化业务对象关系,这样设计出来的产品逻辑会更清晰。同时,由于技术开发通常会参考 ER 图设计数据表,因此通过 ER图可以与技术统一领域语言,使得我们产品经理和技术开发的沟通会更顺畅。

相关推荐
BillKu6 分钟前
Java + Spring Boot + Mybatis 插入数据后,获取自增 id 的方法
java·tomcat·mybatis
全栈凯哥6 分钟前
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
java·算法·leetcode·链表
chxii7 分钟前
12.7Swing控件6 JList
java
全栈凯哥9 分钟前
Java详解LeetCode 热题 100(27):LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)详解
java·算法·leetcode·链表
YuTaoShao9 分钟前
Java八股文——集合「List篇」
java·开发语言·list
PypYCCcccCc14 分钟前
支付系统架构图
java·网络·金融·系统架构
华科云商xiao徐35 分钟前
Java HttpClient实现简单网络爬虫
java·爬虫
扎瓦1 小时前
ThreadLocal 线程变量
java·后端
BillKu1 小时前
Java后端检查空条件查询
java·开发语言
jackson凌1 小时前
【Java学习笔记】String类(重点)
java·笔记·学习