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

简介: 本文介绍如何通过四色原型法构建领域模型,并逐步推导出数据架构中的ER图。以风控系统为例,运用时标性(MI)、参与方-地点-物品(PPT)、角色(Role)和描述(DESC)四类原型,从关键流程出发,提炼实体与关系,最终形成简洁清晰的ER图,助力数据建模。

数据架构重要的输出是数据-实体关系图,简称 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 的简洁性,这里并没有把模型的属性画进来)

目录
相关文章
|
19天前
|
Java 应用服务中间件 Maven
Spring Boot开发环境搭建和项目启动
本节讲解JDK配置、Spring Boot工程构建与项目启动,涵盖IDEA和官方方式创建项目、Maven及编码设置,分析项目结构,并通过简单Controller验证启动成功,快速入门Spring Boot开发。
lyL
|
20天前
|
消息中间件 监控 Java
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因Netty在多个ClassLoader中重复加载PooledByteBufAllocator,导致堆外内存超限引发OS OOM的排查过程。通过NMT、Arthas等工具分析,发现多个中间件独立占用堆外内存,总量远超MaxDirectMemorySize限制。最终定位为RocketMQ客户端大量使用堆外内存所致,建议短期内调整JVM堆内存比例以缓解问题。
lyL
60 0
RocketMQ:底层Netty频繁OS OOM
|
20天前
|
SQL Java 数据库连接
MyBatis 分页机制详解:从 RowBounds 到物理分页实践
MyBatis分页策略解析:逻辑分页(RowBounds)将全量数据加载至内存,仅适用于小数据量;物理分页通过SQL层面限制返回数据,性能更优。推荐使用PageHelper插件,自动适配数据库方言,一行代码实现高效分页,避免OOM风险,提升系统稳定性。
|
XML Dubbo Java
详解如何自定义Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本两种写法)
详解如何自定义Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本两种写法)
2028 0
详解如何自定义Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本两种写法)
|
19天前
|
存储 缓存 算法
零拷贝
实现文件传输时,传统方式因频繁系统调用导致大量上下文切换与内存拷贝,性能低下。零拷贝技术通过减少用户态与内核态切换、避免重复数据拷贝,显著提升效率。结合PageCache预读与缓存优势,适用于小文件高并发场景;而大文件传输则推荐异步IO加直接IO,绕过PageCache,避免缓存污染,兼顾性能与资源利用。
67 0
lyL
|
20天前
|
存储 缓存 监控
EFC&CTO:缓存引发数据不一致问题排查与深度解析
EFC客户端在适配CTO测试时发现数据不一致问题,经排查为分布式缓存中版本号回退导致读取旧数据,进而污染pagecache并写坏文件系统。通过维护递增版本号修复,最终问题解决。
lyL
47 1
EFC&CTO:缓存引发数据不一致问题排查与深度解析
lyL
|
20天前
|
自然语言处理 fastjson Java
FastJson:大面积故障规避案例
本文记录了一次由Kotlin语法混淆引发的FastJson反序列化重大故障。因误将 `{}` 赋值给Java对象字段,导致FastJson内部静态标记位 `kotlin_error` 被置为true且无法恢复,进而引发全局反序列化失败。问题根源隐蔽,排查耗时两天,凸显多语言混编下对语法细节掌握的重要性,也警示不可盲目信任第三方框架。
lyL
49 1
FastJson:大面积故障规避案例
lyL
|
20天前
|
前端开发 数据可视化
什么是低代码
该界面支持通过拖拽方式快速生成前端页面表单元素,用户可直观构建页面布局,提升开发效率,适用于低代码或可视化页面搭建场景。
lyL
53 0
|
19天前
|
敏捷开发 Java 测试技术
为什么要单元测试
本文探讨单元测试在软件开发中的核心价值,打破“写单测费时误事”的误区。通过解析测试体系演进、测试金字塔模型,阐明单元测试如何提升代码质量、调试效率与团队协作,并揭示常见反模式与认知误区,倡导研发自测、夯实基础,让软件开发从“爬行”迈向“奔跑”。
 为什么要单元测试
|
20天前
|
存储 NoSQL 安全
Redis:内存陡增100%深度复盘
缓冲区用于暂存数据,防止处理速度跟不上发送速度导致丢数据。Redis通过输入/输出缓冲区管理命令与响应,但输出缓冲区在Pub/Sub模式下可能剧增,理论最大占用达9.375GB,远超实例内存(如2GB),导致SET/GET失败,系统无法正常工作。