从对象模型到关系模型的映射方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第9卷第12期Vol .9,№12

宜宾学院学报

Journal of Yibin University 2009年12月

Dec .,2009

收稿日期:2009-09-27

基金项目:云南省教育厅科学研究基金项目(C10799);昆明理工大学人才培养基金(2008037)作者简介:谢树云(1976-),男,云南永善人,硕士研究生,讲师,主要从事数据库技术研究.

从对象模型到关系模型的映射方法

谢树云

1,2

,刘晓燕2,黄吉亚

1,2

(1.昭通师范高等专科学校计算机科学系,云南昭通657000;2.昆明理工大学信息工程与自动化学院,云南昆明650051)摘要:围绕实例讨论对象模型转换为关系数据库模型的过程,从类到关系模式的映射、类之间关系的映射、操作映射等方面提出一些有效的转换规则.使用迭代的思想提出应从范式理论、时间与空间平衡、对象模型与关系模型的数据描述差异来优化关系模型.关键词:对象模型;类;关系模型;映射

中图分类号:TP311.132 文献标志码:A 文章编号:1671-5365(2009)12-0062-03

在软件开发领域越来越多的使用了面向对象的方法和面向对象的语言,类(Class )设计成为软件设计的核心,类集成了数据和数据的操作,具有封装、继承、多态等优势.其中一些类对应的数据需要永久存储于磁盘,称之为永久类.相应的数据存储和管理本来是面向对象数据库系统两大类.但是由于面向对象数据库系统目前尚不成熟,更多的时候还是采用了比较成熟的关系数据库系统.目前对这个问题的研究很多,但是都存在一些纰漏,针对这一现实,本文的试图在数据类和关系模式之间找到一种完整有效的映射方法,并与大家商榷.

文中的对象模型UML (Unified Modeling Language,统一建模语言)描述采用Rati onal Rose 的规范.

1 基本概念

对象模型是面向对象分析的内容,按照UML 的规范,对象模型主要采用类图进行描述,通常包括类名、属性、服务三类元素.其中,类名是系统内类的标识,属性是对类的特征的刻画,服务是类提供的操作,很显然,数据对应于属性.类之间的关系主要有继承、聚集、关联等三种.

关系模型是关系数据库系统对数据的组织形式,采用数据库-记录集-记录的三维结构,数据库由一个或者多个记录集(即表)组成,记录集的每一个行称为一条记录,记录一条完整的信息.按照关系数据库设计理论,通常使用关系模式来描述一个记录集,主要定义关系的属性,有时也可以具体到属性的类型.关系模式的规范程度采用范式(Nor mal For ms )来衡量,通常要求达到第三范式.

2 类到关系模式的映射

张念春[1]

讨论了类的基本元素映射、关系映射、操作

映射三个方面的内容.郭鲜凤[2]

认为可以按照关系模型的

要求来建立对象模型,然后将类映射为关系模式,可以分成简单类映射、关系映射(包括关联、聚集、继承)两大类,并提出一个对象类映射为一个关系模式的原则.

上述两位作者提出的方法是可行的,但还存在一些缺陷.满足应用要求的数据库关系模型不但要考虑数据存储的完整,还需要考虑访问时的时间与空间效率,

类之间的关系,以及关系模型与对象模型之间的差异.因此,直接的映射是完全不够的,对映射后关系模式的优化应该是映射过程中的一个重要内容.在这里,可以把整个映射的过程划分为对象模型中类之间关系的分析、类映射为关系模式、关系模式优化、操作映射、关系模式关联等五个步骤.

图1 教务系统对象模型

2.1 类到关系模式的映射

首先要明确,只有永久类需要存储,其他类可以通过永久类生成.主键通常有三个来源:类本身的属性、关联类的主键、继承的属性.

关系模式的约束根据类对数据的要求设计,至少应该有主键约束(包括不重复和不空两个内容).若类没有明确的主键,可以根据需要为关系模式设计主键,比如顺序编号.

以上方法总结为规则1:每个永久类映射为关系模型的一个关系模式.关系模式的属性取永久类的所有属性,并选择可以唯一对应一个对象的属性作为主键,如果没有这种属性,可以填加编号作为主键.

