当前位置:文档之家› 对象-关系数据库之间的映射1

对象-关系数据库之间的映射1

对象-关系数据库之间的映射1
对象-关系数据库之间的映射1

对象-关系数据库之间的映射

为什么对象-关系数据库的映射对于现代开发者是一件大事呢?一方面,对象技术(例如 Java 技术)是应用于新软件系统开发的最常见的环境。另外,关系数据库仍然是许多人都青睐的持久信息存储方法,并且在较长时间内这种情况不太会改变。请继续读下去,了解如何使用这种技术。

为什么要写有关对象-关系数据库之间的映射的文章呢?因为在对象范例和关系范例之间“阻抗不匹配”。对象范例基于软件工程的一些原理,例如耦合、聚合和封装,而关系范例则基于数学原理,特别是集合论的原理。两种不同的理论基础导致各自有不同的优缺点。而且,对象范例侧重于从包含数据和行为的对象中构建应用程序,而关系范例则主要针对数据的存储。当为访问而寻找一种合适的方法时,“阻抗不匹配”就成了主要矛盾:使用对象范例,您是通过它们的关系来访问对象,而使用关系范例,则通过复制数据来联接表中的行。这种基本的差异导致两种范例的结合并不理想,不过话说回来,本来就预料到会有一些问题。使对象-关系数据库之间的映射成功的一个秘诀就是理解这两种范例和它们的差异,然后基于这些认识来进行明智的取舍。

本文应该能够消除现今开发周期中一些普遍共有的误解,对对象-关系数据库之间映射所涉及到的一些问题提供了切合实际的看法。这些策略基于我的开发经验,项目范围从小到大,涉及金融、销售、军事、远程通信和外购等行业。我已对使用 C++、 Smalltalk、Visual Basic 和 Java 语言编写的应用程序应用了这些原则。

如何将对象映射成关系数据库

在这一节中,我会描述一些将对象成功映射成关系数据库所需的基本技术。

?将属性映射成列

?在关系数据库中实现继承

?将类映射成表

?映射关联、聚合和组合

?实现关系

将属性映射成列

类属性将映射成关系数据库中的零或几列。要记住,并不是所有属性都是持久的。例如,

Invoice类会有grandTotal属性,这个属性由其实例在计算时使用,但它不保存到数据库中。而且,某些对象属性本身就是对象,例如Course对象有一个作为属性的TextBook实例,它映射为数据库中的几列(实际上,很有可能TextBook类本身就将映射成一个或多个表)。重要的是,这是一个递归定义:有时属性将映射成零或者多列。也有可能将几个属性映射成表中的单一列。例如,代表美国邮递区号代码的类可以有三个数字属性,每个都表示完整邮政编号代码中的每一部分,而邮政编号代码可以在地址表中作为单一的列存储。

在关系数据库中实现继承

在将对象保存到关系数据库中时,继承的概念中发生几个有趣的问题。(请参阅参考资料中的"Building Object Applications That Work"。)问题从根本上归结为解释如何在您的持久模型中组织继承的属性。解决这个难题所用的方法会对系统设计有很大影响。将继承映射到关系数据库中有三种基本解决办法,为更好地理解它们,我将讨论在图 1 中显示的映射类图表的优缺点。为简化问题,我没有为类的所有属性都建模;也没有为其完整签名或任何类方法建模。

图 1. 简单类层次结构的 UML 类示意图

将类映射成表

类到表的映射通常不是直接的。除了非常简单的数据库以外,您不会有类到表的一对一映射。在以下章节中,我将讨论为关系数据库实现继承结构的三种策略:

?整个类层次结构使用一个数据实体

?每个具体类使用一个数据实体

?每个类使用一个数据实体

整个类层次结构使用一个数据实体

使用这种方法,您可以将一个完整类层次结构映射成一个数据实体,而层次结构中所有类的所有属性都存储在这个实体中。图 2 描述了采取这个方法时图 1 的类层次结构的持久模型。请注意,为表的主键引入了一个personOID列 - 我在所有解决方案中都使用 OID (没有商业含义的标识,又称替代键),只是为了保持一致和使用我所知道的向数据实体分配键的最好办法。

图 2. 将类层次结构映射成单一数据实体

这种方法的优点是简单,因为所需的所有人员数据都可以在一张表中找到,所以在人们更改角色时支持多态性,并且使用这种方法,专门报告(为一小组用户特定目的所执行的报告,这些用户通常自己写报告)也非常简单。缺点是每次在类层次结构的任何地方添加一个新属性时都必须将一个新属性添加到表中。这增加了类层次结构中的耦合 - 如果在添加一个属性时有任何错误,除获得新属性的类的子类外,还可能影响到层次结构中的所有类。它还可能浪费数据库中的许多空间。我还必须添加objectType列来表明行代表的是学生、教授还是其它类型的人员。在人们具有单一角色时这种方法很有效,但如果他们有多个角色(例如,一个人既是学生又是教授),很快就会失效。

每个具体类使用一个数据实体

使用这种方法,每个数据实体就既包含属性又包含它所表示的类继承的属性。图 3 描述了采取这个方法时图 1 的类层次结构的持久模型。有与Student类对应的和与Professor类对应的数据实体,因为它们是具体类,但没有与Person类对应的数据实体,因为它是抽象类(它的名称以斜体字表示)。为每个数据实体都分别分配了自己的主键,studentOID和professorOID。

图 3. 将每个具体类映射成单个数据实体

这种方法最大的好处是,它仍然能相当容易地执行专门报告,只要您所需的有关单一类的所有数据都只存储在一张表中。但也有几个缺点。一个是当修改类时,必须修改它的表和它所有子类的表。例如,如果要向Person类添加高度和重量,就需要同时更新两个表,它会涉及很多工作。第二,无论何时,只要对象更改了它的角色 - 可能您聘用了您一个刚毕业的学生作为教授 - 则需要将数据复制到相应的表中,并为它指定一个新的 OID。这又涉及到很多工作。第三,很难在支持多个角色的同时仍维护数据完整性。(这种情况是可能的;只是比原先困难一点。)例如,您会在哪里存储既是学生又是教授的人的姓名呢?

每个类使用一个数据实体

使用这种方法,为每个类创建一张表,它的属性是 OID 和特定于该类的属性。图 4 描述了采取这个方法时图 1 的类层次结构的持久模型。请注意,将personOID用作了所有三个数据实体的主键。图 4 的一个有趣的特性是,为Professor和Student中的personOID列都分配了两个构造型,而这在标准建模语言 (UML) 中是不允许的。我的意见是,这是一个必须由UML 持久性建模概要解决的问题,甚至可能在这个建模规则中也需要更改。(有关持久性模型的详细信息,请参阅参考资料中的 "Towards a UML Profile for a Relational Persistence Model"。)

