领域模型图(数据架构/ER图)

简介: 数据架构核心输出为ER图,包含实体、关系与属性。通过四色原型法进行领域建模:红色MI表时序事件,绿色PPT为参与方/物品/地点,黄色Role示角色,蓝色DESC提供描述信息。以风控系统为例,从业务流程中提取MI作为骨干,逐步补充PPT、Role和DESC,最终提炼出ER图,明确实体间一对一、一对多或多对多关系,构建清晰的数据模型。(239字)

数据架构重要的输出是数据-实体关系图,简称 ER 图。ER 图中包含了实体(数据对象)、关系和属性 3 种基本成分。ER 图可以用来建立数据模型。如何准确的建立产品的数据模型,需要分解出业务需要什么样的数据。数据域的分解过程是站在业务架构的基础上,对业务域进行模型分析的过程。说起业务建模,大家很快会想到领域模型这个概念。这里的思路是通过领域建模来逐步提取系统的数据架构图。
说到领域模型,这里采用四色原型法进行业务模型的抽象。在进行四色模型分析前,我们先了解下四色模型的一些基本概念。四色模型,顾名思义是通过四种不同颜色代表四种不同的原型。
Moment-Interval Archetype 时标性原型
表示事物在某个时刻或某一段时间内发生的。使用红色表示,简写为 MI.
Part-Place-Thing Archetype 参与方-地点-物品原型.
表示参与扮演不同角色的人或事物。使用绿色表示。简写为 PPT。
Role Archetype 角色原型
角色是一种参与方式,它由人或组织机构、地点或物品来承担。使用黄色表示。简写为 Role。
Description Archetype 描述原型
表示资料类型的资源,它可以被其它原型反复使用,并为其它原型提供行为。使用蓝色表示。简写为 DESC。
以风控系统为例,进行领域建模的过程如下:
1.关键流程
在进行业务建模前,首先需要梳理出业务的流程,这一步在业务架构分解环节中已经完成。按照四色建模法的原则,将业务流程图进行一点改造。在原来的流程图上,将流程涉及的事务和角色添加进来。
改造之后的流程图如下:
2.领域模型骨干
从业务流中,我们可以清晰的定义出 Moment-Interval Archetype (时标性原型),流程中的每个节点符合 MI 的定义,即事物在某个时间段内发生。在 MI 的定义过程中,一种方法是通过名词+动词进行定义。那么,风控的 MI 即为:数据采集、规则 &模型设置、风险识别、告警通知、风险处置、风险分析(MI 使用红色表示)。
在得到骨干之后,我们需要丰富这个模型,使它可以更好的描述业务概念。这里需要补充一些实体对象,通常实体对象包括:参与方、地点、物(party/place/thing)。
Part-Place-Thing Archetype(参与方-地点-物品原型):业务对象、规则、模型、异常风险、通知、异常事件、分析报告(PPT 使用绿色表示)。
领域模型骨干图,如下:
3.领域模型角色
在领域模型骨干的基础上,需要把参与的角色(role)带进来。Role 使用黄色表示。如下图:
4.领域模型描述
最后将模型的描述信息添加进来,模型的描述信息中涵盖模型的具体属性。这些描述信息对于后面数据库设计有很大的影响。模型描述使用蓝色标注,如下图:
5.提取 ER 图
领域模型构建完成之后,在此基础上,我们已经能够初步的掌握整个系统的数据模型。其中绿色的 Part-Place-Thing Archetype(参与方-地点-物品原型),可以用来表示 ER 图中的实体模型。红色的 Moment-Interval Archetype(时标性原型),可以用来表示 ER 图中的关系。对领域模型架构图进行提炼,得到如下图:
实体(Entity)和联系(RelationShip)存在一定的关联关系,一般存在 3 种约束性关系: 一对一约束、一对多约束和多对多约束。将这些约束性关系表现在 ER 图中,用于展现实体与实体间具体的关联关系,最终输出 ER 图。(考虑保证 ER 的简洁性,这里并没有把模型的属性画进来)

