您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 开发技术 > 正文

必知必会的数据建模思想,都在这了

发表于:2022-04-26 作者:丁少华 来源: 数仓宝贝库

导读:在不熟悉软件开发的业务人员看来,软件似乎是一种很神秘的事物。因为对软件不熟悉,这些人对软件的看法往往容易走入两个极端:要么认为软件很简单,要么认为软件是万能的。如果再加上软件开发或数字化从业人员不懂或不熟悉业务,业务与IT之间的鸿沟就会越来越宽、越来越深。在笔者看来,身处数字化时代,大家都应该懂数字化,懂一些软件的工作机理。

如果用一个简单的数学公式来看软件,我们可以将软件理解为:

 

软件=数据+程序+界面

 

数据指的是我们如何去描述现实中的事物,比如事物叫什么名字、有多重、有多高、什么材质、什么颜色等。用软件的术语讲,就是对象、对象的属性和属性值。程序就是一段用于操作对象或对象属性的计算机代码,这些操作包括创建、删除、修改、查询、计算等。界面指的是人与软件的交互界面,包括界面布局、菜单、按钮、选择框、文本框等要素。

 

从软件设计和开发的过程来看,软件的设计和开发与汽车或其他机电产品的设计和开发工作基本是类似的,要有好的架构,也要考虑功能、交期、成本、质量等管理要求。实际上,软件开发的入门不难,难的是开发出功能复杂、操作简便和性能可靠的软件,这就取决于当事人的软件设计和建模,包括数据建模、流程建模、界面建模等。此处以数据建模为例,谈谈设计和建模思想对软件的影响。软件工程对数据建模的总体要求是完整性、无冗余、复用性、稳定性、开放性、集成性、优雅性和可读性。

 

1)完整性。数据建模的完整性要求对象和对象属性的定义等数据,应该能够满足所有的业务需求,不能有任何遗漏。

 

2)无冗余。数据建模的无冗余,指的是数据库表和表的字段不能出现重复,应该只有一张“脸”,而不是数出多孔,否则就很难保证数据的一致性,也将造成逻辑的混乱和存储空间的浪费。

 

3)复用性。复用性是模块化思想在数据建模的体现,指的是数据定义可以用于多种业务和多个场景。

 

4)稳定性。稳定性比较好理解,指的是数据库表在更新或扩充时,原有数据能够保证稳定,不出错。

 

5)开放性。开放性指的是数据表和表字段可以根据业务的变化或扩展做出相应的变化或扩展。

 

6)集成性。集成性指的是数据表和表字段与其他系统之间的数据交互和集成。

 

7)优雅性。优雅性指的是数据建模中对象、对象类、类层次等之间的包含与被包含关系清晰、可装配和可追溯。

 

8)可读性。可读性指的是数据建模的内容,尤其是概念模型能够被业务和用户容易地理解。

 

大体上,软件的数据建模包括三个步骤:概念建模、逻辑建模和物理建模。

 

 

01概念建模

 

概念建模(Concept Modeling)的主要目的是将业务需求转换为数据需求,站在软件的角度将业务需求结构化和系统化。通过概念建模,所有的业务需求都可以归结到对象(包括对象属性的定义)与对象之间的关系上。换句话说,通过对象与对象之间的关系,可以描述现实中任意一个事物,以及组织对事物的管理要求。

 

概念建模是业务需求与软件开发的桥梁。在保证概念模型中对象、对象属性、对象之间的关系被完整清晰定义的前提下,概念模型在形式上也可能容易被业务人员所理解,这涉及概念建模的语言和工具的选择。当前,业内常用的概念数据建模工具有E-R实体与关系模型、UML统一建模语言和OPM对象过程模型。

 

(1)E-R实体与关系模型

 

E-R模型以两类要素—实体(Element)和关系(Relationship)为基本构件,来描述业务需求。其中,实体类似于面向对象编程中的对象,关系类似于面向对象编程中的方法或事件。

 

如图1所示,其中的业务对象有合同工、员工、组织单元、岗位和技能,事件则有雇佣、终止、离职、转岗、晋升、评价等。对象之间还有“被拥有”与“拥有”“管理”“汇报给”等关系类型。

 

图1 E-R概念数据建模方法举例

 

(2)UML统一建模语言

 

UML是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,在软件开发工程师之间比较常用。UML中包括功能模型、对象模型和动态模型,由模型元素(Model Element)、图(Diagram)、视图(View)、通用机制(General Mechanism)等几个部分组成。

 

(3)OPM对象过程建模

 

相比UML统一建模语言,OPM对象过程建模的方法更简单,不仅可以用于软件开发领域,也可以用于其他产品的设计和建模。

 

如果从模型学的角度,世界基本由三种要素构成,即物(Object)、事或过程(Process)和关系(Relationship)。从时间变迁的角度,物是物理或信息上的静态存在(Existence);过程是一种时间和动作序列化的动态存在(Happening);关系则是物与物之间、过程与过程之间、物与过程之间的相互关联,可以表现为结构(Structure)或行为(Behavior)。世界或世界的某部分,都可以用这三方面的要素建构或解构。在这种思想的指导下,诞生了很多模型方法论,通用性比较强又相对简单的是对象关系方法论(Object-Process Methodology,OPM)。

 

在OPM方法论中,人们(用五官或理性思维)看得见也可言说的关键要素只有两类,即对象(Object)和过程(Process)。关系则只能根据最终结果或输出来意会,难以言说或书面化,它是现实世界中的“玄”和“玄之又玄”。过程对对象的影响主要有三种:

1)过程消耗或消灭对象,比如制造过程要消耗原材料;

2)过程催生或创造对象,比如制造过程产生副产品或产成品;