图 4. 将每个类映射成它自己的数据实体

这种方法的最大好处就是它能够最好地适应面向对象的概念。它能够很好地支持多态性,对于对象可能有的每个角色,只需要在相应的表中保存记录。修改超类和添加新的子类也非常容易,因为您只需要修改或添加一张表。这种方法也有几个缺点。第一,数据库中有大量的表 -- 实际上每类都有一个(加上维护关系的表)。第二,使用这种技术读取和写入数据的时间比较长,因为您必须访问多个表。如果通过将类层次结构中的每个表放入不同物理磁盘驱动器盘片(假设每个磁盘驱动器磁头都单独操作)上来智能地组织数据库的话,就可以缓解这个问题。第三,有关数据库的专门报告很困难,除非添加一些视图来模拟所需的表。

比较映射策略

现在,请注意,每个映射策略怎样产生不同的模型。要理解三种策略之间的设计优缺点,请考虑图 5 中显示的对我们的类层次结构做些简单的更改:添加了TenuredProfessor,这是从Professor中继承的。

图 5. 扩展初始类层次结构

图 6 显示了一个更新过的持久性模型,用于将整个类层次结构映射成一个数据实体。尽管很明显,数据库中的空间浪费增加了,但请注意,按照这种策略操作,只需花非常小的代价就可以更新模型。

图 6. 将扩展的层次结构映射成单一数据实体

图 7 显示了将每个具体类映射成数据实体时的持久性模型。使用这个策略,虽然因为我们从教授提升到终身教授,这样对象和我们的关系就有了改变(学生变成教授),所以如何处理对象的这个问题更复杂了,但我只需要添加一个新表。

图 7. 将扩展的层次结构的具体类映射成数据实体

图 8 显示了第三种映射策略的解决方案 -- 将单个类映射成单个数据实体。这需要我添加一个只包括TenuredProfessor类的新属性的新表。这种方法的缺点是,要使用新类的实例,它需要好几个数据库访问。

图 8. 将扩展的层次结构的所有类映射成数据实体

要摒弃这样一种观点,即这些办法都不够好;每种办法都有其优缺点。在下面的表 1 中对它们进行比较。

表 1. 比较映射继承的各种办法

映射关联、聚合和组成

不仅必须将对象映射到数据库中,还必须将对象之间的关系进行映射,这样才能在以后进行恢复。对象之间有四种类型的关系:继承、关联、聚合和组成。要有效地映射这些关系,必须理解它们之间的差异、如何实现一般的关系,以及如何实现特定的多对多关系。

关联、聚合和组合之间的差异

从数据库的角度看,关联和聚合/组合关系之间的唯一不同是对象相互之间的绑定程度。对于聚合和组合,在数据库中对整体所做的操作通常需要同时对部分进行操作,而关联就不是这样。

在图 9 中有三个类,其中两个在它们之间有简单的关联关系,有两个共享聚合关系(实际上,组合可能是这种模型中更确切的说法)。(有关关系的详细信息,请参阅参考资料中的 "Building Object Applications That Work"。)从数据库的观点看,聚合/组合和关联是不同的,在聚合情况下,在整体中读取时,您通常希望在部分中读取,而在关联情况下,需要执行什么操作并不总是那么明显。在将对象保存到数据库中或从数据库中删除对象也存在相同的情况。当然,上述讨论通常特定于商业领域,但这种经验之谈往往在很多情况下出现。

图 9. 关联和聚合/组合之间的差异

在关系数据库中实现关系

关系数据库中的关系是通过使用外键来维护的。外键是在一张表中出现的一个或多个数据属性;它可以是另一张表的键的一部分,或者干脆碰巧就是另一张表的键。外键可以让您将一张表中的一行与另一张表中的一行相关起来。要实现一对一和一对多的关系,您只需要将一张表的键包括在另一张表中。

在图 10 中有三张表,它们的键 (OID) 和外键用于在它们之间实现关系。首先,在Position 和Employee数据实体间有一个一对一的关联。一对一关联就是它的每个复合度的最大值都是1 的这么一种关系。要实现这个关系,我在Employee数据实体中使用属性positionOID,Position数据实体的键。因为关联是单向的 -- employee 那些行知道它们的位置行,但反过来就不行 -- 所以我必须这么做。如果这是个双向的关联,我还会在Position中添加一个名

为employeeOID的外键。然后,使用相同的方法在Employee和Task之间实现了多对一关联(又称为一对多关联),唯一的不同是将外键放在了Task中,因为它在关系的“多”方。

图 10. 简单人力资源数据库的持久性模型。

实现多对多关联

要实现多对多关系,需要关联表的概念,它是一种数据实体,唯一目标是在关系数据库中维护两个或多个表之间的关联。图 10 中,在Employee和Benefit之间有一个多对多关系。图 11 中,可以看到如何使用关联表来实现多对多关系。在关系数据库中,关联表中包含的属性传统上是关系中涉及到的表中的键组合。关联表的名称通常是它所关联的表的名称组合,或者是它实现的关联的名称。在这种情况下,我选择EmployeeBenefit而不是BenefitEmployee和has,因为我觉得它可以更好地反映关联的性质。

图 11. 在关系数据库中实现多对多关系

看一下图 11 中应用程序的复合度。规则是,一旦引入了关联表,复合度就“交叉”,如图 12 所示。值为 '1' 的复合度总在外边缘引入,如图 11 和 12 中所示,以保留原始关联的整体复合度。原始的关联表明雇员有一种或多种福利,并且任何给定的福利都给予一个或多个雇员。在图11 中您可以看到,即使在有关联表维护关联的情况下仍然是这种情况。

图 12. 关联表简介

有必要注明我选择应用构造型“<<关联表>>”而不是关联类的说明 -- 将关联类与它所描述的关联连接的虚线行 -- 出于两个原因。首先,关联表的目的是实现关联,而关联类的目的是描述关联。其次,图 11 中采取的方法反映了为使用关系技术所需的实际实现策略。

结束语

在本文中,探索了对象-关系数据库之间的映射的基础。如果按照本文中描述的步骤操作,就可能方便地将对象成功存储在关系数据库中。如果有任何问题,请发电子邮件给我,地址是scott.ambler@https://www.doczj.com/doc/ac14306301.html,,如果有兴趣对持久性模型的 UML 概要提供建议,请放在关于持久性模型概要开发的工作页面上就可以了。

参考资料

