Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1621502
  • 博文数量: 268
  • 博客积分: 8708
  • 博客等级: 中将
  • 技术积分: 3764
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-06 15:58
文章分类

全部博文(268)

文章存档

2014年(1)

2013年(15)

2012年(23)

2011年(60)

2010年(51)

2009年(12)

2008年(59)

2007年(47)

分类:

2011-03-29 17:13:16

软件行业中最常被误解的一个术语实际上是我们非常熟悉的一个:实体关系(ER)。
ER 建模本身定义了在基于信息的系统的分析和设计中用到的方法。数据库设计者通常使用该方法来收集需求,并定义数据库系统的构架。该方法的输出是实体类型、关系类型和约束条件的清单。

ER 建模基于工件,可以是物理工件(比如 Product 或 Employee)的表示或者工件(比如 Order 或 Delivery)之间事务的表示。每个工件都包含关于自身的信息。ER 建模还专注于工件间的关系。这些关系可以是二元的(连接两个工件),也可以是三元的(在几个工件之间)。

ER 建模的四个必要元素是:

  1. 实体类型
  2. 属性
  3. 关系类型
  4. 关系属性

对象的表示来源于类的表示。最显著的区别在于对象的名称有下划线,并且只有一个或两个部分。

第一个部分包含以冒号隔开的可选的原型、对象名称,以及派生类的名称,之间用冒号隔开。至少必须指定其中一个名称。第二部分包含相关属性以及它们的值。

表示对象的最好的方法就是只使用一个部分,并将标识符 指定为对象的名称。



图 11 实体类型 Employees 和实体 553-32-2222 在 UML 中被显示为类和对象

实体的相关状态和信息被作为对象的属性存放。实体类型的属性对于其他实体类型必须是可见的或者公开的。在类规格说明书中属性是按照可见性、名称和类型指定的。属性的类型为分析类型。它在设计阶段可能发生变更。

属性是在类的第二部分指定的。它们包含对于实体总是"+"(公开)的可见性规格说明书。名称与类型之间用冒号隔开。



图 12 具有公开属性(社会安全号码、姓名、地址、出生日期、加入日期和职位)的实体类型 Employees

在 UML 中类之间的关系是为类型而非实例指定的。关系双方上的数字指定了基数:参与该关系的可能实例的数量。

关系的名称是直接在关系行中指定的,用于标识该关系。它有助于读者理解存在这种关系的原因。如果没有为一个关系指定名称,那么角色名将 用于帮助读者理解该关系。下图可以这样理解:Products 被 Employees 拥有或者 Employees 是 Products 的拥有者。该关系描述中单词的单复数通过基数确定。



图 13 实体类型 Employee 和 Product 之间的关系

实体类型中用到的数据类型没有被标准化。用户可以使用所需要的任何数据类型。创建具有所有数据类型的术语表是一个不错的做法,因为它可以在公司内多个设计者和项目中实现标准化和可理解性。

关系可以具有属性,这些属性显示在 UML 关联类中。关联类显示在一个矩形中,并且包含该关系的公共属性清单。关联类利用虚线与关系连接。不需要原型来解释类用法和为该类分类,因为附件已经对它做了定义。

关联类中的属性是用可见性、名称和类型指定的。

尽管看上去关联类、附件和关系是独立元素,但是它们实际上代表了同样的元素。关系和关联类的名称必须相关。



图 14 关联类中指定了关系类型 Services 的属性

基数

UML 定义了一种一致的方法来指定基数。它总是被关系双方上的数字指定。可能的定义包括用于一定数量(也可能是不限量的)实例的指定基数的单个数字,以及一对规 定了基数的范围的以".."隔开的数字。用于无限基数的符号是"*",它可以单独使用标识可选的无限关系,也可以与另一个很低的值结合使用,来指定强制关 系(如"1..*")。基数的下限和上限值可以是任意正数或者"*",但是第一个数字必须小于或等于第二个数字。



图 15 实体类型 SoccerTeam 定义了与 11 到 18 个球员的实体类型 Player 的 plays 关系

依赖关系

UML 可以分辨两种形式的实体类型间的依赖关系。聚合是需要依赖性实体类型的两个实体类型之间的一种依赖关系。UML 中聚合的语法是在聚合方用空心菱形表示。同一方还有一个值为 1 的强制基数,它可以省略。



图 16 每个结婚证实体类型都依赖于扮演新郎和新娘角色的两个人

当聚合不是对于所有依赖关系都唯一,并且不是所有依赖性实例都必须与同一个实体相关时,就可以使用聚合。当聚合是所有依赖关系的唯一实体时,UML 指定了一种叫做组合的强依赖关系。组合被表示为聚合方上的一个实心菱形。当聚合包含下级实体类型时会使用这种关系。



图 17 实体类型 OrderPositions 完全由组合指定的实体类型 Orders 定义

基数可以与聚合和组合一起使用,以便定义这些关系上的约束条件。

实体类型的相同点和不同点分析是必不可少的一部分。特化降低了风险,并通过从父方那里继承需求从而减少了需求匮乏。泛化简化了系统中实体类型的模型和实现过程。

在 UML 中泛化是在关系的父方用空箭头表示的。泛化不是两个实体类型间的一种关系。它是从特定实体类型到一般实体类型的派生。在泛化关系上不允许有基数。

父实体类型的所有属性和关系被特化后的实体类型继承。到其他实体类型的属性和关系不能从特化实体类型中删除。



图 18 泛化将实体类型 Employees 和 Customers 定义为继承了 Persons 属性的实体类型 Persons

同一实体类型的范畴规定了实体如何根据它们的特征(比如所有员工都缺勤)互相相关。分类的语法使用了在 OCL(对象约束语言)中指定的与该关系连接的约束条件。

约束条件旨在指定动态行为。当约束条件被评估为有效时,这些关系也是有效的。

通常约束条件是互相排斥的,可以利用互斥关系之间的约束条件{xor}为约束条件建模。



图 19 实体类型的分类定义了关系类型的标准--Cargo 对于卡车类型的 Vehicle 很重要;Person 可以利用
阅读(3370) | 评论(0) | 转发(0) |
0

上一篇:UML组件图

下一篇:UML用例建图

给主人留下些什么吧!~~