系统地分析一下业务对象与业务场景、逻辑实体、物理实体之间的对应关系。
首先,我们需要明确这些术语在TOGAF(尤其是其内容元模型)语境下的定义。
核心概念定义
业务对象:
这是从业务视角定义的、在业务运营中具有意义和目的的事物。它是业务架构层的核心构件。
它代表了业务领域中的一个“名词”,如“客户”、“产品”、“订单”、“合同”、“发票”。
关键点:它描述的是“是什么”,而不是“怎么做”。它独立于任何系统实现。
业务场景:
这是描述一系列为达成特定业务目标而进行的活动。它是驱动架构开发的重要工具,连接了需求与架构。
一个业务场景通常涉及多个角色(如客户、客服专员)、多个业务对象(如订单、库存),以及一系列步骤(如“创建订单”、“检查库存”、“确认发货”)。
关键点:它描述的是“如何做”,是一个动态的过程,涉及多个业务对象的交互。
逻辑实体:
这是在数据/信息架构层,从逻辑视角定义的数据构件。它是对“业务对象”的第一次结构化、规范化。
它定义了实体的属性、关系(如一对一、一对多)和关键约束,但不依赖于任何具体的数据库技术(如Oracle或MySQL)。
例如:业务对象“客户”在逻辑层可能被细化为
Customer、CustomerAddress、ContactMethod等多个关联的逻辑实体。此时会定义Customer有CustomerID、Name、Status等属性,并与Order实体有一对多关系。关键点:它是技术中立的逻辑数据模型。
物理实体:
这是在技术架构层,针对特定数据库管理系统(DBMS)的具体实现。它是“逻辑实体”在物理数据库中的实例化。
它包含了具体的技术实现细节,如表名、列名、数据类型(
VARCHAR(50)vsNVARCHAR(100))、索引、分区、存储参数等。例如:逻辑实体
Customer在Oracle数据库中可能被实现为名为T_CUST的物理表,其中CustomerID列的数据类型是NUMBER(10),并建立了一个在Status列上的位图索引。关键点:它是技术特定的物理实现。
对应关系分析
它们之间的关系不是简单的1:1对应,而是一个从抽象到具体,从业务到技术,逐步细化、转化和可能拆分/合并的过程。
我们可以用一个经典的“订单到现金”流程中的“订单”对象为例来分析:
1. 业务对象 ↔ 业务场景(业务层内部关系)
关系:参与和协作
一个业务对象(如“订单”)会被多个业务场景所使用。
例如:“订单”对象会出现在“创建订单”、“修改订单”、“审批订单”、“执行订单”、“查询订单状态”等多个业务场景中。
一个业务场景通常会涉及和操作多个业务对象。
例如:“创建订单”场景涉及至少:“客户”、“产品”、“库存”、“订单”、“订单行”等业务对象。
结论:这是多对多的参与关系。业务场景是动态过程,业务对象是静态参与者。
2. 业务对象 ↔ 逻辑实体(业务到逻辑的映射)
关系:精化和结构化
一个业务对象通常会被分解为多个逻辑实体。这是因为在逻辑数据建模时,我们需要遵循规范化原则,消除数据冗余。
例如:业务对象“订单”可能被分解为:
Order(订单头:订单号、日期、总金额、状态)OrderLine(订单行:产品、数量、单价)OrderStatusHistory(订单状态历史:状态、时间、操作人)
同时,一个业务对象(如“客户”)的属性,可能会作为外键出现在另一个业务对象(如“订单”)的逻辑实体中。
也可能存在一个逻辑实体对应多个业务对象的情况(较少),通常在高度抽象的模型中,例如
Party(参与方)逻辑实体可能对应“客户”、“供应商”、“员工”等多个业务对象。结论:主要是从粗粒度到细粒度的、一对多的分解关系。逻辑实体是业务对象在信息域的结构化表述。
3. 逻辑实体 ↔ 物理实体(逻辑到物理的映射)
关系:实现和优化
一个逻辑实体通常对应一个物理实体(表),这是最直接的情况。
但出于性能、安全或技术限制的考虑,经常发生拆分或合并:
拆分(水平/垂直分区):
将
Order逻辑实体按时间拆分为Order_2023、Order_2024等多个物理表(水平分区)。将
Product逻辑实体的常用字段(名称、价格)和非常用字段(详细描述、技术文档)拆分为两个物理表,即Product和Product_Detail(垂直分区)。
合并(反规范化):
为了提高查询性能,将
Order和最常关联的Customer逻辑实体部分字段(如客户姓名)合并到一个名为Order_With_CustomerName的物理视图或宽表中。
结论:基本是一对一的关系,但为了物理性能优化,可以衍生出一对多(拆分)或多对一(合并)的对应。
总体关系图谱与总结
[业务域] │ ├─── 业务场景A ──────┐ [一个场景操作多个对象] ├─── 业务场景B ──────┤ [一个对象参与多个场景] └─── 业务场景C ──────┼──→ 使用 / 涉及 → 业务对象X(如“订单”) │ ↓ 精化 / 结构化 [信息/数据域] │ 逻辑实体1(Order) 逻辑实体2(OrderLine)← 一对多分解 逻辑实体3(OrderStatusHistory) │ ↓ 实现 / 优化(可能拆分/合并) [技术域] │ 物理实体A(ORD_MAIN 表) 物理实体B(ORD_LINE 表)← 可能是一对一,也可能进一步拆分 物理实体C(ORD_HIST 表) 物理实体D(ORD_CUST_VIEW 视图)← 合并的产物
核心结论:
映射链条:
业务场景 (动态过程) → 操作 → 业务对象 (业务概念) → 精化为 → 逻辑实体 (逻辑数据模型) → 实现为 → 物理实体 (物理数据库表)。对应基数:
业务对象 : 业务场景 = 1 : N(多场景使用)
业务场景 : 业务对象 = 1 : N(多对象参与)
业务对象 : 逻辑实体 ≈ 1 : N(通常分解)
逻辑实体 : 物理实体 ≈ 1 : 1(但可根据优化需要变为 1:N 或 N:1)
驱动关系:业务场景驱动对业务对象的识别和分析,而业务对象的需求和特性驱动逻辑数据模型的设计,最后逻辑模型结合非功能性需求(性能、安全)驱动物理数据库的设计。
TOGAF的ADM阶段正是遵循了这个逻辑:A阶段(业务架构)识别业务对象和场景 ->B阶段(信息系统架构-数据)将其转化为逻辑数据模型 ->C/D阶段(技术架构)将其部署为物理数据库。理解这些构件之间的关系,是确保架构从战略到落地保持一致性的关键。