?Building Object Applications That Work: Your Step-By-Step Handbook for Developing Robust Systems with Object Technology by Scott W. Ambler (New

York:SIGS Books/Cambridge University Press)

?Process Patterns: Building Large-Scale Systems Using Object Technology by Scott W. Ambler (New York:SIGS Books/Cambridge University Press) ?The Object Primer 2nd Edition -- The Application Developer's Guide to Object-Orientation by Scott W. Ambler (New York:Cambridge University Press) ?Scott W. Ambler 的过程模式资源页面

?Scott W. Ambler 的“增强标准过程”

?Scott W. Ambler 的Towards a UML Profile for a Relational Persistence Model: Working Page。

浅谈对的理解对象—关系型数据库

浅谈对对象—关系型数据库的理解 姓名:杨小敏 学号:2010206190026

针对对象—关系型数据库的理解我想结合自己的专业(地图学与地理信息系统)从下面三个方面来理解:(1)关系型数据的发展以及在空间数据管理方面的优缺点(2)面向对象数据库的发展及在空间数据管理方面的优缺点(3)关系型数据库和面向对象技术的融合在数据库发展中所起到的独特作用在我们GIS专业领域内,随着信息技术的发展,各种应用系统建设的不断深入,像现在面向21世纪的应急应用系统的建设、城市基础地理空间信息数据库系统与共享平台的建设、地理信息公共服务平台的建设,小到“数字城市”的建设,大到“数字地球”乃至“智慧地球”的建设,我们已经开始不满足数值和文字的信息处理,为了达到系统建设平台尤其是公共服务平台的建设起到良好的客户友好体验,大量的图形信息,音频信息已经深入到数据库的设计中,其中尤其是空间数据库管理备受瞩目。所以,面对信息爆炸的21世纪,海量数据的存储和管路已经不是传统的数据库能解决的,空间数据管理需要更强的数据库——对象关系型数据库。 为什么空间数据需要对象关系型数据库的管理才更有效?我想简单的说一下GIS空间数据的基本特征:(1)空间特征:每个空间对象都具有空间坐标,所以在存储空间数据的同时我们要考虑数据的空间分布特征;(2)非结构化特征:通用数据库或者是传统数据库数据记录一般是结构化的,在面对空间图形信息的时候难以直接采用关系数据管理系统;(3)空间关系特征:空间数据的空间关系最重要的就是空间拓扑关系,这种拓扑结构方便了空间数据的查询和空间分析,但是给空间数据的一致性和完整性的维护增加了复杂性;(4)海量数据的特征:数据库在面对海量数据的存储和组织时,一般在二维空间上划分块或图幅,在垂直的方向上划分层在组织海量空间数据。 在空间数据的管理技术的发展中,从手工管理管理阶段到文件管理阶段再到数据库管理阶段,在三个数据管理阶段,对数据管理方式也不尽相同,在这里,我想说的是空间数据库的发展历史对空间数据管理的影响,第一是层次关系型数据库:只是数据库发展的初级阶段,这是空间数据的管理大多用文件方式管理,很显然不适合管理海量的空间数据,所以淘汰;第二是网络关系型数据库:在一定程度上解决了空间数据复杂管理的难题,但还是被日益崛起的关系型数据库所淘汰;第三是关系型数据库的发展:为了解决难于保证数据的完整性,开始将空

数据库系统原理课后答案 第九章

9.1 名词解释 (1)OODBS:是指面向对象数据库系统,它既具数据库管理的基本功能,又能支持面向对象的数据模型。 (2)ORDBS:基于对象关系数据模型的DBS称为对象关系数据库系统(ORDBS)。 (3)平面关系模型:传统的关系模型称为“平面关系模型”,它要求关系模式具有第一范式(1NF)性质,关系具有规范化的结构。也就是规定属性值是不可分解的,即不允许属性值具有复合结构(元组或关系)。 (4)嵌套关系模型:是从平面关系模型发展而成的。它允许关系的属性值又可以是一个关系,而且可以出现多次嵌套。嵌套关系突破了1NF的定义框架,是“非1NF关系”。 (5)复合对象模型:在嵌套关系模型上进一步放宽要求。在关系定义上,集合与元组不再有交替出现的严格限制,此时的关系中,属性类型可以是基本数据类型、结构类型(元组类型)或集体类型(即关系类型)。 (6)数据的泛化/细化:是对概念之间联系进行抽象的一种方法。当在较低层上的抽象表达了 与之联系的较高层上抽象的特殊情况时,就称较高层上抽象是较低层上抽象的"泛化",而较低层上抽象是较高层上抽象的"细化"。 (7)对象关系模型:在传统关系数据基础上,提供元组、数组、集合等更为丰富的数据类型及处理新数据类型操作的能力而形成的数据模型。(注:传统关系模型只支持字符、数值、字串,布尔值等等基本数据类型及其处理功能) (8)类型级继承性:当继承性发生在类型级时,子类型继承了超类型的属性。也就是说,超类型所具有的属性,在子类上也具有。 (9)表级继承性:继承性也可发生在表级,(就是元组集合上发生继承),子表继承超表全部属性,超表中每个元组最多可以与子表中一个元组对应,而子表中的每个元组在超表中恰有一个元组对应,并在继承的属性值上具有相同的值。 (10)引用类型:数据类型可以嵌套定义,在嵌套引用时,不是引用对象本身,而是个用对象标识符(即指针),这种指针被称为引用类型。 (11)对象:客观世界中的实体经过抽象称为问题空间中的对象,它是对一组信息及其操作的描述。 (12)类:是具有相同的变量名和类型、相同的消息和使用方法的对象的集合。 (13)单重继承性:一个子类继承某一个超类的结构和特性,称为单重继承性。 (14)多重继承性:一个子类继承多个超类的结构和特性,称为多重继承性。 (15)对象标识:在面向对象语言中,对象标识是一个指针一级的概念,在对象创建的瞬间,由系统赋给每个对象一个“标识”,即系统内的一个唯一的指针,在对象生存期内,这个标识不可改变。 (16)对象包含:不同类的对象之间存在的包含关系称为对象包含。包含是一种“一部分”(is part of)的联系。 (17)类继承层次图:表示类继承关系的图,由超类名、子类名和一组线条自上而下有序的表示。(18)类包含层次图:表示对象包含关系的图,由一些具有包含关系的对象和线条自上而下表示(下方的对象为其连线所指上方对象的一部分)。 (19)持久数据:是指创建这些数据的程序运行终止后数据依然存在于系统之中。数据库中的关系就是持久数据。 (20)持久对象:程序运行结束后,被保留下来的对象称为持久对象。 (21)持久指针:持久指针可看作是数据库中指向对象的指针。持久化指针不像内存中的指针,它在程序执行后及数据重组后仍保持有效。 (22)持久化C++系统: 基于C++的持久化扩充的OODBS。