3)过程改变对象的状态,比如制造过程将所使用的设备设置为“忙”的状态。

 

在制造过程中,人、机、料(含原材料、在制品和产成品)和环是对象,法和测是过程。此外,对象还可能是过程的操作者(Operator),过程由对象触发或控制;对象还可能为过程提供支持(Instrument),过程的推进依赖某些工具或设备。

 

用OPM的方法描绘的通用制造系统模型如图2.9所示。

 

图2.9 用OPM描述的通用制造系统模型

 

由图2.9的模型图,可以得出以下结论:

1)制造系统的核心作用是转化,即将能源、人力、原材料等资源转化为产品;

2)制造系统的运行过程中还会产生一定的无价值副产品,比如排放、返工、等待、工料费等;

3)制造系统的改进方向是减少资源消耗,杜绝无价值副产品,增加价值产品的产出;

4)制造系统的改进路径是优化对象与对象之间、对象与过程之间、过程与过程之间的关系,即结构和行为。

 

(4)对象、类和类的层次

 

选择什么样的建模语言或工具,主要取决于当事人的偏好,选用任何一种建模工具都不能保证数据建模的高质量,还要在数据模型中的对象、类,以及类的层次上下功夫,考验的是当事人的哲学思维和架构能力。下面以业内知名的物联网平台—PTC ThingWorx数据建模为例,来谈谈其中所蕴含的数据建模思想。

 

应用软件是解决方案的“母体”,PaaS平台是应用软件的“母体”。

 

从业务需求到解决方案,从解决方案到应用软件,从应用软件到PaaS平台,抽象化越来越高,通用性越来越强。平台之所以称为平台,就是因为它是高度抽象化、模型化的架构式软件系统,它能衍生出千千万万的“子孙”—应用软件。

 

PaaS平台是模型和架构思维在IT行业的具体实例,其模型化、架构化的程度越高,平台的生命力就越强。在PTC ThingWorx平台中,基本架构要素如图2所示,主要有七个:Thing Shape、Thing Template、Thing、属性、服务、事件和订阅。

 

 

图2 PTC ThingWorx平台中的架构要素

 

Thing是物联网中对象的统称,可以代表智能设备、资产、产品、IT系统、人员、流程等。简而言之,在物联网世界中,万事万物都是Thing。

 

Thing Shape和Thing Template是Thing的类,是在Thing之上更高层面的模块化。Thing可以继承Thing Shape和Thing Template的各种属性和方法。一个Thing需要分配一个Thing Template,也可同时分配一个或多个Thing Shape。

 

Thing Shape可以理解为迷你型Thing Template。Thing Shape可以分配给Thing Template,反之则不行。分配给Thing Template或Thing的Thing Shape可以为一个或多个,而分配给Thing Template或Thing的Thing Template则只能为一个。

 

属性、服务、事件、订阅等用于描述物联网中各种Thing的特性和方法。属性、服务、事件和订阅可以分配给Thing Shape和Thing Template,然后再间接继承到相关的Thing,也可以直接将其分配给Thing。

 

属性是对Thing的描述,可以是静态的,也可以是动态的。

 

服务是由一段代码所构成的方法或功能,以帮助Thing完成某个特定的活动。

 

事件是触发器,用于触发Thing的状态变化,也可以驱动某个业务逻辑或活动。

 

订阅是伴随着事件的活动,可用于业务的优化或自动化。

 

根据业务需求,应用PTC ThingWorx平台进行业务建模,基本遵循以下过程(如图3所示):

图3 PTC ThingWorx中的数据建模过程

 

1)业务需求的准确性、完整性记录和澄清;

2)将业务需求分解成相对独立的用户故事;

3)将用户故事的内容拆分成业务对象(实例,Instance)和对象之间的关系(Relationship);

4)将关系的内容和性质进一步拆分成属性、服务、事件和订阅;

5)将第4步中的属性、服务、事件、订阅等进行归纳和分类;

6)根据第5步的分类,定义必要的Template或Shape,并将所有的属性、服务、事件、订阅等分配给Template或Shape;

7)将第3步实例清单中的实例与第6步的Template或Shape进行关联;

8)用Template、Shape、Thing、属性、服务、事件、订阅等要素,以相互之间的分配与继承关系完整地描绘第2步的所有用户故事。

 

利用ThingWorx对物联网业务场景进行建模,就是从特殊到一般、从个体到模型的过程,其中的关键是实例与实例之间关系的整理和结构化。将关系拆分成不可分割的属性、服务、事件或订阅,然后再合并同类项,最终完成从关系到属性和方法、从属性和方法到模型化的过程。

 

 

02逻辑建模

 

逻辑建模(Logical Modeling)是将概念建模的内容进行数据结构化。在逻辑建模中,对象、对象属性等要素用数据库表和表字段来表示,包括创建多少数据库表,每一个数据库表有哪些列(字段)、主键和外键,每一列的标识、名称、数据类型、长度和业务规则,等等。

 

 

03物理建模

 

物理建模(Physical Modeling)是将逻辑建模的内容落实到具体的数据管理系统中。这时,数据库管理系统的选择还要考虑数据库性能、访问控制、存储空间、硬件要求等。

 

综上所述,概念建模、逻辑建模和物理建模是数据建模的三个步骤和主要工作内容。其中,逻辑建模和物理建模纯粹是技术活,概念建模则更多地考验建模者对需求的理解程度,以及将业务需求转化为数据需求的哲学思辨和架构思维的能力,是决定软件质量的根本所在。

 

关于作者,丁少华,字肇之,现任杭州三之一智联科技有限公司首席顾问。资深数字化专家,拥有20多年的企业信息化和数字化咨询服务经验。​