UML类图-关系数据库之间的映射

合集下载

基于UML模型的关系数据库设计

基于UML模型的关系数据库设计
从而将 U ML技 术与关 系数据库技 术相结合 , 方便 了数据库设计。 关键词 : ML面向对 象 关 系类 增加 一个对 象标 数 据 库 , 同 时 在 DB MS ( a b s n gmet 识符属性 , D t ae Maae n a 将其 映射为数 S s m) yt 支持的数据库模型 中 , 系型数据库是 据库中相应类表 的主键 , e 关 最普遍 的。 事实上 , 目前较为流行的对象 关系数 参 见 图 l ,其 中 ( p > <k> 图 2 电子商务网站 的类 图 据 库模型也是关系数据 库模型的一个 扩展 因 ( maye )表示 主键 。 rk y 此 ,在关 系数据库设计 中 , M U L可以完成标准 或者根据客观事实 , 将某 E R模 型的所有建模工 作 , 而且可以描述 E R模 个 属性 或属性 的组 合作 型所不能表示的关 系。 U 用 ML进行数据库设计 为 主 键 — 使商务和应用团队可以共享公共 的语言 ,并与 32属性类型映射为 . 数据库团队进行有效 沟通 。 域 。 的属性描述了其所 类 本文先简单介绍一些基本的概念 , 接着讨 有对象共 有的特性。 属性 论将 U L类图 中的数 及其对象 映射成关 系型 的类 型可 以是基 本数 据 M 数据库中的表 的方法 。最后结合一个实例来 说 类型 , 如整数 、 实数 、 布尔 明从 U L M 模型关系数据库之间的转化 。 型等 , 也要以是用户 自定 2属性 、 以及类之问的关 系 类 义类型。 属性类型对应于 图 3 映 射后 的 关 系型教 据 库 21 .属性 。对象属性对 应于数据库表 的字 数据库中的域 , 域的使用 段, 对象属性类型对应 数据库表的域 。 i R d‘ r l×r l =I ¨l i + x… x 可使 数据库设计更具一致性 ,优 化了数 据库应 的所对 应实例 r I i(I ・— 22类 。将 问题域 中的实 体抽象为对象模 用 的移植性 。一般来说 , . 实现简单域比较方便 , 即任意一个关 联关系 R (≤i ) 不能由 i 1 ≤4都 型,在对象模型的基础上进一步抽象为类并将 只须定义相应的数据类型和空间大小。对 于每 其它关联关系推导得到 ,故不存在冗余的关联 类映射为数据库的概 念模 型,是关系数据库设 个属性所联关系等原因 ,需要在表 中增加 一些 关系 , 不需要进行冗余 的关联关系的简化 。 按照文中阐述的映射方法 ,可 以得 到图 2 计 的关键所在。 将类名 、 以及对 属性进行的 新 的列 。 属性 相关操作组成一个完整 的类模型 。 如图 3所示 。 33类映射为表。通 常, . 一个类映射为一张 映射 到关 系数据库 的数据模型 , 23 -类之 间的关 系。UML类之间的关系可 类表 , 的属性映射为表的各列 , 的对象 则映 类 类 这样我们就完成 了关系型数据库的模 型的 分为 :..关 联 :关联描述 了系统 中对象 或实 射为表中的各个记录。但是我们还要注意 以下 建立 , 231 实现 了网站数据库的设计任务 。 例之间的离散连接。关联通 常可 以有 1对 J l 两种特殊情况 :.. 如果类 的属性 中某 些属性 、 331 结束语 对多和多对多等情形 。232组成 : .. 组成是 更强 只是暂时性使用 , 目前 ,面向对象已忧为软件 开发 的主流技 不需要在数据库 中永久保存 , 形式 的关联 。每个表示部分的类与表示整体 的 则该类属性 无须映射 。332如果类 的属性如果 术 , .. 有关 U ML技术 的探 讨也越来越多 。在一个 类之问有单独 的关联 。部分对象仅 属于~个整 是多值 , 则该属性 映射 为多个列 。另外 , 附 良好的项 目设计 中, 由于 我们可以先使用 U ML技术 体, 并且部分对象通常与整体对象共存亡 … 加对象标志符 O D或附加关联系系等原 因 , 23 3 接着引入映射层 , 对将类设计映 l 会 建立商业模型 , 泛化 : 每一种泛化元素都有一组继 承特性 。在 预收款致一些新 的列增加 。 射至关系数据库的逻辑运行封装 使用这种方 UML类图 中, 如果子类 型的接 口包括超类型 的 法来设计关系数据库 ,可 以在整个系统的分析 4设计例举 接口中的每个元 ,则超类 与予类之间构成泛 化 下面我们 结合一 个电子 商务 网站开发 实 设计过程 中就完成数据库 的大部分设计工 作 , 关系 。泛化通常可以用继承或授权 的方式实现 例来说明 U L的类模 式到关 系数 据库 的转换 而且在一定程度 上能减少数据 的冗余。 M 总之 , 我 M 2 . 聚合 : 4 3 聚合表示部分 与整体关系的关联。 是如何实现 的。图 2 是一个 电子 商务 网站类 图 们 认为 U L模 型技 术可 以有力 地推动关 系型 3转 换 方 法 模 型的一部分 ,有 5 个类 :顾客 ” “ “ 、购物篮 ” 数据库设计 的全 面发展 。 、 本文采用了 U ML中类模式到关 系数 据库 “ 品” “ 产 、定单” “ 、定单款项” 。其 中“ 购物篮 ” 与 的映射转换。类 图是 面向对象 系统的建模 中最 “ 顾客” “ 、购物篮” 产品” “ 客” 定单 ” 与“ 、 顾 与“ 以 常见的图之 。类 图显示 了一组类 、 口、 接 协作 及“ 定单款项 定单 ” 间存在着关联系 。 与“ 之 以及它们之 问的关系 ,主要用于对系统静态设 从图 2中我们 可以发现 ,存在 4个关系设 计视图建模 。 其中, 类是面 向对象系统组织结构 为 R1R R 、 , 责 任 编 辑 : 伟 东 王 、 2、 3R4 但不存在任意一个关联关系

UML类图到关系表的映射策略及其应用

UML类图到关系表的映射策略及其应用

这 二 者描 述 的是 部 分 与 整 体 的 关 系 。 聚 集 关 系 如 果 是 紧 密 的 。 以考虑映射成一张表 , 果是 松散的 . 可 如 可参 考 1 多 的 关 对
联, 映射 为 2张 表 , ” ” ( 分 类 ) 置 外 键 . 用 n ” ( 在 多 方 部 设 引 1方 整 U ML 中 的类 图主 要 由类 及 其 关 系组 成 . 而类 之 间 的关 系 又 体类 ) 键 。 主 可 以细 分 为 关 联 、 化 、 集 、 成 、 赖 、 现 等 多 种 。 中 前 四 泛 聚 组 依 实 其 组 成 的映 射 与 聚集 相 似 .但 部 分 类 对 应 的 子 表 中 的外 键 必 种 关 系 的定 义 如 下 : 须 是 强制 非 空 的 。 ( 关 联 : 示 类 的实 例之 问存 在 的某 种 关 系 。 它 通 常 可 以 3 应 用 实 例 1 ) 表 . 有 1对 1、1 多和 多对 多 等 情 形 。 对 下 面 尝 试 将 上 述策 略 运 用 到 一 个 小 区 业 主 论 坛 系统 中 ( 泛 化 :在 U 2 ) ML类 图 中 ,如 果 类 型 B 的接 口包 括 类 型 A 1 .业 务 需求 简述
维普资讯
20 0 7年第 8 期 福建 电脑
15 0
U ML类图到关 系表 的映射 策略及其应用
徐 婉 珍
f 海 东软 信 息 技 术 职 业 学 院 广 东 佛 山 5 8 0 ) 南 220
【 摘
要 】 随着面 向对 象技 术的发展及应 用的 1益 复杂化 , M : 3 U L已成为应用 开发 的流行 建模工具 , 并将取代 关 系数据 表 映射
的 接 口中 的 每 个 元 素 , 类 A 与 类 B之 问构 成 泛 化 关 系 。且 称 则 某 小 区业 主 论 坛 : 一 个 功 能 较 简单 的论 坛 . 要 满 足 小 区 是 主 类 型 B为 子 类 型 , 型 A 为超 类 型 。泛 化 是 继 承 的 逆运 算 , 以 业 主 之 问 的交 流 , 类 所 分设 有几 个 版 块 , 版 块 版 主 由论 坛 管 理 员 从 各 泛 化关 系通 常 可 以用 继 承 关 系实 现 。 注 册 用 户 中选 取任 命 。 册 用 户 可 自由 发贴 、 改 、 注 修 回贴 , 不 能 但 ( 聚 集 : 个 类 由几 个 部 分类 组 成 , 种 关 系 被 称 为 聚 集 , 删 除 帖子 , 贴 可 累 积 积 分 ; 主 除 具 有 普 通 用 户 的 功 能 外 . 3 ) 一 这 发 版 还 它 体现 部 分 与 整 体 的 关 系 有 删 贴 , 移 帖 子 去 其 它版 块 的功 能 。 转 () 成 : 成 是 强 类 型 的 聚 集 , 表 示 聚 集 中 的 每 个 部 分 4组 组 它 分 析 其 中 的主 要 关 系后 , 到 如 图 1 示 的 U 得 所 ML类 图 。为

UML类图及类与类之间的关系

UML类图及类与类之间的关系

UML类图及类与类之间的关系原⽂地址:类图⽤于描述系统中所包含的类以及它们之间的相互关系,帮助⼈们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。

1. 类类(Class)封装了数据和⾏为,是⾯向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。

在系统中,每个类都具有⼀定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。

⼀个类可以有多种职责,设计得好的类⼀般只有⼀种职责。

在定义类的时候,将类的职责分解成为类的属性和操作(即⽅法)。

类的属性即类的数据职责,类的操作即类的⾏为职责。

设计类是⾯向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。

在软件系统运⾏时,类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。

类图(Class Diagram)使⽤出现在系统中的不同类来描述系统的静态结构,它⽤来描述不同的类以及它们之间的关系。

在系统分析与设计阶段,类通常可以分为三种,分别是实体类(Entity Class)、控制类(Control Class)和边界类(Boundary Class),下⾯对这三种类加以简要说明:(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,⼀般使⽤数据库表或⽂件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。

实体类来源于需求说明中的名词,如学⽣、商品等。

(2) 控制类:控制类⽤于体现应⽤程序的执⾏逻辑,提供相应的业务操作,将控制类抽象出来可以降低界⾯和数据库之间的耦合度。

控制类⼀般是由动宾结构的短语(动词+名词)转化来的名词,如增加商品对应有⼀个商品增加类,注册对应有⼀个⽤户注册类等(3) 边界类:边界类⽤于对外部⽤户与系统之间的交互对象进⾏抽象,主要包括界⾯类,如对话框、窗⼝、菜单等。

在⾯向对象分析和设计的初级阶段,通常⾸先识别出实体类,绘制初始类图,此时的类图也可称为领域模型,包括实体类及其它们之间的相互关系。

软件工程之系统建模篇【设计数据模型】

软件工程之系统建模篇【设计数据模型】

软件⼯程之系统建模篇【设计数据模型】数据模型描述系统持久性数据库层的逻辑内容与结构,数据模型⽤UML的类图描述。

⾸先简要介绍数据模型的设计⽅法及关系数据库的⼏个术语,然后依次介绍如何将类映射到表、将关联映射到关系数据库及将泛化映射到数据库。

数据库模型从层次上可以分为3类:概念数据模型、逻辑数据模型和物理数据模型。

概念数据模型是⾯向⽤户、⾯向现实世界的数据模型,与数据库管理系统⽆关,逻辑数据模型反映了DBMS的存储结构,是⽤户从数据库看到的数据模型,物理数据模型是特定的DBMS,定义实际中的数据如何存储在持久存储设备上。

本章要设计的数据模型是逻辑数据模型,⽤⾯向对象⽅法设计数据模型于⽤传统⽅法设计数据模型差别不⼤。

设计步骤为: 1、设计UML中的实体与ER图中的实体 2、设计UML实体类图与E-R图 3、建模依据 4、选择数据库系统 持久性数据库层可以是关系型的数据库,也可以是对象关系型的数据库或者对象数据库。

从关系型数据库技术到对象数据库技术是⼀个演化过程,对象数据库技术是这个演化过程的中间阶段,尽管未来将属于对象数据库,但关系型数据库在⽬前的数据库软件市场中仍占主流,本章为系统实例选择关系型数据库作为持久性数据库层的数据库管理系统。

对于关系数据库来说,可以⽤类图描述数据库模式,⽤类描述数据表,⽤类的操作描述触发器和存储过程。

1、将类映射到表 将实体类映射为关系数据表,必须遵循表的第⼀范式,列必须是不可再分的数据项,从类到表的映射可以是⼀对⼀,即⼀个类映射为⼀个表,但是,⼀对⼀映射可能会导致⼀些问题,如表太多,表丢失,以及对泛化关系处理不合理等,在设计中要灵活调整。

2、将关系映射到关系数据库 类之间的多重性可以分为⼀对⼀,⼀对多和多对多3种情况,对3种多重性的处理已经有⼀些⼀般的转换规则,数据模型的设计⽤UML符号构造型和其他扩展机制类模拟,关系表的UML符号⽤构造型为《relational table》的类符号表⽰,关系表的列⽤类中的属性表⽰,带有构造型《pk》的属性代表主键,带有构造型《fk》的属性代表外键,不能接受空值的列⽤约束“{not null}”类表⽰。

UML中的类图和数据库设计的关联性探究

UML中的类图和数据库设计的关联性探究

UML中的类图和数据库设计的关联性探究在软件开发过程中,UML(Unified Modeling Language)是一种常用的建模语言,用于描述软件系统的结构和行为。

其中,类图是UML中最常用的图表之一,用于表示系统中的类、属性和方法之间的关系。

而数据库设计则是软件开发过程中的另一个重要环节,涉及到数据的存储和管理。

本文将探讨UML中的类图与数据库设计之间的关联性。

首先,UML中的类图可以直接映射到数据库设计中的表结构。

在类图中,每个类代表了一个实体,而每个属性则代表了实体的属性。

同样地,在数据库设计中,每个表代表了一个实体,而每个字段则代表了实体的属性。

因此,可以通过对类图的分析和设计,直接生成数据库的表结构,从而实现类与表之间的一一对应关系。

其次,UML中的类图可以帮助设计数据库的关系模式。

在类图中,类与类之间的关系可以通过关联、聚合、组合等方式进行表示。

这些关系在数据库设计中可以转化为表与表之间的关系。

例如,一个类图中的关联关系可以转化为数据库中的外键关系,用于表示两个表之间的关联。

而聚合和组合关系则可以转化为数据库中的表之间的关系,用于表示表之间的层次结构。

通过类图的设计,可以更好地理清系统中各个实体之间的关系,从而指导数据库的关系模式设计。

此外,UML中的类图还可以指导数据库的索引设计。

在类图中,类的属性可以分为主属性和外部属性。

主属性通常用于唯一标识一个实体,而外部属性则用于描述实体的特征。

同样地,在数据库设计中,主键可以用于唯一标识一个表中的记录,而外键则用于建立表与表之间的关系。

通过对类图的分析,可以确定哪些属性应该成为主键,哪些属性应该成为外键,从而指导数据库的索引设计,提高数据库的查询效率。

最后,UML中的类图还可以与数据库设计工具进行集成。

目前市面上有许多专业的数据库设计工具,如ERwin、PowerDesigner等。

这些工具可以根据UML中的类图自动生成数据库的表结构,简化了数据库设计的过程。

数据库设计中的数据模型与UML图解方法(十)

数据库设计中的数据模型与UML图解方法(十)

数据库设计中的数据模型与UML图解方法引言在今天的信息化社会中,数据成为了企业运作的重要资产。

为了有效管理和利用数据,数据库设计成为了关键环节。

而数据模型和UML 图解方法则是数据库设计中常用的工具。

本文将探讨数据模型和UML 图解方法在数据库设计中的应用。

数据模型介绍数据模型是数据库设计的重要组成部分,它描述了数据之间的关系和约束。

常用的数据模型有层次模型、网状模型和关系模型等。

层次模型是最早的数据库模型之一,它将数据组织成树状结构。

树的每个节点代表一个实体,节点之间通过父子关系连接。

网状模型是层次模型的扩展,它允许一个节点拥有多个父节点。

节点之间的关系使用连接线表示。

关系模型是最为常用的数据库模型,它将数据组织成二维表格。

表格的每一行代表一个记录,每一列代表一个属性。

记录之间通过键值来建立关系。

UML图解方法介绍UML(Unified Modeling Language)是一种用于软件开发的通用标准。

它提供了一套丰富的图形符号和规则,用于描述系统的结构、行为和交互。

在数据库设计中,UML图解方法可用于建立数据库的逻辑模型和物理模型。

逻辑模型使用类图来描述实体(表)之间的关系。

类图由实体类、属性和关系等组成。

每个实体类表示数据库中的一个表,属性表示表的字段,关系表示表与表之间的关联。

物理模型使用部署图和组件图描述数据库的部署和组件关系。

部署图展示了数据库和服务器之间的物理连接,而组件图则展示了数据库中各个组件之间的依赖关系。

数据模型与UML图解方法在数据库设计中的应用数据模型和UML图解方法在数据库设计中起到了关键的作用。

它们可以帮助开发人员理解需求、分析问题和设计方案。

首先,数据模型可以帮助开发人员准确地理解系统的业务逻辑。

通过数据模型,开发人员可以清晰地了解各个实体之间的联系和属性,从而更好地设计数据库结构。

其次,UML图解方法可以提供更加直观的展示和交流方式。

通过使用图形符号,开发人员可以将复杂的数据库结构转化为易于理解和沟通的图形模型。

UML类图详解_关联关系_多对多

UML类图详解_关联关系_多对多

UML类图详解_关联关系_多对多在关联关系中,很多情况下我们的多重性并不是多对⼀或者⼀对多的,⽽是多对多的。

不过因为我们要考虑⾥⾯的导航性,如果直接搞的话就是需要去维护两群对象之间多对多的互指链接,这就⼗分繁杂且易错。

那么我们怎么办呢?可以将多对多的多重性尝试拆解为两组⼀对多的设计。

我们可以改为上图的这种拆解⽅法。

就是说在账户与基⾦之间多搞⼀个申购交易,这样就可以化解多对多的复杂度。

⼀个账户底下可以记录多笔申购交易,⽽每⼀个申购交易将指定某⼀档基⾦。

虽然可以重复申购同⼀档基⾦,不过每⼀个申购交易只能设定⼀档基⾦。

⼀个账户对象可以链接多个申购交易对象,⽽每个申购交易对象只能链接到⼀个基⾦对象。

下⾯我们来看⼀个“多对多”的例⼦Account.h1 #include <cstdlib>2 #include <vector>3 #include "Bid.h"4using namespace std;56class Account7 {8public:9void setBid(Bid*);10int calcAsset();11private:12 vector<Bid*> bidObj;13 };Account.cpp1 #include "Account.h"23void Account::setBid(Bid *theBid)4 {5 bidObj.push_back(theBid);6 }78int Account::calcAsset()9 {10int size,theAsset=0;11 size=bidObj.size();12for(int i=0;i<size;i++)13 theAsset=theAsset+bidObj[i]->calcAsset();14return theAsset;15 }Bid.h1 #include "Fund.h"23class Bid4 {5public:6 Bid(float);7void setFund(Fund*);8int calcAsset();9float getUnit();10private:11float unit;12 Fund *fundObj;13 };Bid.cpp1 #include "Bid.h"23 Bid::Bid(float theUnit)4 {5 unit=theUnit;6 }78void Bid::setFund(Fund *theFund)9 {10 fundObj=theFund;11 }1213int Bid::calcAsset()14 {15return unit*fundObj->getPrice();16 }1718float Bid::getUnit()19 {20return unit;21 }Fund.h1class Fund2 {3public:4 Fund(float);5float getPrice();6private:7float price;8 };Fund.cpp1 #include "Fund.h"23 Fund::Fund(float thePrice)4 {5 price=thePrice;6 }78float Fund::getPrice()9 {10return price;11 }main.cpp1 #include <cstdlib>2 #include <iostream>3 #include "Bid.h"4 #include "Account.h"5 #include "Fund.h"6using namespace std;78int main(int argc, char *argv[])9 {10 Fund *myFund;11 Bid *myBid;12 Account myAccount;1314 myFund=new Fund(19.84);15 myBid=new Bid(100);16 myBid->setFund(myFund);17 myAccount.setBid(myBid);18 cout << "⼤华⼤华基⾦单位及净值: "19 << "(" << myBid->getUnit() << ")"20 << "(" << myFund->getPrice() << ")" << endl;2122 myFund=new Fund(37.83);23 myBid=new Bid(200);24 myBid->setFund(myFund);25 myAccount.setBid(myBid);26 cout << "⽇盛上选基⾦单位及净值: "27 << "(" << myBid->getUnit() << ")"28 << "(" << myFund->getPrice() << ")" << endl;2930 myBid=new Bid(300);31 myBid->setFund(myFund);32 myAccount.setBid(myBid);33 cout << "⽇盛上选基⾦单位及净值: "34 << "(" << myBid->getUnit() << ")"35 << "(" << myFund->getPrice() << ")" << endl << endl;3637 cout << "总资产为: "38 << myAccount.calcAsset() << endl << endl;3940 system("PAUSE");41return EXIT_SUCCESS;42 }下⾯我们来画⼀下UML图,并且⽤UML⾃动⽣成C++代码来做⼀个⽐较⽣成代码对⽐Account.h达到预期Bid.h达到预期Fund.h达到预期。

(完整版)面向对象分析与设计练习题含答案

(完整版)面向对象分析与设计练习题含答案

面向对象分析与设计试题B卷一、单项选择题( 在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。

每小题2 分,共20 分)/* 上个世纪80年代开始至今还盛行的以Smalltalk,C++等为代表的面向对象软件开发方法(00)*/1.到20世纪末,面向对象软件工程已经逐渐发展成熟,特别是(D)的形成和广泛使用,采用面向对象分析与编程的软件开发方法已成为软件开发的主流方法。

A. Simula67语言(20世纪70年代的Simula-67是第一个面向对象的语言)B. Smalltalk语言(80年代初的Smalltalk语言)C. Java语言(对流行的语言进行面向对象的扩充得到的语言或C++)D. 统一建模语言(UML)的标准2. 面向对象的运动产生了多种面向对象的语言, 其中(C)是一种混合性面向对象语言, 既支持面向过程的程序设计方法,又支持面向对象的程序设计方法,有广泛应用的基础和丰富开发环境的支持,因而使面向对象的程序设计能得到很快普及。

A. SmalltalkB. EiffelC. C++D. Java3.下列不属于面向对象技术的基本特征的是(B)。

A. 封装性B. 模块性C. 多态性D. 继承性4. 面向对象程序设计将描述事物的数据与( C ) 封装在一起,作为一个相互依存、不可分割的整体来处理。

A. 信息B. 数据隐藏C. 对数据的操作D. 数据抽象5. 关于面向对象方法的优点,下列不正确的叙述是(C)。

A. 与人类习惯的思维方法比较一致B. 可重用性好C. 以数据操作为中心D.可维护性好6.(D)是从用户使用系统的角度描述系统功能的图形表达方法。

A. 类图B. 对象图C. 序列图D. 用例图7. (C ) 是表达系统类及其相互联系的图示,它是面向对象设计的核心,建立状态图、协作图和其他图的基础。

A.对象图 B. 组件图 C. 类图 D. 配置图**8.(D)描述了一组交互对象间的动态协作关系,它表示完成某项行为的对象和这些对象之间传递消息的时间顺序。

UML类模式在数据库中的应用

UML类模式在数据库中的应用

n m doj t e t nh rsn d w ihin t ny o l zdt 3 Fbt s a u e o t i e edo t lhn dm i a i a e be . li si i peet , h o ol fr i N u a oh sp r ry nt l f s i i a a ti n c rao p s e c s ma e o l s ii h f i e a s gn b n ng
获得成 功的计。
好、 易于 表达 、 功能强大 的通用 的可视化 建模 语言 , 于对软件 用 进行描 述 、 可视化处 理 、 构造和 建立软件 系统 工件 的文档 , 出 其 现减少 了各种 软件开发工具 之 间无谓 的分歧 , 深受 计算 机界欢
U L记录和被构建系统有关 的决策和理 解 , 一种 定义 良 M 是
主要 矛盾 : 使用对 象模 型 , 常通 过对 象 之 间的关 系来 进行 访 常 问 , 据关 系理 论 , 通过表 的连接 、 列 的复制来实施数 据 而根 则 行
的存取 , 同机制 的结合需要一 种映射方法来解决该矛盾 , 而 不 从
统 的关 系模 型成为一个值得研究 的课题 。
计 与关 系数据库设计之间 的不匹配 。对象模 型侧重 于使 用包 含 数 据和行为的对象来构建应 用程 序 , 而关系模 型则 主要针对 于
数据 的存储 。 在为访问数据寻找一种 合适 的方法 时 , 种不 匹配就成 了 这
1 UML概 述
U ML 类模 式 在 数 据 库 中 的应 用
贾晓辉 夏敏捷 赵巧萍 乐嘉锦
( 中原 工学院 河南 郑州 4 0 0 ) 5 0 7
( 东华大学计算科学与技术学院 上海 205 ) 002

UML课件5-类图和对象图详解

UML课件5-类图和对象图详解

5.4.3 寻找类(三种常用方法)
1. 使用名词/动词法分析寻找类
收集相关信息 补充的需求规格说明 用例 项目词汇表 其他文档
选取类的属性时只考虑系统用到的特征,不必将所有属 性都表示出来,原则上,由类的属性应能区分每个特定 的对象。
5.1.1 属性
可见性
属性的可访问性,四类: 公共(public)
私有(private)
保护(protected)
实现(implementation) 子类无法继承和访问父类的私有属性和实现属性
先调用Order的dispatch ()方法,它将根据其包含的OrderItem中 产品信息,来按供应商户分拆成若干个DeliverOrder。商户登录 系统后就可以获取其DeliverOrder,并在执行完成后再调用close ()方法。此时,就将调用OrderItem的stateChange()方法来改变 其状态。同时再调用Order的close()方法,判断该Order的所有 的OrderItem是否都已经送到了,如果是就将其真正close()掉。
一个公司有多个部门,一个职员为其中某部门工作,则 可推导该职员为该公司工作。
5.2.2 泛化
Generalization,一般元素和特殊元素之间 的关系。即OO语言中,类之间的继承关系
斜体表示 抽象类
5.2.2 泛化
泛化的目的
自顶向下的属性继承。可以使得子类共享父类的属性 和操作,实现继承。
5.1.2 操作
标准格式:
[可见性] 操作名[ (参数列表) ] [: 返回值类型][{特性}]
例:
+display() #create() -attachXWindow(xwin:XWindowPtr) +getname():String

UML的类图关系分为:关联、聚合组合、依赖、泛化(继承)

UML的类图关系分为:关联、聚合组合、依赖、泛化(继承)

UML的类图关系分为:关联、聚合组合、依赖、泛化(继承)UML的类图关系分为:关联、聚合/组合、依赖、泛化(继承)。

⽽其中关联⼜分为双向关联、单向关联、⾃⾝关联;下⾯就让我们⼀起来看看这些关系究竟是什么,以及它们的区别在哪⾥。

1、关联双向关联:C1-C2:指双⽅都知道对⽅的存在,都可以调⽤对⽅的公共属性和⽅法。

在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适⽤的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引⽤或指针。

对象引⽤本⾝就是有向的,更适合表达我们所讨论的那种关系。

所以这种关系在设计的时候⽐较少⽤到,关联⼀般都是有向的。

使⽤ROSE ⽣成的代码是这样的:class C1...{public:C2* theC2;};class C2...{public:C1* theC1;};双向关联在代码的表现为双⽅都拥有对⽅的⼀个指针,当然也可以是引⽤或者是值。

单向关联:C3->C4:表⽰相识关系,指C3知道C4,C3可以调⽤C4的公共属性和⽅法。

没有⽣命期的依赖。

⼀般是表⽰为⼀种引⽤。

⽣成代码如下:class C3...{public:C4* theC4;};class C4...{};单向关联的代码就表现为C3有C4的指针,⽽C4对C3⼀⽆所知。

⾃⾝关联(反⾝关联):⾃⼰引⽤⾃⼰,带着⼀个⾃⼰的引⽤。

代码如下:class C14...{public:C14* theC14;};就是在⾃⼰的内部有着⼀个⾃⾝的引⽤。

2、聚合/组合当类之间有整体-部分关系的时候,我们就可以使⽤组合或者聚合。

聚合:表⽰C9聚合C10,但是C10可以离开C9⽽独⽴存在(独⽴存在的意思是在某个应⽤的问题域中这个类的存在有意义。

这句话怎么解,请看下⾯组合⾥的解释)。

代码如下:class C9...{public:};class C10...{};组合(也有⼈称为包容):⼀般是实⼼菱形加实线箭头表⽰,如上图所⽰,表⽰的是C8被C7包容,⽽且C8不能离开C7⽽独⽴存在。

数据库设计中的数据模型与UML图解分析(五)

数据库设计中的数据模型与UML图解分析(五)

数据库设计中的数据模型与UML图解分析数据模型是数据库设计的基础,它定义了数据库中数据的组织方式和关系,为开发人员提供了一个抽象的视图来描述数据的结构和行为。

而UML(统一建模语言)图解则是一种常用的可视化工具,能够帮助开发人员更直观地理解和分析数据模型。

一、关系数据库模型关系数据库模型是最常见也是最广泛使用的一种数据模型。

它把数据组织成一个或多个表的形式,每个表由一系列行和列组成,其中每一行都表示一个实体,每一列都表示一个属性。

实体之间的关系通过在不同表之间建立关联来表示。

在关系数据库模型中,常用的UML图解有实体-关系图(ER图)和类图。

ER图用于描述实体之间的关系,包括一对一、一对多和多对多关系。

类图则用于描述类(实体)之间的关系,包括继承、关联和聚合等。

二、面向对象数据库模型面向对象数据库模型是基于面向对象编程思想的一种数据模型。

它将数据组织成对象的形式,每个对象都有自己的属性和行为,并且可以通过继承、封装和多态等方式来建立对象之间的关系。

在面向对象数据库模型中,常用的UML图解有类图和对象图。

类图用于描述类之间的关系,包括继承、关联和聚合等,与关系数据库模型的类图相似。

而对象图则用于描述对象之间的关系,每个对象都有自己的状态和标识,能够更直观地表示数据的变化和行为。

三、半结构化数据库模型半结构化数据库模型是一种能够存储和查询非规范化数据的数据模型。

它通常使用XML(可扩展标记语言)来表示和存储数据,每个数据都有自己的标签和属性,并且可以嵌套和扩展。

在半结构化数据库模型中,常用的UML图解有XML Schema和DTD。

XML Schema用于描述XML文档的结构,包括标签、属性和限制条件等。

而DTD(文档类型定义)则用于描述XML文档的类型和结构,能够帮助开发人员验证和解析XML文档。

四、UML图解分析数据库设计UML图解是一种可视化工具,它能够帮助开发人员更直观地理解和分析数据模型。

UML第4课数据建模

UML第4课数据建模
6. 创建表(table)。如果有必要,也可以创建视图,视图是类的 <<View>>版型。
7. 创建列(column)。在表中创建每一列,包括列名、列的属性等。
8. 创建关系(relationship)。如果表与表之间存在关系,则创建它们 之间的关系。
9. 在必要的情况下对数据模型进行规范化,如从第二范式转变为 第三范式。
第4章 数据建模
3
4.1 基本概念
数据库数据的总体逻辑结构称为模式(Schemas)。
关系数据库数据的总体逻辑结构是关系模式,这些数据结构的关 系模式通过各种表来描述。
一个面向对象的系统,要利用关系数据库来表示对象模型 需要进行一定的转换,即把面向对象模式的数据模型转换 成关系模式的数据模型。其思想可以用如图所示的建模方 法表示。
对象类间的一对一关联。
可以在两个对象类转换成的关系模式中的任意一个模式内加 入一个外键,指向另一个模式的主键,即可建立两个表之间 的连接。
对象类间的一对多关联。
可以通过在具有多个对象的类的关系模式中加入一个外键, 指向另一模式的主键建立两个表的连接。
实现对象类间的多对多关联。
需要将类之间的关联也设计成一个类——关联类,把一个多 对多的关联转化成两个一对多的关联。引入的该关联类映射 为关系数据库中的一个关联表,用来映射关联对象。在新增 的关联表中设置一个标识符作为主键,加入两个外键分别指 向初始关联的两个关系模式表的主键。
16
4.3 数据库设计的步骤
结合Rose 2003工具提供的功能来说明如何用UML的类图进 行数据库设计,在Rose 2003中数据库设计的步骤如下:
1. 创建数据库对象。这里所说的数据库对象是指Rose中构件图中 的一个构件,其版型为Database。

UML 类图详解

UML 类图详解

UML类图在UML的静态机制中类图是一个重点,它不但是设计人员关心的核心,更是实现人员关注的核心。

建模工具也主要根据类图来产生代码。

类图在UML的9个图中占据了一个相当重要的地位。

James Rumbaugh对类的定义是:类是具有相似结构、行为和关系的一组对象的描述符。

类是面向对象系统中最重要的构造块。

类图显示了一组类、接口、协作以及他们之间的关系。

在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。

类加上他们之间的关系就构成了类图,类图中还可以包含接口、包等元素,也可以包括对象、链等实例。

接口在类图中通过版型来表示<<interfac e>>,下面的介绍将主要介绍类,接口和类类似。

A. 类的UML表示类的命名尽量应用领域中的术语,应明确、无岐义,以利于相互交流和理解。

类的属性、操作中的可见性使用+、#、-分别表示public、protected、private。

B.类之间的关系类之间的关系是类图中比较复杂的内容。

有关联、聚合、组合、范化、依赖。

关联:是模型元素之间的一种语义联系,是类之间的一种很弱的联系。

关联可以有方向,可以是单向关联,也可以是双向关联。

可以给关联加上关联名来描述关联的作用。

关联两端的类也可以以某种角色参与关联,角色可以具有多重性,表示可以有多少个对象参与关联。

可以通过关联类进一步描述关联的属性、操作以及其他信息。

关联类通过一条虚线与关联连接。

对于关联可以加上一些约束,以加强关联的含义。

如下图所示:聚合是一种特殊的关联,聚合表示整体与部分的关系。

通常在定义一个整体类后,再去分析这个整体类的组成结构。

从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。

例如舰队是由一系列的舰船组成。

需求描述中“包含”、“组成”、“分为….部分”等词常意味着聚合关系。

组合也是一种特殊的关联,也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。

基于UML的关系数据库模型的设计与实现

基于UML的关系数据库模型的设计与实现
维普资讯
第 1 卷 第 4期 8
20 0 7年 8月
中原 工 学 院学 报
J OURNAL OF Z H0NGYUAN UNI VERS TY CHN0L0GY I 0F TE
V o . 8 No. 11 4 Au g。, 007 2
在 为访 问数据 寻 找一 种 合适 的方 法 时 , 这种 不 匹 配就成 了主要 矛盾 : 使用 对象模 型 , 常常通过 对象 之间
的 关 系来 进 行 访 问 , 根 据 关 系 理 论 , 通 过 表 的 连 而 则
接、 行列 的复 制来 实施数 据 的存 取 , 同机制 的结合 需 不 要 一种 映射 方法来 解决该 矛盾 , 从而 获得成 功 的设计 . 1 1 类的 映射 . 类 是 面向对象 系 统组 织 结 构 的核 心 , 识是 被 建 标 模 系统 中的离散概 念 , 一组 具有相 同结构 、 为和关 是 行 系 的对 象 的描 述 符 号 , 映射 主要 包 括 属 性类 型 、 其 属
作 者简 介 : 赵巧 萍 (9 2 , , 北 永 年 人 , 师。 1 7 一) 女 河 讲
维普资讯
第 4期
赵 巧 萍 等 : 于 UML的 关 系 数 据 库 模 型 的 设 计 与 实 现 基
表不 是一一 对应 的关 系 , 映射成 为数据 表 , 的对 象 类 类
使用不 仅 提高 了数据 库设 计 的一 致性 , 而且 优 化 了应
用 的移 植 性 . 1 12 属 性 映 射 为 字段 . .
属性 描 述 了相 同类 中所 有 对 象 的公 共 特性 , 映射 为数据 库表 的字段 , 映射 时需 要注意 的是 : ①增加 新列 O D, 放对 象 标 识 符 , 作 为 主 键 唯一 识 别对 象 ; I 存 并 ② 不是永 久 的类属性 不 需 要 映射 , 如 发 票类 的合计 属 例

UML类图详细教程PPT课件

UML类图详细教程PPT课件
第2页/共109页
二、UML类图中的符号
(一)类
类(Class)在UML中通常以实线矩形框表示,矩形框中含有若干分隔框,分别 包含类的名字、属性、操作、约束以及其他成分等,如下图所示。
类的图形表示和示例
第3页/共109页
在类图中,根据建模的不同景象,类图标中不一定列出全部的内容。如在建立分析 模型或设计模型时,甚至可以只列出类名,在图中着重表达的是类与类之间的联系; 在建立实现 模型时,则应当在类图标中详细给出类的属性和方法等细节。
displays
1
Administrator
OnlineUser
WebSite
use
+ UserName : String = ""
# Password : String = ""
+ Logon() + View()
第44页/共109页
练习: 建模一个类图 在这个练习中,将会从用例图建模一个类图。读者应该遵循前面介绍的步骤来建模
存在,而只是表示类图不需要该细节。
第43页/共109页
最后,为属性和操作提供参数、数据类型和初始值。如下图所示:
Teacher
1 maintains
1..*
ReportCard
+ Generate()
contains
1..*
1
Grades
1..*
generates
+ RecordGrades(in student : String, in assignment : String, in grade : Integer) + UpdateGrades(in student : String, in assignment : String, in grade : Integer) + Distribute() - SaveGrades() - LoadGrade(argname)

uml各种图例及说明

uml各种图例及说明

uml各种图例及说明1、用例图描述角色以及角色与用例之间的连接关系。

说明的是谁要使用系统,以及他们使用该系统可以做些什么。

一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示了这些元素之间的各种关系,如泛化、关联和依赖。

2、类图类图是描述系统中的类,以及各个类之间的关系的静态视图。

能够让我们在正确编写代码以前对系统有一个全面的认识。

类图是一种模型类型,确切的说,是一种静态模型类型。

3、对象图与类图极为相似,它是类图的实例,对象图显示类的多个对象实例,而不是实际的类。

它描述的不是类之间的关系,而是对象之间的关系。

4、活动图描述用例要求所要进行的活动,以及活动间的约束关系,有利于识别并行活动。

能够演示出系统中哪些地方存在功能,以及这些功能和系统中其他组件的功能如何共同满足前面使用用例图建模的商务需求。

5、状态图描述类的对象所有可能的状态,以及事件发生时状态的转移条件。

可以捕获对象、子系统和系统的生命周期。

他们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。

一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定类的行为,以及该行为如何根据当前的状态变化,也可以展示哪些事件将会改变类的对象的状态。

状态图是对类图的补充。

6、序列图(顺序图)序列图是用来显示你的参与者如何以一系列顺序的步骤与系统的对象交互的模型。

顺序图可以用来展示对象之间是如何进行交互的。

顺序图将显示的重点放在消息序列上,即强调消息是如何在对象之间被发送和接收的。

7、协作图和序列图相似,显示对象间的动态合作关系。

可以看成是类图和顺序图的交集,协作图建模对象或者角色,以及它们彼此之间是如何通信的。

如果强调时间和顺序,则使用序列图;如果强调上下级关系,则选择协作图;这两种图合称为交互图。

8、构件图(组件图)描述代码构件的物理结构以及各种构建之间的依赖关系。

软件工程的23种设计模式的UML类图

软件工程的23种设计模式的UML类图

软件工程的23种设计模式的UML类图0 引言谈到设计模式,绝对应该一起来说说重构。

重构给我们带来了什么?除了作为对遗留代码的改进的方法,另一大意义在于,能够让我们在写程序的时候能够不需事先考虑太多的代码组织问题,当然这其中也包含了应用模式的问题。

尽管大多数开发者都已经养成了写代码前先从设计开始的习惯,但是,这种程度的设计,涉及到到大局、到总体架构、到要紧的模块划分我觉得就够了。

换句话说,这时就能写代码了。

这就得益于重构的思想了。

假如没有重构的思想,有希望获得非常高质量的代码,我们就不得不在开始写代码前考虑更多事实上并非非常稳固的代码组织及设计模式的应用问题,那开发效率当然就大打折扣了。

在重构与设计模式的合理应用之下,我们能够相对较早的开始写代码,并在功能尽早实现的同时,不断地通过重构与模式来改善我们的代码质量。

因此,下面的章节中,在谈模式的同时,我也会谈谈关于常用的这些模式的重构成本的懂得。

重构成本越高意味着,在遇到类似的问题情形的时候,我们更应该提早考虑应用对应的设计模式,而重构成本比较低则说明,类似的情形下,完全能够先怎么方便,怎么快怎么写,哪怕代码不是很优雅也没关系,回头再重构也很容易。

1 创建型1.1FactoryMethod思想:Factory Method的要紧思想是使一个类的实例化延迟到其子类。

场景:典型的应用场景如:在某个系统开发的较早阶段,有某些类的实例化过程,实例化方式可能还不是很确定,或者者实际实例化的对象(可能是需要对象的某个子类中的一个)不确定,或者者比较容易变化。

如今,假如直接将实例化过程写在某个函数中,那么通常就是if-else或者select-case代码。

假如,候选项的数目较少、类型基本确定,那么这样的if-else还是能够同意的,一旦情形变得复杂、不确定性增加,更甚至包含这个构造过程的函数所在的类包含几个甚至更多类似的函数时,这样的if-else代码就会变得比较不那么容易保护了。

UML在关系数据库设计中的应用

UML在关系数据库设计中的应用
在需求定义分析和初步设计阶段系统用例图提供了一个简洁的标准的方式去处理和表示信息系统用例图指导下的类图描述系统的静态特征便于应用程序员和数据库开发者相互沟通和理解有助于建立数据库的逻辑模型
维普资讯

4 8・
Co p tr Er m u e a No. 2 0 1 2 06
来构建应用程序, 关系模型则主要针对数据的存储 ; 关系模型 只能够实现现实系统变换结果 , 而对象模型可以实现变换的
过程和结 构过 程。 面向对象设计 的机 制与关系模型的不 同 , 是 造成面 r对象设 计与关系数据 库设计之 间的不匹配 的根 本原 u 】
因 。这 时 , 需要 借助 一种映射方法来 解决矛 盾 。 从而 获得成功
合为信 息系统的成功开发提供 了良好 的保 障。 关键词 :U ML;关系数据库 ;设计 ;映射
2持久对象到数据库的映射策略 0 引 言 在软件密集型系统中, 持久性对象是面向对象研究的一个 面向对象设计基于耦合、 聚合和封装等理 沦, 而关系模型 热点。由于面向对象数据库 (O B O D )以及对象关系数据库 基于数学原理;对象模型侧重于使用包含数据和行为的对象
在业务建模阶段 , 根据业务用例和业务对象模型 , ห้องสมุดไป่ตู้以建
立数据 库的概念模型 , 在该概 念模 型中包含关键 的数据 实体 以 及实体之间的关 系和关键属性 / 候选键 ; 在需求定义 、 分析和初 步设计阶段 , 系统用例 图提供了一个简 洁的 、 标准 的方 式去处
然后可 以创建一个值列表来联 系状 态的编 码 理和表示信息 ,系统用例 图指导下的类 图描述系统 的静态特 上是状态的编码 ; 征, 便于 应用程序员和数据 库开发者相 互沟通和理解 。 有助于 值和实际的状 态值 。
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

UML类图与关系数据库之间的映射策略摘要:UML是目前面向对象程序设计中的一种标准的建模技术。

在关系数据库系统的设计过程中,我们可先利用UML建立商业模型,然后将其映射成表。

本文主要讨论如何将UML 类图中的类映射成表的策略。

关键词:UML 类表关系建模映射一.概论在关系数据库设计中,用来创建数据库逻辑模型的标准方法是使用实体关系模型(ER 模型)。

ER模型的中心思想是:可以仅通过实体和它们之间的关系合理地体现一个组织的数据模型。

但这样做似乎对描述一个组织的信息过于简单化,并且词汇量也远远不足。

所以,迫切需要使用更加灵活、健壮的模型来代替ER模型。

标准建模语言UML是由世界著名的面向对象技术专家发起的,在综合了著名的Booch 方法、OMT方法和OOSE方法的基础上而形成的一种建模技术,它通过用例图、类图、交互图、活动图等模型来描述复杂系统的全貌及其相关部件之间的联系。

UML可以完成ER 模型的所有建模工作,而且可以描述ER模型所不能表示的关系。

在UML中,类图主要用于描述系统中各种类及其对象之间的静态结构。

在关系数据库领域中,类与表相对应。

本文主要讨论将UML类图中的类及其对象映射成关系型数据库中的表的策略。

二.UML类图中的类映射成表的策略UML中的类图主要由类及其关系组成,而类之间的关系又可以细分为:(1)泛化:在UML类图中,如果子类型的接口包括超类型的接口中的每个元素。

则超类与子类之间构成泛化关系。

泛化通常可以用继承或授权的方式实现。

(2)关联:在UML类图中,关联表示类的实例之间存在的某种关系。

它通常可以有1对1、1对多和多对多等情形。

(3)聚集:在UML类图中,聚集描述了部分与整体之间的关系。

(4)组成:在UML类图中,组成由聚集演变而成,它表示一个部分对象仅属于一个整体,并且部分对象通常与整体对象共存亡。

下面结合例子,分别讨论在将类映射成表的过程中这些关系的实现技术。

假设,有一个电脑公司专门从事软件开发,其项目主要由项目开发部门承担,它们之间构成多对多的关联(即一个项目可由多个部门承担,而一个部门又可以承担多个项目的开发工作);项目开发部门由经理及一般职员组成,项目开发部门和组成人员之间构成聚集关系,而人(抽象类)又可以进一步和一般职员及经理两个子类之间构成继承关系;每个项目具有一定的属性,它们之间构成组成关系。

综上所述,其主要关系的UML类图如图1所示。

1.将类图中的属性类型映射成表的域域的使用提高了设计的一致性,且优化了应用的移植性。

简单的域是非常容易实现的,在映射时仅需替换相对应的数据类型和数据尺寸。

但要注意:有时可能要求在域的约束中加入SQL的Check串(如限定域的取值范围等)。

2.将类的属性映射成表的字段一般地,可将类的属性直接映射成表的一个字段,但要注意以下两种特殊情况:(1)并不是类中的所有属性均是永久的。

例如,发票中的“合计”属性可由计算所得而不需保存在数据库中,此时,该类属性(称为派生属性)映射成个0个字段。

(2)一般地,类中的属性是单值的,但如果在类中存在多值属性,则该属性映射成多个字段。

3.将类直接或间接地映射成表。

将UML类图中的类映射成表时,可针对类间的不同关系,采用下面介绍的各种策略。

首先,在关系数据库中,一个关键问题是表主键的唯一性策略的选取。

适当的方案能优化继承、组成等类之间的关系的实现。

为此,可以在处理数据库关系时嵌入对象标识符(OID)的概念,即采用对象标识符OID(对象唯一的标识符)作为相应的数据库中所有表的主键,从而简化了关系数据库的主键方案,使数据库发生更新时,不会出现完整性问题,并且还可以避免在数据库操作时的诸多限制。

但要注意的是,OID不应包含有商业内涵(这一点可能和传统的关系理论相悖),因为任何具有商业意义的字段不在控制范围之内,从而设计者面临值和规划改变的危险。

(1)继承的实现策略一:将整个类层次映射为单个数据库表。

类层次中的所有类映射为单个的数据库表,表中保存所有类(基类、子类)的属性。

例如,图1中人、职员及经理之间的关系的实现如图2所示。

该策略实现简单,支持多态,报表操作实现简单。

但增加了类层次中的耦合,类层次中任何类的属性的增加会导致表的变更;某个子类属性的修改错误会影响到整个层次结构,而不仅仅是该子类。

并且该策略还浪费了大量的数据库空间。

策略二:每个具体子类映射成单个数据库表。

数据库表包括自身的属性和继承的属性,每个具体的子类包含各自的OID。

抽象基类不参与映射,它的所有属性都复制到子类对应的表中。

例如,图1中的人、职员及经理之间的关系可映射成两个表,其中“职员”表包含“职员OID”(主键)、“姓名”和“工作类别”字段;“经理”表包含“经理OID(主键)”、“姓名”和“职位补贴”字段。

该策略由于在表中包含了具体子类的所有信息,所以报表操作实现简单。

但类的修改会导致相对应的表及其子类所对应表的更改;角色的更改会造成ID的重新赋值(因为不同子类的ID可能重复)。

并且该策略还难以在支持多重角色时,保持数据的完整性。

策略三:每个类均映射为数据库表。

为每一个类创建数据库表,表中包含特定于该类的属性和OID。

例如,图1中的人、职员及经理之间的关系可映射成三个表,其中“人”表包含“人OID”(主键)和“姓名”字段;“职员”表包含“人OID”(主键及外键)和“工作类别”字段;“经理”表包含“人OID”(主键及外键)和“职位补贴”字段。

值得注意的是:“人OID”作为所有表的主键。

该策略与面向对象的概念相一致,对多态的支持最好,并且对于对象可能充当的角色仅需要在相应的表中保存记录,易于修改基类和增加新的类。

但由于数据库中存在大量的表,所以访问数据的时间较长,对报表的支持较差(除非定义视图)。

(2)关联的实现在关系数据库中,可通过外键实现类的关联。

外键允许表中的某一行与其它表中的行相关联。

为了下面论述方便,现假定M表示强制(Mandatory),O表示可选(Optional)。

情况一:1对1的关联如果关联是O-M,则可将外键放置在可选的一端,该外键不能为空值;其它1对1的情况外键可放置在任意一边,具体情况依赖于性能等因素。

但要注意的是:对于1对1的情况,不要在两个表中均放置对方的主键。

这样,增加了冗余,并且不会提高性能。

对于关联的强制性,一般在商业规则的对应层实现,而不在物理层中实现。

情况二:1对多的关联将外键放置在“多”的一方。

如果“1”方是可选的,则外键可有空值,以表明“多”方的记录可以独立于“1”方存在;如果1方是强制性的,则外键一定要非空。

情况三:多对多的关联实现多对多关系,通常需要建立一个关联表,并把它与关系两端的表建立联系。

在传统实现中,关联表的属性包含关系中两个表的主键,并且关联表的主键往往是它们的组合。

该实现方法意味两个表的联系是静态的,不能跟踪一方退出某个项目然后又在某个时候加入的情况。

另一种实现方法是将关联表视为普通表,使用自身的主键OID,然后加入实现关系所必需的外键。

例如,“项目”与“项目开发部门”之间的多对多关联可用图3的方式实现。

使用该方法,可保证在物理层中,所有的表具有相同的形式,从而简化了实现,提高了运行时效率。

但要注意的是:一些数据库在连接具有复合外键的表时,性能较差;并且,存在着向关联表中增添字段的可能。

(3)聚集的实现例如,在图1中项目开发部门及人之间的聚集关系的实现如图4所示:图4(4)组成的实现组成的映射和聚集类似,但要注意的是:子表中的外键必须是强制非空的。

三.引用完整性及关系约束检查的策略在UML中,类之间的关系反映了具体的商业规则,因此将类映射到关系数据库时,必须保证类之间关系的正确定义,并确保在数据库中实施对数据的约束。

以下就1对多的情形为例加以说明(1对1关系可以视为特殊的1对多关系;多对多关系则可以分解为两个1对多关系)。

1.父表操作的约束。

将类的关系映射为到关系数据库后,父表在操作上的约束规定如表1。

2.子表操作的约束将类的关系映射为到关系数据库后,子表在操作上的约束规定如表2。

表2施加子表的约束主要是为了防止碎片的产生。

在一些情况下(如在O-M、M-M约束中),一个子女(子表中的记录)只有在当其兄弟存在时才能被删除或修改。

即最后一个存在的子女是不能被删除或修改的。

此时,可以对父记录进行即时的更新。

或者禁止该操作。

而子表约束可以通过在数据库中加入触发器来实现,一个更合理、可行的方法是将对子表方的限制放在业务层中实现。

应用程序执行数据约束有很重要的作用。

在四类约束M-M、M-O、O-M、O-O中,键值的修改可能会改变表之间的关系,而且可能违反一些约束。

违反约束的操作是不允许的。

而前面的规则仅为具体实现提供了可能性。

具体的应用必须根据实际的要求和商业规则进行适当的选择。

但在设计和开发时,必须考虑以上所分析的约束。

目前,面向对象已成为软件开发的主流技术,在一个良好的项目设计中,我们可以先使用面向对象的UML技术建立商业模型,接着引入映射层,对将类设计映射至关系数据库的逻辑进行封装。

通过物理层封装对数据库的访问细节,并为开发者提供简单而又完备的接口,从而使开发者可以运用面向对象的技术解决关系数据库领域中的问题。

参考文献:[1] 《可视化面向对象建模技术》刘超、张莉编著北京航空天大学出版社1999年7月[2] 《Oralce 8 UML 对象建模设计》Paul Dorsey 编著机械工业出版社2000年4月。

相关文档
最新文档