面向对象的数据库技术

面向对象的数据库技术 肖阳辉 摘要:面向对象的数据库极有可能是数据库发展的方向,关系型数据库已显得力不从心,面向对象技术已经渗透到了数据库领域,把面向对象的方法和数据库技术结合起来可以使数据库系统的分析、设计最大程度地与人们对客观世界的认识相一致。面向对象数据库的技术机理并不高深,但它的设计思想却极有价值。论文关键词:关,键,词,数据库,面向对象,技术 随着应用的日趋复杂和智能化,传统的关系数据库的缺点一点点的暴露出来,人们迫切希望产生一种新的数据库解决方案来适应这些复杂需求。一种新的解决方案呼之欲出。而这个解决方案极有可能就是面向对象数据库技术。面向对象数据库的技术机理并不高深,但它的设计思想却极有价值。在传统的面向对象应用开发中,由于传统的关系数据库开发风格完全不同于面向对象风格,使得许多程序员难以从复杂的SQL编程中解脱出来(尽管已经有一些成熟的ORM技术框架,如Hibernate,但程序员仍需要做大量的数据库代码工作),从而也无法从实质上提高工作效率。 1、面向对象数据库技术概述 面向对象是当前计算机界关心的重点,面向对象是一种新的方法学,也是一种认知方法学。它是一种支持模块化设计和软件重用的实际可行的编程方法,它把程序间的逻辑活动建立在对象间的消息传递之上,且设计上更加符合现实世界,更加自然,所以面向对象方法得到了更广泛的应用。 面向对象数据库系统是为了满足新的数据库应用需要而产生的新一代数据库系统。在数据库中提供面向对象的技术是为了满足特定应用的需要。随着许多基本设计应用(如MACD和ECAD)中的数据库向面向对象数据库的过渡,面向对象思想也逐渐延伸到其它涉及复杂数据的应用中,其中包括辅助软件工程(CASE)、计算机辅助印刷(CAP)和材料需求计划(MRP)。这些应用如同设计应用一样在程序设计方面和数据类型方面都是数据密集型的,它们需要识别于类型关系的存储技术,并能对相近数据备份进行调整。 还有许多应用要求多媒体数据库。它们要求以集成方式和文本或图形信息一起处理关系数据,这些应用包括高级办公室系统的其它文档管理系统。 面向对象数据库从面向程序设计语言的扩充着手使之成为基于面向对象程序设计语言的面向对象数据库。例如:ONTOS、ORION等,它们均是C++的扩充,熟悉C++的人均能很方便地掌握并使用这类系统。 面向对象数据库研究的另一个进展是在现有关系数据库中加入许多纯面向对象数据库的功能。在商业应用中对关系模型的面向对象扩展着重于性能优化,处理各种环境的对象的物理表示的优化和增加SQL模型以赋予面向对象特征。如UNISQL、O2等,它们均具有关系数据库的基本功能,采用类似于SQL的语言,用户很容易掌握。 2.面向对象数据库的优点 面向对象数据库是数据库技术与面向对象程序设计方法相结合的产物,由于同是面向对象方法学,所以其具有了所有面向对象的优点。同时,由于数据库主要操作的是集合(而不是单个数据),所以其又具有自身的特点和优点。 (1)提高数据库开发效率

对象关系模型数据库解析

面向对象数据库系统(Object Oriented Data Base System,简称OODBS)是数据库技术与面向对象程序设计方法相结合的产物。 对于OO数据模型和面向对象数据库系统的研究主要体现在:研究以关系数据库和SQL为基础的扩展关系模型;以面向对象的程序设计语言为基础,研究持久的程序设计语言,支持OO模型;建立新的面向对象数据库系统,支持OO数据模型。 面向对象程序设计方法是一种支持模块化设计和软件重用的实际可行的编程方法。它把程序设计的主要活动集中在建立对象和对象之间的联系(或通信)上,从而完成所需要的计算。一个面向对象的程序就是相互联系(或通信)的对象集合。面向对象程序设计的基本思想是封装和可扩展性。 面向对象数据库系统支持面向对象数据模型(以下简称OO模型)。即面向对象数据库系统是一个持久的、可共享的对象库的存储和管理者;而一个对象库是由一个OO模型所定义的对象的集合体。 一个OO模型是用面向对象观点来描述现实世界实体(对象)的逻辑组织、对象间限制、联系等的模型。一系列面向对象核心概念构成了OO模型的基础。概括起来,OO模型的核心概念有如下一些: (1)对象(Object)与对象标识OID(Object IDentifier) 现实世界的任一实体都被统一地模型化为一个对象,每个对象有一个唯一的标识,称为对象标识(OID)。 (2)封装(Encapsulation) 每一个对象是其状态与行为的封装,其中状态是该对象一系列属性(Attribute)值的集合,而行为是在对象状态上操作的集合,操作也称为方法(Method)。 (3)类(C1ass) 共享同样属性和方法集的所有对象构成了一个对象类(简称类),一个对象是某一类的一个实例(instance)。 (4)类层次(结构) 在一个面向对象数据库模式中,可以定义一个类(如C1)的子类(如C2),类Cl 称为类C2的超类(或父类)。子类(如C2)还可以再定义子类(如C3)。这样,面向对象数据库模式的一组类形成一个有限的层次结构,称为类层次。 (5)消息(Message) 由于对象是封装的,对象与外部的通信一般只能通过显式的消息传递,即消息从外部传送给对象,存取和调用对象中的属性和方法,在内部执行所要求的操作,操作的结果仍以消息的形式返回。 OODB语言用于描述面向对象数据库模式,说明并操纵类定义与对象实例。OODB语言主要包括对象定义语言(ODL)和对象操纵语言(OML),对象操纵语言中一个重要子集是对象查询语言(OQL)。OODB语言一般应具备下述功能: (1)类的定义与操纵 面向对象数据库语言可以操纵类,包括定义、生成、存取、修改与撤销类。其中类的定义包括定义类的属性、操作特征、继承性与约束等。 (2)操作/方法的定义 面向对象数据库语言可用于对象操作/方法的定义与实现。在操作实现中,语言的命令

数据库题作业