按照这种思想,图1中的学生类可以映射为关系模式:学生(学号,姓名,民族,…),选择学号作为主键.教学计划类可以映射为关系模式:教学计划(专业名称,课程名称,学期,学时,…),可以选择专业名称作为主键.

2.2 类之间的关系到关系模式的映射

类之间的关系在一定程度上影响了对应的关系模型,类之间的基本关系(Relationship)有关联(A ss ociation,包括聚合关联和合成关联)和泛化(Generalizati on,包括继承和图1给出了一个教务系统的对象模型,下文根据这个对象模型讨论相关的映射规则.

统对象模型实现关系)两种,以下分别讨论.

2.2.1 关联关系

两个类之间的关联关系按照重数分成一对一、一对多、多对多三种.一对多关联关系可以采用两种映射方法,通常关联的各个类应分别映射为一个关系模式.但是,一对多关联关系的“一”端是可以被另一端吸收的,所以有的时候会把两个类合并为一个关系模式.一对一关联关系比一对多关联关系简单,按照一对多关联关系的映射方法实现.

按照这种思想,图1中的学生类和学生档案类是一对一的关联关系,可以分别映射为一个关系模式,比如学生档案类映射为关系模式:学生档案(学号,档案编号,存放地点),主键选择学号.也可以把学生类和学生档案类合并为一个关系模式,关系模式的属性取两个类的所有属性,主键选择共同的学号属性.

多对多关联关系通常产生新属性,同时为了保证记录唯一,需要记录这些类实例的关联.这些记录是客观存在的,因此会被表示为两个一对多关联.

在图1中,选课类就是一个关联学生类和学期课程类的关联类.一般映射为:选课(学号,课程,成绩),主键取所关联的类的主键组合而成,属性在主键的基础上加入新产生的属性.

多个类之间的关联也采用关联类实现转换,在图1中,排课类就是多个类之间的关联类.主键取所关联的所有类的主键组合.

以上方法总结为如下三条:

规则2:根据对象独立的思想,一般不合并类,每个类映射为一个关系模式.

规则3:若一个类和多个类关联,则不能合并.

规则4:通常把一个多对多关联转换为两个一对多关联.

2.2.2 泛化关系

泛化关系包括继承关系和实现关系.当子类只继承父类的行为而不继承结构时称为实现.可以认为实现关系是继承关系的特殊情况.方法总结为如下二条.

规则5:如果子类的所有属性和操作均来源于父类,则只需要存储父类.子类继承多个父类按同样的方法处理.

规则6:如果子类定义了新属性或者新操作,则应分别映射为两个关系模式.

根据以上两条规则,图1中的学期课程类完全继承自教学计划类,故不需要映射为关系模式.这一点也印证了前面提出的只需要存储永久类的思想.

2.3 关系模型的优化

根据以上方法,可以把对象模型中的类映射为关系模型中的关系模式,但是,对象模型要强调数据的直观而关系模式要强调运算效率.因此,这种映射是远远不够的,对关系模式的优化十分重要.

关系模型优化的依据主要是范式理论和时间/空间的效率平衡.

2.3.1 范式理论

关系模式必须是规范化的,目前提出的范式有六级,其层次为5NF<4NF

达到更高范式要求的方法是模式分解,即把一个关系模式分解为多个关系模式.

2.3.2 时间/空间的效率平衡

实现时间/空间效率平衡的优化方法有模式分解和允许冗余两种.

在一个关系模式中,可能有些属性访问频率高,有些属性访问频率很低,也可能有些记录访问频率高,有些记录访问频率很低.可以根据访问频率把一个关系模式分解为两至三个关系模式.分别称为水平分解和垂直分解.

学生信息中,在校学生信息和已毕业或者退学学生信息的结构是一样的,但访问频率不一样,通常水平分解为两个关系模式.

在关系模型中,关联的关系模式只要有相同的属性就可以了,但是有些数据由于使用频率高,如果每次都通过运算产生反而降低了时间效率,这种时候允许一定程度的冗余.比如学生姓名可以在多个关系模式中重复.

2.3.3 考虑对象模型与关系模型的差异

对象模型与关系模型都可以描述数据,并且可以直接

36

 第12期 谢树云,刘晓燕,黄吉亚:从对象模型到关系模型的映射方法

相关文档
最新文档