相关文章
|
4天前
|
Java API
用链表实现队列/栈
本文介绍如何用链表实现栈和队列,利用双链表头尾操作均为O(1)的特性,通过调用LinkedList API高效实现。栈可选头部或尾部作栈顶,队列同理,只需调整增删位置。文末引出数组实现队列的性能问题,启发优化思考。
|
4天前
|
存储 API 索引
队列/栈基本原理 ❗前置知识
本文介绍队列和栈两种“操作受限”的数据结构:队列遵循先进先出(FIFO),只能队尾入、队头出;栈遵循先进后出(FILO),仅在栈顶进行增删操作。二者底层多由数组或链表实现,核心API包括push、pop、peek和size,是后续复杂数据结构的基础。
|
4天前
|
Java 索引 容器
单/双链表代码实现
本文详解双链表与单链表的 MyLinkedList 实现,重点介绍三个关键优化:1)同时持有头尾节点引用,提升尾部操作效率;2)使用虚拟头尾节点简化边界处理;3)解析链表删除中的内存泄露误区,并强调指针置空的良好编程习惯。
|
4天前
|
存储 缓存 运维
一场FullGC故障排查
本文记录了一次JDOS容器CPU告警的排查过程,通过分析发现实际为JVM Full GC引发CPU占用升高。结合泰山与SGM监控,定位到堆内存中大对象导致老年代频繁占满。经JPofiler分析,确认问题源于将Excel数据以List<Map<String, String>>形式加载至内存,造成严重内存膨胀。最终提出优化方案:避免大对象驻留JVM或改用高效存储结构,降低GC压力。
|
3天前
|
缓存 网络协议 算法
核心原理:能否画张图解释下 RPC 的通信流程?
RPC(远程过程调用)是一种实现分布式系统间通信的技术,它让调用远程服务像调用本地方法一样简单。本文深入浅出地讲解了RPC的定义、核心目标、通信流程及在微服务架构中的关键作用,帮助开发者理解其底层原理,掌握如何通过动态代理、序列化、协议设计等机制屏蔽网络复杂性,提升开发效率与系统可维护性。
|
3天前
|
消息中间件 Kubernetes 网络协议
别老想着怎么用好 RPC 框架,你得多花时间琢磨原理
2011年加入京东,亲历技术演进,现任技术架构部首席架构师。主导微服务、消息中间件等核心系统研发,深耕分布式架构。课程涵盖RPC基础、进阶与高级实战,带你掌握网络通信核心,构建高效可靠分布式系统。(238字)
|
3天前
|
算法 Java 索引
双指针技巧秒杀七道数组题目
本文介绍双指针技巧在数组和链表中的应用,重点解析快慢指针如何实现原地修改。通过LeetCode经典题如删除有序数组/链表重复项,展示如何用慢指针记录结果、快指针遍历数据,高效完成去重,时间复杂度O(N),避免频繁数据搬移。
|
3天前
|
算法
双指针技巧秒杀七道链表题目
本文总结单链表七大技巧:合并有序链表、链表分解、合并K个有序链表、找倒数第k个节点、找中点、判断环及起点、判断相交及交点,均基于双指针思想,涵盖LeetCode多道经典题目,助你系统掌握链表算法核心。
|
3天前
|
存储 Java Maven
服务端(DevBox)-项目创建
使用Sealos创建SpringBoot工程zxyf-management,配置Java语言、3.3.2版本,2核CPU、4G内存,通过Devbox在云端搭建开发环境。利用Cursor智能工具打开项目,自动识别Maven结构,一键启动运行,实现高效云端开发。
|
3天前
|
Java
多叉树的递归/层序遍历
多叉树是二叉树的扩展,节点可有多个子节点。遍历方式与二叉树类似,DFS无中序位置,BFS通过队列实现,支持按层遍历并记录深度,代码结构清晰,易于扩展。