数据库原理及应用作业 班级:学号:姓名: 第一章 一、单项选择题 1. 在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。在这几个阶段中,数据独立性最高的是()阶段。 A. 数据库系统 B. 文件系统 C. 人工管理 D.数据项管理 2. 数据库系统与文件系统的主要区别是()。 A. 数据库系统复杂,而文件系统简单 B. 文件系统不能解决数据冗余和数据独立性问题,而数据库系统可以解决 C. 文件系统只能管理程序文件,而数据库系统能够管理各种类型的文件 D. 文件系统管理的数据量较少,而数据库系统可以管理庞大的数据量 3. 在数据库中存储的是()。 A. 数据 B. 数据模型 C. 数据及数据之间的联系 D. 信息 4. 数据库的特点之一是数据的共享,严格地讲,这里的数据共享是指()。 A. 同一个应用中的多个程序共享一个数据集合 B. 多个用户、同一种语言共享数据 C. 多个用户共享一个数据文件 D. 多种应用、多种语言、多个用户相互覆盖地使用数据集合 5. 数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)三者之间的关系是()。 A. DBS包括DB和DBMS B. DBMS包括DB和DBS C. DB包括DBS和DBMS D. DBS就是DB,也就是DBMS 6. 数据库管理系统(DBMS)是()。 A. 一个完整的数据库应用系统 B. 一组硬件 C. 一组系统软件 D. 既有硬件,也有软件 7. 数据库是在计算机系统中按照一定的数据模型组织、存储和应用的()。 A. 文件的集合 B. 数据的集合 C. 命令的集合 D. 程序的集合 8. 支持数据库各种操作的软件系统是()。 A. 命令系统 B. 数据库管理系统 C. 数据库系统 D. 操作系统 9. 由计算机硬件、DBMS、数据库、应用程序及用户等组成的一个整体叫()。 A. 文件系统 B. 数据库系统 C. 软件系统 D. 数据库管理系统 10. 数据库系统中应用程序与数据库的接口是()。 A. 数据库集合 B. 数据库管理系统DBMS C. 操作系统OS D. 计算机中的存储介质 11. 在DBS中,DBMS和OS之间关系是()。 A. 并发运行 B. 相互调用 C. OS调用DBMS D. DBMS调用OS 12. 在数据库方式下,信息处理中占据中心位置的是()。

关系映射annotation

一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上 添加唯一约束)。 1.共享主键的一对一关联映射: @Entity @Table(name="Test_Body") public class Body { private Integer id; private Heart heart; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @OneToOne @PrimaryKeyJoinColumn public Heart getHeart() { return heart; }

public void setHeart(Heart heart) { this.heart = heart; } } @Entity @Table(name="Test_Heart") public class Heart { private Integer id; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } } 通过@PrimaryKeyJoinColumn批注定义了一对一关联 2.使用外键进行实体一对一关联: @Entity @Table(name="Test_Trousers") public class Trousers { @Id public Integer id;

关系与映射学习指导重点

关系与映射学习指导 学习目标 理解笛卡尔积、二元关系、运算关系等概念,理解映射、满射、单射、双射等概念,理解有关定理,掌握有关定理的证明方法和有关的例题的处理方法。 内容提要 (一) 笛卡尔积: A ×B ={(a ,b )|a ∈A , b ∈B },注意(a ,b )为有次序的元素偶. 从集合A 到B 中的关系: A ×B 中的每一子集R 称为从A 到B 中的关系. 若(a ,b )∈R ,则称a 与b 是R -相关的,记作aRb . 关系R 的定义域: Dom (R )={a |存在b ∈B ,使aRb }(?A ). 关系R 的值域: Ran (R )={ b |存在a ∈A ,使aRb }(?B ). 关系R 的象集: R (A ~)={b |存在a ∈A ~,使得aRb }(?B ). 其中集合A ~ ?A . 关系R 的逆: 设R ?A ×B ,则B ×A 的子集1 -R ={(b ,a )|aRb }称为R 的逆. 关系的复合: S R ={(a ,c )|存在b ∈B ,使得aRb ,bSc },其中R ?A ×B ,S ?B ×C . 设A ,B ,C ,D 为集合;R ?A ×B ,S ?B ×C ,T ?C ×D ,则有关系的逆与复合运算满足: (1) 1 1)(--R =R ; (2) 1 )(-R S =1 -R 1 -S ; (3) T (S R )=(T S ) R . (二) 映射: F ∶X →Y ,即?x ∈X ,有唯一y ∈Y ,使得xFy . 映射F 的象: y =F (x ),即对于每一x ∈X ,使得xFy 成立的y . 映射F 的原象: )(1 y F -,即对于y ∈Y ,使得xFy 成立的x (x ∈X ). 映射的复合: (G F )(x )=G (F (x )),其中F ∶X →Y ,G ∶Y →Z . 满射: 若f (X )=Y ,则称f 为从X 到Y 上的满射. 单射: 若?1x ,2x ∈X , 1x ≠2x ,有f (1x )≠f (2x ),则称f 为从X 到Y 上的单射. 双射: 若f 即是单射又是满射的. 逆映射: 由y =f (x )确定的从Y 到X 的映射1 -f :Y →X ,其中f ∶X →Y 是双射. 1: 设f ∶X →Y ,A ,B ?Y ,则逆映射1 -f 满足 (1)1-f (A ∪B )=1-f (A )∪1-f (B ); (2)1-f (A ∩B )=1 -f (A )∩1 -f (B ); (3)1 -f (A -B )=1 -f (A )-1 -f (B ). 结论2: 设f ∶X →Y (1) 若f 是单射,则对于X 的任意子集A ,有1 -f (f (A ))=A . (2) 若f 是满射,则对于Y 的任意子集B ,有f (1 -f (B ))=B . (三) 运算 运算: 映射f : A ×B →C 是一个从A ×B 到C 中的运算.特别的,映射f : A ×A →A 是A 上的一个运算,并且称运算f 在A 上封闭. 若f (a ,b )=f (b ,a ), 则称运算f 满足交换律;若f (f (a ,b ),c )=f (a ,f (b ,c )), 则称运算f 满足结合律. f 的右零元e : ?a ∈A , 使f (a ,e )= a ; f 的左零元e : ?a ∈A , 使f (e ,a )= a ; f 的零元e : 既是f 的左零元,又是f 的右零元.

必修1映射经典习题(含答案)

映射例题答案: 例1、在下列对应中、哪些是映射、那些映射是函数、那些不是?为什么? 设A={1,2,3,4},B={3,5,7,9},对应关系是f(x)=2x+1,x属于A 设A={1,4,9},B+{-1,1,-2,2,-3,3}对应关系是‘A中的元素开平方’ 设A=R,B=R,对应关系是f(x)=x的3次方,x属于A 设A=R,B=R,对应关系是f(x)=2x的2次方+1,x属于A 解析:1、是一一映射,且是函数 2、不是映射(象是有且唯一) 3、是一一映射,且是函数 4、是映射,但不是函数,因为B中不是所有值在A中都有对应。 例2、设A={a,b,c},B={0,1},请写出两个从A到B的映射 从A到B的映射共有2^3=8个: (a,b,c)→(0,0,0); (a,b,c)→(0,0,1); (a,b,c)→(0,1,0); (a,b,c)→(1,0,0); (a,b,c)→(0,1,1); (a,b,c)→(1,0,1); (a,b,c)→(1,1,0); (a,b,c)→(1,1,1)。 例3、假设集合m={0 -1 1} n={-2 -1 0 1 2} 映射f:M→N 满足条件“对任意的x属于M ,x+f(x) 是奇数”,这样的映射有____个 ①当x=-1时,x+f(x)=-1+f(-1)恒为奇数,相当于题目中的限制条件“使对任意的x属于M,都有x+f(x)是奇数” f(-1)=-2,0,2 ②当x=0时,x+f(x)=f(0),根据题目中的限制条件“使对任意的x属于M,都有x+f(x)是奇数”可知f(0)只能等于-1和1 ③当x=1时,x+f(x)=1+f(1)恒为奇数 f(1)=-2,0,2 综上①②③可知,只有第②种情况有限制,所以这样的映射共有3×2×3=18个 例4、设集合A={-1,0,1} B={2,3,4,5,6 } 从A到B的映射 f满足条件:对每个X∈A 有 f(X)+X为偶数那么这样的映射f的个数是多少?

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

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 设集合A = {1, 2, 3, 4}上的二元关系R = {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)},S = {(1, 3), (2, 2), (3, 2), (4, 4)},用定义求11112,,,,,----R S S R R S R R S . [思路] 求复合关系R S ,就是要分别将R 中有序对(a , b )的第2个元素b 与S 中的每个有序对(c , d )的第1个元素进行比较,若它们相同(即b =c ),则可组成R S 中的1个元素(a , d ),否则不能. 幂关系的求法与复合关系类似. 求关系R 的逆关系,只要把R 中的每个有序对的两个元素交换位置,就能得到1-R 中的所有有序对. 解 R S = {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)} {(1, 3), (2, 2), (3, 2), (4, 4)} = {(1, 3), (1, 2), (2, 4), (3, 3), (3, 2)} S R ={(1, 3), (2, 2), (3, 2), (4, 4)} {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)} ={(1, 1), (1, 3), (2, 4), (3, 4)} 2R =R R = {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)} {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)} ={(1, 1), (1, 2), (1, 4), (3, 1), (3, 2), (3, 3)} 1-R ={(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)}1- ={(1, 1), (1, 3), (2, 1), (3, 3), (4, 2)} 1-S ={(1, 3), (2, 2), (3, 2), (4, 4)}1- = {(2, 2), (2, 3), (3, 1), (4, 4)} 1-S 1-R ={(1, 1), (1, 3), (2, 1), (3, 3), (4, 2)} {(2, 2), (2, 3), (3, 1), (4, 4)} ={(1, 1), (3, 1), (4, 2), (4, 3)} 注:由例1可知,关系的复合运算不满足交换率,即R S ≠S R . 例2 对于以下给定的集合A 、B 和关系f ,判断是否构成映射f :B A →. 如果是,试说明f :B A →是否为单射、满射或双射的. (1)A ={1, 2, 3, 4, 5},B ={6, 7, 8, 9, 10},f ={(1, 8), (3, 9), (4, 10), (2, 6), (5, 9)}; (2)A ={1, 2, 3, 4, 5},B ={6, 7, 8, 9, 10},f ={(1, 7), (2, 6), (4, 5), (1, 9), (5, 10)};

