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图可以与技术统一领域语言,使得我们产品经理和技术开发的沟通会更顺畅。

相关推荐
硬件人某某某几秒前
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
java·开发语言·社区团购小程序·团购小程序·java社区团购小程序
程序员徐师兄1 分钟前
Java 基于 SpringBoot 的校园外卖点餐平台微信小程序(附源码,部署,文档)
java·spring boot·微信小程序·校园外卖点餐·外卖点餐小程序·校园外卖点餐小程序
chengpei14718 分钟前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json
五味香20 分钟前
Java学习,List 元素替换
android·java·开发语言·python·学习·golang·kotlin
Joeysoda24 分钟前
Java数据结构 (从0构建链表(LinkedList))
java·linux·开发语言·数据结构·windows·链表·1024程序员节
扫地僧00926 分钟前
(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计
java·开发语言
天乐敲代码27 分钟前
JAVASE入门九脚-集合框架ArrayList,LinkedList,HashSet,TreeSet,迭代
java·开发语言·算法
endcy20161 小时前
IoTDB结合Mybatis使用示例(增删查改自定义sql等)
java·mybatis·iotdb
带刺的坐椅1 小时前
Solon Cloud Gateway 开发:导引
java·gateway·solon·solon cloud
securitor1 小时前
【java】IP来源提取国家地址
java·前端·python