3.5 数据建模概念
如果软件需求包括建立和扩展需求,或者具有数据库接口,或者必须构建和操作复杂的数据结构,软件团队可以选择建立一个数据模型作为需求建模的一部分。软件工程师需要定义在系统内处理的所有数据对象,数据对象之间的关联,以及其他与此相关的信息。实体关系图(ERD)描述了这些问题并提供在一个应用项目中输入、存储、转换和产生的所有数据对象。
3.5.1 数据对象
数据对象是必须由软件理解的复合信息表示。所谓复合信息,是指具有若干不同的特征或属性的事物。因此,“宽度”(单个的值)不是有效的数据对象,但是“维度”(包括宽度、高度和深度)可以被定义为一个对象。
数据对象可能是外部实体(如产生或使用信息的任何东西)、事物(如报告或显示)、偶发事件(如电话呼叫)或事件(如警报)、角色(如销售人员)、组织单位(如财务部)、地点(如仓库)或结构(如文件)。例如,一个人或一部车可以被认为是数据对象,在某种意义上它们可以用一组属性来定义。数据对象描述包括了数据对象及其所有属性。
数据对象只封装数据(没有对数据的操作),因此,数据可以表示为如图3-11所示的一张表,表头反映了对象的属性。在这个例子中,汽车是通过生产商(Make)、车型(Model)、标识号(ID#)、车体类型(Body type)、颜色(Color)和车主(Owner)定义的。该表的主体表示了数据对象的特定实例。例如,Chevy Corvette牌的车是数据对象“汽车”的一个实例。
图3-11 数据对象的表格表示
3.5.2 数据属性
数据属性定义了数据对象的性质,可以用来:①为数据对象的实例命名;②描述这个实例;③建立对另一个表中的另一个实例的引用。另外,必须把一个或多个属性定义为标识符。也就是说,当要找到数据对象的一个实例时,标识符属性成为一个“键”。在某些情况下,标识符的值是唯一的,但不是必需的。在数据对象“汽车”的例子中,标识号是一个合理的标识符。
通过对问题环境的理解,可以恰当地确定特定数据对象的一组属性。“汽车”的属性可以用于汽车运输部门的应用系统,而汽车制造公司需要制造中的控制软件。在后一种情况下,“汽车”的属性可能也包括标识号、车体类型和颜色,但为了使汽车在制造的控制环境下成为一个有用的对象,必须增加许多其他属性(如内部代码、驱动系统类型、车内包装设计师和传动类型等)。
3.5.3 关系
数据对象可以以多种方式与另一个数据对象连接。考虑一下两个数据对象:person和car。这些对象可以使用如图3-12a所示的简单标记表示。在person和car之间可以建立联系,因为这两个对象之间是相关的。必须理解在将要构建的软件环境中人(在这里是指车主)和车的角色。可以用一组“对象/关系对”来定义相互的关系,例如:拥有车的人和汽车投保人。关系“拥有”和“驾车投保”定义了person和car之间的相关连接。图3-12b以图形方式说明了这些对象/关系对,图中标注的箭头提供了关联方向信息,它通常可以减少歧义或误解。
图3-12 数据对象之间的关联关系
a)数据对象之间的基本连接 b)数据对象之间的关系