映射详解(经典)

课题:§1.2.2映射 教学目的:(1)了解映射的概念及表示方法,了解象、原象的概念; (2)结合简单的对应图示,了解一一映射的概念. 教学重点:映射的概念. 教学难点:映射的概念. 教学过程: 一、引入课题 复习初中已经遇到过的对应: 1.对于任何一个实数a,数轴上都有唯一的点P和它对应; 2.对于坐标平面内任何一个点A,都有唯一的有序实数对(x,y)和它对应; 3.对于任意一个三角形,都有唯一确定的面积和它对应; 4.某影院的某场电影的每一张电影票有唯一确定的座位与它对应; 5.函数的概念. 二、新课教学 1.我们已经知道,函数是建立在两个非空数集间的一种对应,若将其中的条件“非空数集”弱化为“任意两个非空集合”,按照某种法则可以建立起更为普通的元素之间的对应关系,这种的对应就叫映射(mapping)(板书课题). 2.先看几个例子,两个集合A、B的元素之间的一些对应关系 (1)开平方; (2)求正弦 (3)求平方; (4)乘以2; 3.什么叫做映射? 一般地,设A、B是两个非空的集合,如果按某一个确定的对应法则f,使对于集合A中的任意一个元素x,在集合B中都有唯一确定的元素y与之对应,那么就称对应f:A→B为从集合A到集合B的一个映射(mapping). 记作“f:A→B” 说明: (1)这两个集合有先后顺序,A到B的射与B到A的映射是截然不同的.其

中f表示具体的对应法则,可以用汉字叙述. (2)“都有唯一”什么意思? 包含两层意思:一是必有一个;二是只有一个,也就是说有且只有一个的意思。4.例题分析:下列哪些对应是从集合A到集合B的映射? (1)A={P | P是数轴上的点},B=R,对应关系f:数轴上的点与它所代表的实数对应; (2)A={ P | P是平面直角体系中的点},B={(x,y)| x∈R,y∈R},对应关系f:平面直角体系中的点与它的坐标对应; (3)A={三角形},B={x | x是圆},对应关系f:每一个三角形都对应它的内切圆; (4)A={x | x是新华中学的班级},B={x | x是新华中学的学生},对应关系f:每一个班级都对应班里的学生. 思考: 将(3)中的对应关系f改为:每一个圆都对应它的内接三角形;(4)中的对应关系f改为:每一个学生都对应他的班级,那么对应f:B A是从集合B到集合A的映射吗? 5.完成课本练习 三、作业布置 补充习题

数据库系统概论试题及答案1234

一、单选题(每题2分,共20分) 1、在数据库系统的三级模式结构中,用来描述数据的全局逻辑结构的是() (1)子模式 (2)用户模式(3)模式(4)存储模式 2、在下列实体类型的联系中,一对多联系的是(2) (1)学校与课程的学习联系 (2)父亲与孩子的父子关系 (3)省与省会的关系(4)顾客与商品的购买关系 3、在关系模型中,实现关系中不允许出现相同的元组的约束是通过(2) (1)侯选键 (2)主键(3)外键 (4)超键 4、下列哪种运算不属于关系代数的基本运算(1) (1)连接 (2)笛卡尔积 (3) 相减 (4) 投影 5、在SQL中,可以用谓词EXISTS来测试一个集合中是否(4) (1)有相同元组存在 (2)为空集合(3) 有相同分量存在 (4) 为非空集合 6、设有关系r如图所示,则该关系最高为哪一级范式(3) A B C D (1) 1NF (2)2NF (3)3NF (4)BCNF A1 b1 c1 d2 A1 b2 c2 d4 A2 b1 c2 d1 A1 b3 c1 d4 7、设已经F={C->A,CG->D,CG->B,CE->A,ACD->B},从中去掉哪些函数依赖关系后得到的新的函数依赖集合F1与F等价的是(4) (1)C->A和CG->B (2) C->A 和ACD->B (3)CE->A 和ACD->B (4)CE->A和CG->B 8、ER图是一种直观表示何种模型的工具(3) (1)结构数据模型(2)关系数据模型 (3) 概念数据模型 (4)层次和网状模型 9、约束”年龄限制在18—30岁之间”属于DBMS的哪种功能(2) (1)安全性(2)完整性(3)并发控制(4)恢复 10、在对象联系图中,双线箭头表示对象间的(3) (1)函数值为多值 (2)属性值为多值 (3)泛化/细化联系(4)对象之间包含联系 二、判断题(每题2分,共10分) 1、对一个客观事物,可以用多种数据模型来描述(对) 2、设R、S是任意两个同类关系,U是R的关系框架中所有属性的集合,属性集A 3、数据库事务的原子性是指事物在执行过程中不能出现

各种关系及对应的关联词

(一)并列关系 几个分句分别叙说有关联地几件事情、几种情况,或者说明同一事物地几个方面.分句间地关系是平列地,或者是相对待地.常用地关联词语是:资料个人收集整理,勿做商业用途 也,又,还,同时, 同样 既……也(又)也……也又……又一方面……(另)一方面 一边……一边有时……有时一会儿……一会儿 不是……而是是……不是 ①它既不需要谁来施肥,也不需要谁来灌溉. ②小刘一面擦汗,一面反驳. ③这武器不是机关枪,而是马克思列宁主义. (二)承接关系 几个分句按顺序叙述连续发生地动作或相关地事情.常用地关联词语是: 就、便、又、才、于是、然后、 接着、跟着、终于 首先……然后起先……后来 ①孔乙己知道自己不能和他们谈天,便只好向孩子们说话. ②文章必须不断修改,然后拿去发表. ③我先是诧异,接着是很不安. (三)选择关系 几个分句说明可供选择地事项;或者说出选定地一种,舍弃另一种.常用地关联词语是: 或或是或者或者……或者是……还是 不是……就是要么(要就是)……要么(要就是) 与其……不如(无宁) 宁可……也不 ①人地死,或重于泰山,或轻于鸿毛. ②不是在沉默中爆发,就是在沉默中死亡. ③文章与其长而空,倒不如短而精. ④战士们宁可牺牲生命,也不放弃阵地. (四)递进关系 后面地分句比前面地分句意思更进一层,一般由轻到重,由小到大,由浅到深,由易到难. 常用地关联词语是: 不但(不仅、不只、不光)……而且(还) 而且并且况且何况甚至 尚且……何况(更不用说)别说(不要说)……连(就是) ①这种桥不但形式优美,而且结构坚固. ②邮局离得很远,而且不通公共汽车. ③别说不让她去,连迟去一会儿都不乐意呢. (五)因果关系 几个分句,有说明原因地,有说明结果地.一般先说因,再说果;也有先说果,再说因地.常用地关联词语是: 因为……所以既然(既)……那么(就)由于……就(所以)

数据库的表关系图

数据库的表关系图 1>:one-to-one(一对一关联)主键关联: 一对一关联一般可分为主键关联和外键关联 主键关联的意思是说关联的两个实体共享一个主键值,但这个主键可以由两个表产生. 现在的问题是: *如何让另一个表引用已经生成的主键值 解决办法: *Hibernate映射文件中使用主键的foreign生成机制 eg:学生表: 添加: 元素的lazy属性为true,表示延迟加载,如果lazy设为false,则表示立即加载.以下对这二点进行说明. 立即加载:表示在从数据库中取得数据组装好一个对象后,会立即再从数据库取得数据组装此对象所关联的对象 延迟加载:表示在从数据库中取得数据组装好一个对象后,不会立即从数据库中取得数据组装此对象所关联的对象, 而是等到需要时,才会从数据库取得数据组装此关联对象. 元素的fetch属性可选为select和join join:连接抓取,Hibernate通过在Select语句中使用outer join(外连接)来获得对象的关联实例或者关联集合. select:查询抓取,Hibernate需要另外发送一条select语句抓取当前对象的关联实体或集合. ******所以我们一般用连接抓取 证件表:

面向对象数据库简介

面向对象数据库简介 数据模型是数据库系统的核心和基础。数据库系统的发展以数据模型为主线,以数据模型的进展为分代的主要依据。第一代数据库系统是支持层次和网状数据模型的数据库系统。第二代数据库系统是关系型数据库系统关系型数据库系统在商业领域取得巨大成功,已经成为数据处理应用的标准。然而,随着计算机技术的发展和应用的普及,人们要求数据库系统不仅能处理简单的数据类型,还要处理如图形、图像、音频、视频等更加复杂的信息。新一代面向对象的数据库系统是解决上述问题的有效途径。 在当今软件的世界里,面向对象技术一统天下,渗透到几乎所有软件设计领域、应用领域和工程领域。与此同时,在数据库领域中,虽然关系数据库占据了绝大部分的市场份额,Oracle、DB2、SQLServer、Infomix成为数据库中的霸主,但关系数据库究竟还是是数据的一种存储方式,它不属于面向对象领域。当以关系数据库为数据存储方式时,由于关系概念与面向对象概念是完全不同的两个概念,它们之间存在严重的“阻抗失谐(Impedance Mismatch)”。为了解决这个问题,面向对象技术和数据库技术自然而然开始交流和结合,应用上层的面向对象要求渗透到数据库,甚至是数据库底层,并开始影响未来数据库的发展。 1.关系数据库的存在的问题 1)关系数据库的局限性 关系型数据库有比我们想的更多的局限性。存储和表示一些相当普通的数据结构也是非常困难的。试想一条公交线路——简单,有序的一组站点。关系型数据库以无序的方式存放表,只有创建一个特殊的索引,才能提取有序的数据。对象数据库就没有这个问题,它有有序的数组,不需要索引——这种索引是因为关系数据结构的局限性而要求创建的人工索引。 另一个简单的例子是产品用料单。在制造系统中记录一个产品和它的组件。组件自身也许还有组件,组件的组件还有组件,以此类推。一个关系型数据表不能表达这种部件与部件的部件之间的关系。而这些关系却是重要的数据。查询一个产品数据库,它的所有组件应该是一目了然的。关系型数据库结构使得开发员花费很多的工作来回答这种简单的查询,非常的复杂、困难。与这个例子类似的

PowerDesigner中的对象与关系映射建模

PowerDesigner中的对象与关系映射建模 Sybase 公司PowerDesigner上海研发中心余亚,王晓昀 概述 从80年代中期开始,随着C++语言的成功,面向对象语言已经成为软件开发中的主导语言。现在很多商用软件,尤其是企业信息系统,都是使用面向对象语言进行开发的。应用面向对象方法,我们通过类来抽象不同类别的实体,属性来表示实体的静态特征,关联来抽象实体间的联系,继承来抽象类别的包含关系。 很多的应用程序都需要进行数据存储,关系型数据库是最常用的数据管理系统。在关系型数据库中,表、列和外键是抽象数据的基本元素。关系型数据库是建立在关系计算和布尔代数基础之上的,SQL是数据库的操作语言,通过关系运算,连接、联合等,来操作数据。 我们很容易的看出,面向对象模型和关系模型是不完全匹配的。比如 1. 对象可以存储到多张表,表也可以存储多个类的对象。 2. 对象之间的关系是双向的,而表之间的关系是单向的。 3. 对象之间有继承关系,表之间没有。 为了解决这种不匹配,人们定义了很多映射模式来建立两种模型间的对应关系。这些映射模式逻辑上解决了模型间的不匹配,使得面向对象程序能够正确地和关系关系型数据库进行交互,但是对于程序的开发,仍然有很多问题需要解决。 问题 对于设计人员来说,他们需要找到并且描述这两种模型元素间的映射关系,以便编程人员能够正确地实现数据的存储和查询。现在很多建模工具仅提供其中一种模型的支持,比如Together仅支持对象建模,ERWin仅支持数据建模。即使同时支持两种模型,这种支持也很不完整,比如Rose中的数据建模功能。分析设计人员常常需要两种不同的工具来进行建模,如果他们想描述这两种模型元素间的对应关系,他们只能通过文档或者表格的形式。这很容易产生错误,并且如果模型发生改变,这些文档需要手工更改,容易造成不一致,维护起来很困难。 对于编码人员,他们需要应用某种技术来实现模型的这种对应关系。如果通过语言提供的数据库访问接口,比如Java 的JDBC或者.Net的https://www.doczj.com/doc/ac14306301.html,,对于每一个对象的每一个存储操作,编码人员需要编写存取操作的SQL,数据库控制和访问代码,这是一项繁琐、重复性的劳动。即使应用O/R 映射的框架,比如Hibernate, EJB 3.0或者.Net平台的NHibernate,他们需要编写映射文件或者通过标记来定义O/R映射框架所需要的映射元数据。这些映射元数据只不过是我们在设计阶段定义的映射关系另外一种表现方式,转换成XML或者标记的方式,无疑这种转换增加了错误的可能性和维护的难度。 PowerDesigner解决之道 PowerDesigner提供对于多达8种模型的支持,其中包括面向对象模型和关系数据模型。作为一个集成的企业建模工具,PowerDesigner并不是简单的将几种模型工具罗列在一起。各种模型相互之间可以建立关联,通过这种关联,它提供了企业模型统一、一致的视图。其中模型间的映射和自动生成是建立模型间关联重要的手段。 模型可以描述系统的静态特征和动态特征,而静态特征可以用来表述系统的持久状态,比如面向对象模型中的实体类,数据库模型的表,XML模型中的元素节点等。在PowerDesigner中,我们可以在各种可以描述持久状态模型间建立映射,比如XML模型到面向对象模型间的映射,面向对象模型到关系数据模型的映射等。下面我们就来看一下,PowerDesigner 是如何支持面向对象模型到关系模型的映射的。

数据库选择题

答案见《数据库选择题填空题答案.doc》 一、选择题 1. 在一个二维表中,行称为________,列称为________。 A) 属性;元组 B) 元组;属性 C) 关系;元组 D) 属性;关系 2. 数据库系统的核心是________。 A) 数据库管理系统 B) 数据库 C) 数据 D) 数据库应用系统 3. VFP是一种________数据库管理系统。 A) 层次型 B) 网状型 C) 关系型 D) 树型 4. 支持数据库各种操作的软件系统是________。 A) 数据库系统 B) 操作系统 C) 数据库管理系统 D) 命令系统 5. 在关系模型中,从表中选出满足条件的记录的操作称为________。 A) 连接 B) 投影 C) 联系 D) 选择 6. 数据库系统与文件系统的主要区别是________。 A) 文件系统只能管理程序文件,而数据库系统可以管理各种类型的文件 B) 文件系统管理的数据较少,而数据库系统能管理大量数据 C) 文件系统比较简单,数据库系统比较复杂 D) 文件系统没有解决数据冗余和数据独立性问题,而数据库系统解决了这些问题 7. 在关系运算中,选择的操作对象是________;投影的操作对象是________;连接的操作对象是________。 A) 一个表;一个表;两个表 B) 一个表;两个表;两个表 C) 一个表;一个表;一个表 D) 两个表;一个表;两个表 8. 在关系数据库中,基本的关系运算有三种,它们是________。 A) 选择、投影和统计 B) 选择、投影和连接 C) 排序、索引和选择 D) 统计、查找和连接 9. VFP是一种关系型数据库管理系统,所谓关系是指________。 A) 表中各个记录之间的联系 B) 数据模型满足一定条件的二维表格式 C) 表中各个字段之间的联系 D) 一个表与另一个表之间的联系 10. 一个仓库里可以存放多个部件,一种部件可以存放于多个仓库,仓库与部件之间是________的联系。 A) 一对一 B) 多对一 C) 一对多 D) 多对多 11. 自然连接要求被连接的两关系有若干相同的________。 A) 实体名 B) 属性名 C) 主关键字 D) 主属性名

相关主题
文本预览
相关文档 最新文档