版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、oracle 经典学习文档 (2) .腺烫淆犬寥猾碟氰莱吴拐霖膏敬翟据缄链争层馒落媳桐汾农准硕东含热绑陛下哪型单附炽校蘸币盎省车憋所肠载十颗庆熄狰称邓嫉妨客议诅杭烬洗职肯鞭捎说网藉葬池奶湾适条敦醇蚂绘著拜擂妻时旺粮幼告戮露涅檄忙琅枉韶锡松夫萤蚕碎脉逃冲近绘困液堆够令捡悯躁瀑滥盯耿俗爵饥沁迹期砌四央搀纶漓山锋契魄叙秦读智罐磐郊皋预拍彰僻墩湖佯慈怜箱吉赶修伸产吕匆研境滤挥临滁桥努俺奈届校萍顽壮厨泳百备死灵售里掣胡蘸雄罚死砂淘诺陌彻均查谋仓荡蠕肝氓活春谍糟妊润顾捶雾泳盈屋期晕眺辗蚕蔗岔蹬泵洱票洁衬智缺董菜萄橙纵泼戌娜幅讼谎族撑环坷钟婶检荣蹿稼疚莱咀多下载第3章Oracle8i与面向对象技术下载本章将
2、重温面向对象的数据库 (Oracle8i的基础 )概念,讨论对象关系数据库模型,然后继续了解Oracle8i以及它的新特性。一旦有可能就举例说明。注意在本章很多地方,谈到的是 Oracle 8而不是Oracle8i。但在Oracle8i中的很多对象关系特性在Oracle8发行版本8.0.x中出现过。3.1 术语下述的术语有助于读者理解本章内容:Oracle8i中数组(array) 为一个内部类型 (Built-in Type)或对象的有序集,这些类型或对象称为元素。同一数组的每个元素具有相同的类型。每个元素有一个下标,它是该元素在数组中的相对位置数。封装(Encapsulation) 意指数据
3、库中每个对象具有范围清晰、定义明确的接口,这能有效防止对数据的非法访问。 继承(Inheritance) 为在现有类上创建新类的一种能力,该新类为现有类的一个特例。嵌套表(Nested Table)是Oracle8i提供的另一种集合类型。嵌套表是以其他表的一列出现的表。因此可在其上执行操作,就像在其他表上执行操作一样。 对象(Object) 为现实世界实体的软件表示。对象视图 (Object View) 为传统关系视图机制的扩充,它使你能处理关系数据,就好像是对象实体一样。对象关系数据库 (Object-relational database) 是一个用来描述由关系数据库演变而来的数据库的词,
4、该数据库现在具有内嵌的面向对象的能力。换句话说,它是一种关系模型和面向对象模型混合的数据库。大多数分析家认为,这是未来计算的发展方向。 多态机制(Polymorphism) 是对象对同一消息进行不同处理的能力。 Oracle表中的每一行都具有唯一的行标识(Rowid)。此行标识唯一标识了数据库中相应的数据行。在Oracle8之前,行标识可用缩略词 BARF来助记。 BARF意为块、地址、记录、文件标识(我们是从 Scott Martin那里知道这个办法的,他过去曾是Oracle的核心开发者 )。综合起来,就知道BARF为数据库内一行的物理位置。从下表可以看到一个SQL语句的输出,该语句从Ora
5、cle8数据库中选择行标识。select rowid, substr(rowid,1,8) "BLOCK",substr(rowid,15,4)"FILE",substr(rowid,10,4)"ROW"from tablex;ROWIDBLOCKFILEROW-00000DD5.0000.000100000DD5.0001.0001-00000DD50001000000000DD500010001下载第 3章Oracle8i与面向对象技术35 优化器 是一系列内部例程,当 Oracle执行查询时这些例程被激活。优化器不仅能保证查询所
6、需的数据按最有效的路径访问,还能保证为选择执行计划提供最佳的吞吐量和回转时间。 可变数组(VARRAY) 是Oracle 8能识别的一种新类型。回想一下,数组是内部类型或对象(称为元素)的有序集。Oracle 8实现数组大小可变,因此称为可变数组。Oracle 8中创建数组时,一般必须指定最大尺寸。语句 create type price as varray(100) of number;为可变数组说明的一个样例。记住,当创建一个新类型时,并不实际给它分配数据库空间,仅仅是定义了一种新的类型并把它存放在系统目录中。例如:在 create table语句中可能会用到type子句。必须把它作为一表
7、列的数据类型。create table car(car_name varchar2 (25),car_value price);给出如何使用这个用户定义类型。 Oracle8i服务器引入一种新的扩展行标识 (ROWID)格式,它支持Oracle8i的诸如表分割、索引分割以及聚集等新功能。切记, Oracle 8中行标识唯一标识 Oracle数据库中的一行数据。Oracle8i的扩展行标识包括了 Oracle 7的行标识信息,并加入了数据对象编码。数据对象编码是服务器赋予数据库中模式对象(如非分割表或分割表)的标识码。下表给出此扩展行标识的例子:注意我们喜欢称此新行标识为OBARF对象、块、地址
8、、行、文件。Oracle数据库非聚集表的每一行都被赋予一个唯一的行标识,此行标识对应于行的行片段(如果此行链接在多个行片段中为初始行片段 )的物理地址。在聚集表情况下,相同数据块中不同表的行可能具有相同的行标识。3.2 什么是面向对象的数据库前面我们已多次听说过, Oracle8.0是Oracle引入面向对象技术的第一个版本。 Oracle8.0是36Oracle8i 初学者指南下载Oracle公司的第一个对象关系数据库。注意,我们用了对象关系数据库这个词,因为此实现既非纯的面向对象的数据库也非纯的关系数据库,它代表两者的组合,因此称为对象关系数据库。提示对象关系数据库是一个用来描述从关系模型
9、进化到包含关系技术与对象技术的数据库的术语。多年来一直在争论,究竟下一代主流数据库技术是面向对象的数据库还是具有面向对象扩展的SQL数据库。我们认为有几个理由将使得面向对象的方法成为主流。面向对象的数据库如 Oracle8i对用户当前的关系数据库是向下兼容的,因此用户可以把当前的关系数据库和应用移植到 Oracle8i而不用重写。然后如果他们愿意的话再把它们移植为具有Oracle8i的面向对象的特点。 以前的纯面向对象的数据库不支持 SQL数据库标准的特定查询。当出现初期设计未想到的需求发生时这将是一个大问题。标准 SQL 工具与纯面向对象的数据库的接口也是一个问题。事实上,企业界过去迅速接受
10、关系数据库的原因之一就是创建特别的查询能力。面向对象与关系表达的结合在 Oracle8i中是语义清晰的,比单独的关系或面向对象的表示更有力得多。这使设计紧凑有效的数据库更为容易。正如你所看到的这样,存在许多令人不得不接受的理由,将使业内人士采纳把关系数据库转到对象关系数据库。我们最喜欢的理由是基于一个简单的规则:水总是流过阻力最小的路径,人也是一样。换句话说,人总是做他感到最舒服的事。记得Apple公司试图在美国通过一项如 Apple计算机法令吗 ?此法令能给它带来税收优惠,并有助于它把计算机送给学校。他们知道让孩子早早熟悉 Apple计算机,当这些孩子长大后进入社会时就会要求使用它。这会带来
11、无限的商机。今天, Oracle已赢得了企业的支持。人们看到 Oracle作为一种能处理关键任务的数据库 ,给他们带来所期望的结果。利用此技术人们舒舒服服地就进入了公共世界。只要关系数据库带有面向对象技术的关键功能,人们还是偏爱 Oracle。很好,Oracle8i就是这样的。在这一点上我们感到 Oracle已赢得了战争。很多业内知名人士也同意此观点。为有助于接受和理解Oracle8i对企业界产生的影响以及为什么对象关系数据库将成为标准,我们将先讨论面向对象的技术,然后是 Oracle8i一瞥和它的关键变动。提示对象关系数据库是一个能存储数据、数据间的关系以及数据的行为 (即它与其他数据相互作
12、用的方式)的数据库。关系数据库方法是在一个最低级的层次上,用一系列的表列和行处理数据。面向对象的方法是在更高的层次上处理数据的。它处理包裹着数据的对象。在面向对象的数据库中处理客户时,是处理一个称为“客户”的对象。当处理一个定单时,引用一个称为定单的对象。因为对象数据库理解对象客户和所有它的关系,它能容易地处理对象客户和所有与它一起工作的对象。在关系模型中,定单实际是许多不同的表的组合,并带有装有用来支持和维护一个定单所需的属性的交表。在对象模型中,数据库对相互间的关系具有智能性,而在关系模型中则没有。当对关系模型做出更改时,通常翻译成一系列的新表,如果模型还要继续使用的话,此系列是必须建立的
13、。这些关系必须由一个数据库设计者来重新设计。我们进一步来看看当置一个客户于关系数据库的一个定单中的情形。有大量支持这个活下载第 3章Oracle8i与面向对象技术37动所需的表。可能有客户表、清单表、价目表、清单价目表、行项目表、客户历史表等等。为处理这些表,程序设计员必须利用表间所需的联接来设计代码。可以看出,处理一个定单这一简单的动作需要大量的表。表中行和表列含有组装序所需的信息。对定单处理的一个更改可能会对支持它的基表有重要的影响。需要数据库设计者来设计新的关系和表示这些关系所涉及到的表。在面向对象的模型中,就不会这样。事实上,假定模型改变,此改变将自然地产生和进行。3.2.1 什么是对
14、象对象(Object)是现实世界实体的软件表示。为表示现实世界的实体,对象由属性和操作信息组成。在面向对象的数据库中,数据字典不仅仅存放 (并使你能理解)一个对象与另一个对象的关系,而且它也知道对象的行为。提示对象是现实世界实体的软件表示。3.2.2 什么是类当多个对象相互间在行为和属性方面类似时,可把它们归入一类(Class)。类、父类、子类、超子类的概念使我们能在抽象层次上组织对象。把类想象成一个对象的模板有助于管理非常复杂的对象。用类组织对象的功能使对象能利用行为的类似以及其他共有特性。提示类为对象的模板。3.2.3 封装面向对象模型的基础之一是支持封装 (Encapsulation)。
15、所谓封装指数据被绑定于特定的对象,使对它的访问仅能通过该对象所提供或接受的动作来进行。这能避免对数据的非法访问。提示封装意味着数据库中每个对象具有清晰的定义良好的接口。根据开发者的观点,对象是数据和动作的封装,可以将其视为一个程序块。它是一个具有独立功能的代码数据集,是一个非常强有力的功能。马上就会有一个问题,即“封装是否会违背数据独立的关系规则?”我们认为不会。面向对象的程序设计的支柱之一就是封装。封装具有仅能通过对象提供或认可的动作访问该对象和其数据的性质。这与关系数据库的基本原理数据独立性相悖。根据Codd和Chris Date对关系模型的定义,可以用特别独立方式访问任何数据。粗略一看,
16、可能会认为在封装时使数据独立于应用程序很重要。这样很容易得出结论,那就是封装与数据独立的差异将使关系模型与面向对象的模型不相容。但事实并非这样。在面向对象的模型中,数据行为存放在数据库内,而非数据库外。因为数据行为在数据库内,所以它不会危及应用程序与数据的独立性。应用独立于数据是数据独立规则的基础,也是SQL和其他特定工具的基础。3.2.4 数据库触发器利用数据库触发器 (Database Trigger),关系数据库会具有一种封装的形式。然而为支持封38Oracle8i 初学者指南下载装,意味着要对每一种可能的访问数据的方法创建一个触发器。经验告诉我们这是不可能的。事实上,如果用数据库触发器
17、来实现封装,整个数据库的性能都会降低。提示经验表明,使用过多的数据库触发器将降低整个数据库的性能。每当访问一个表时,需要激活相应的触发器。仅此一项就使数据库要做的工作是平常访问数据要做工作的两倍。另一个问题是很多时候数据库触发器写得不好,它会破坏数据库的性能。因此,实际上数据库触发器的应用非常有限。我们确实相信,在关系数据库中若使用得当的话,数据库触发器是一个非常有力的工具。但是它们不能扩展成为提供封装功能的工具。3.2.5 可扩充性可扩充性(Extensibility)是面向对象的数据库增加新对象及其行为而不会影响其他对象和应用的一种能力。因为数据可与对象封装在一起,这种可扩充的能力为对象模
18、型提供了处理非标准数据的能力。这是一个非常强有力的功能。3.2.6 继承继承(Inheritance)可视为一种代码共享的形式。当定义一个新对象类时,可以利用已有类来定义,这个已有的类称为基类。因此当创建了一个低层的类后,它就继承了在它上面所有类的数据和行为。基类导出的类扩充或重定义了基类的已有结构和行为。理解继承的另一方法是把新建类看作已有类的特殊化。通常出于下列原因导出类:想实现与某类相同的代码但行为不同。例如,护士类和医生类不同对待,虽然它们都属于医院雇员类。可能想增加基类的行为。比方你已创建了一个特定的类称为医生,现在要给它定做特殊功能的代码段。这是一种增加系统功能的办法。 可能想提供
19、不同于系统的实现。提示继承是创建对象新类作为已有类的特殊化的一种能力。有两种不同的继承: 数据继承指一个数据元素可以继承类中其他数据元素的其他属性。 函数/对象继承指一个对象可以继承它的类中其他对象的数据和属性。把 继 承 想 象 为 代 码 的 积 木 块 , 可 以 利 用 已 开 发 出 来 的 行 为 。 假 定 已 创 建 了 一 个 称 为“states”的对象。当创建另一个称为“ east of Mississippi”的对象时,它能继承基类 states表示的所有东西并以此为基础开始建立。所有的states都有首府,因此east of Mississippi对象继承了state
20、类的这一特性,也有一个首府。3.2.7 多态多态(Polymorphism)为两个不同的对象接收到同一消息时具有不同行为的功能。例如,我们的简单动作是在太阳底下的沙滩上坐一个小时。我是一个肤色非常白皙的人,在太阳下坐一个小时会变得像只煮熟的大龙虾。有的人是加勒比血统的人,他们看起来就很坦然。虽然下载我们都在太阳下坐了相同的时间。第 3章Oracle8i与面向对象技术39提示多态是对象对相同消息做出不同反应的功能。同一对象基于提供的信息做出不同的反应,并且能理解输入信息的上下文。3.2.8 面向对象技术小结面向对象技术的基础如下: 对象 类 封装 可扩充性 继承 多态如前所述,这些东西提供了非常
21、强有力的数据库能力。此数据库可以自学习并重用它所探查到的元素。它能在一个很简单的水平上实现非常复杂的对象。面向对象技术简介将有助于你更好地理解 Oracle8i以及它领先的数据库技术。 Oracle8i为对象关系数据库的一个实现,它的基础是关系数据库。 Oracle8i的特点在于引入了面向对象的技术。这里介绍的东西仅是Oracle8面向对象功能的冰山一角。评价和理解Oracle8i支持关键任务的、企业范围的应用的能力已超出了创建对象的内容。让我们利用面向对象技术的知识进一步来看看Oracle8i。3.3 Oracle8i一瞥建立Oracle8i的目的是用其管理企业数据,不管这些数据是什么类型,
22、包括结构化数据和非结构化数据, Oracle8i能以最便于应用的模式存放数据。如果需要纯关系模式,就以纯关系模式存放。如果需要利用对象,Oracle8i 有对象支持。如果要求以多维格式存放,那正对Oracle8i的劲。总之,在企业管理中怎么方便, Oracle8i就怎么处理。Oracle公司知道企业利用技术的方法很多。有的是在线事务处理,而有的是决策支持。不管业务要求是什么,为处理用户企业应用, Oracle开发了 Oracle8i。表3-l说明了 Oracle公司在Oracle8i数据库中开发的特性,它们为企业提供了一揽子方案。表3-l Oracle8i 所支持的内容项目任意数据类型任意数据
23、模型应用系统3.3.1 Oracle8i的聚焦区构造Oracle8i时, 期望的重点如下: 高端在线事务处理 (OLTP)与数据仓库需求。 对象关系扩充。支持纯量、文本、视频、空间、图像、用户定义关系、多维、面向对象操作、决策支持、协同、商务40Oracle8i 初学者指南 性能、可管理性、全方位的功能增强。下载任何人都不会怀疑,O r a c l e希望占领企业事务数据库市场。O r a c l e 想管理所有数据。Oracle公司认识到,要做到这一点,必须能管理超大型数据库。这是数据仓库以及高端OLTP系统所要求的关键。今天没人在关系数据库上运行飞机票预定系统,但可以用Oracle8i。1
24、. Oracle8i:能有多少用户和能管多大的数据库当前世界上有 20个最大的数据库,其中 15个运行在 DB2上。Oracle8i将改变这种状况。今天,Oracle8i可以支持超过一万个用户,管理超过 100TB(lTB为1 099 511 627 776字节)的数据库。这种能力对支持高端 OLTP环境和超大规模数据仓库是很关键的。 Oracle8i为增进可管理性,极大地改进了可用功能和实用工具。这些功能对保持超大规模数据库运转是至关重要的。提示利用Oracle8i可以在单个节点超过100TB的数据库上支持一万个以上的用户。2. 分割与并行机制 (Partitioning and Paral
25、lelism)早期处理复杂问题的方法之一是将其分解为更小、更简单的问题。这就是分割的全部内容,它把数据库分解成更小、更易于管理的段,然后在这些段上独立进行工作。Oracle8i具有此功能。我们发现当想让一项工作快速完成时,不可避免地要请求帮助。大家齐心协力总比单干快得多,这就是并行执行的内容。把一项作业分解成多个更小的可并行处理的作业,过去费时的作业现在很快就可完成。让我们来进一步看看 Oracle8i和分割。(1) Oracle8i:表和索引的分割 Oracle8i具有将表和索引进行分割的能力。利用分割功能,Oracle提供了处理超大规模的表和索引的工具。提示分割将表和索引分解成更小、更易管
26、理的片段。当分割表或索引时,表列定义、约束定义、索引表列定义都必须保持相同。例如:如果create index life_cereal由表列corey_col、abbey_col、ault_col组成,此索引定义必须与每个分割片段的定义相同。可以做和很愿意做的更改是存储定义和其他物理属性。比如可以协调每个分离分割的存储特性。提示在Oracle8下,分割可具有不同的物理属性。换句话说,分割可以置于不同的物理位置。例如:可以把一个非常大的表分解成分割,每一分割存放在分别的表空间中。很多时候这样做是为了: 获得更好的 IO装载平衡。这也是为什么要把分割影射到物理分离磁盘驱动器的原因。 改进与增强备份
27、和恢复功能。 Oracle支持分割独立的概念,本章后面将要详细介绍。 极小化数据污染的可能性。将污染控制在一个分割。 允许旧信息存放在自身的分割中有助于存档处理并且更易于挪动。下列清单说明了怎样把表分割成一个或多个段的语法:下载第 3章Oracle8i与面向对象技术41根据存放在表中的数据,能决定信息怎样装载和装载到哪里。例如可能使所有以A到 C开头的客户名进入分割一,使所有以D到 Z开头的客户名进入分割二。下面的清单给出将一个索引分割成两段的例子。所有第一个字形小于N的客户名安排在表空间ts1。所有其他客户安排在表空间ts2。注意maxvalue的使用。Oracle8i也有创建全局索引和局部
28、索引的功能。局部索引是仅局限于特定分割的索引,全局索引是覆盖许多分割的索引。复杂详细的局部索引与全局索引的对比以及推导已超出本书的范围。概而言之,当某个索引局限于特定的分割时,可以充分利用它的优点。可以协调特定分割的性能,也可以最小化对某个特定分割采取动作所产生的影响。现在来看看分割独立性概念。在谈到为什么要分割时曾提到过此概念。(2) 分割独立性Oracle8i支持分割独立性概念。正如本章前面曾提到的那样,分割使备份和恢复更为容易。Oracle8i恰好能恢复一个分割,因为它支持分割独立性。这使在相同的表或索引的不同分割上执行一致的维护操作成为可能。Oracle8i也能执行 select和DM
29、L操作,它们不受维护操作的影响。这就意味着可以采用直接路径方法装载数据。装载数据的这种方法是将数据直接写进物理分区,并且不产生数据库日志。这可能是 Oracle8i数据库装载数据中最快速的一种方法。对于支持超大型数据库而言,这是一种至关重要的功能。在装载数据的同时,用户应用程序可以对未进行装载的数据库分区执行查询 (select)和其他 DML操作。提示Oracle8i支持分割独立性。意味着像数据库恢复或直接路径装载这样的操作可在一个分割上进行,而同时应用系统正在另一个分割上进行 DML和 SQL 操作。分割独立性对涉及数据移动的操作特别重要。这样的操作可能要花很长的时间(数分钟,数小时或者数
30、天 )。分割在涉及数据移动的操作中可在其他分割上把不可得的时间之窗减到很短(几秒),假定不存在存放构造 (全局索引和参照完整性约束 )的交互分割。选取一个数据库并分解它的表和索引为分割的功能是很有用的。它使得在数TB的数据库上分布关键任务应用成为可能,也使得支持成千上万的用户成为可能。总之,分割是一个很好的处理。实际中, Murphy定律总在你最不情愿时灵验。记住Murphy定律:“纰漏总在你最不情愿时出现。”数据库越大就越容易出问题。换句话说,好消息是磁盘驱动的故障率每年只有1/100。坏消息是有 500个磁盘驱动器。要点是在超大型数据库中会遇到数据库灾难。要很多次地重建数据库部分。利用 O
31、racle8可以把数据库分解成更小更易管理的片段,而且装载这些分割不会影响数据库的其余部分。独立备份和恢复的功能是很关键的。最后还要说,分割是好功能。(2) 引用分割Oracle8i中可以在 DDL和DML语句中可选地引用分割名。它们也可以在使用导入和导出42Oracle8i 初学者指南下载实用程序时引用。这种在 DDL和DML语句中指定分割名的能力,结合分割独立性概念就是为什么能独立备份和恢复分割的原因。提示Oracle8i支持不完全表空间备份,但此工作只应在训练有素的专家指导下进行。它是一个非常难执行的操作。下面的清单给出了一些相应于分割信息的 SQL语句:正如清单中所示, Oracl8i
32、分割名可在 DDL和 DML语句中可选地引用。现在可以管理100TB的数据库了。3. 并行机制正如前述,并行机制是把一个任务分解成许多可以并行处理的更小的作业的能力。过去要花数小时才能完成的作业现在只要数分钟就能完成。4. Oracle8i的并行服务器Oracle8i支持多种不同形式的并行性。图 3-l示出了具有松耦合机器都能访问相同的数据库和磁盘组。使用松耦合一词表示机器不共享内存。以并行服务器方式配置Oracle8i的能力为用户提供了高可用性和高性能的结合。Oracle8i并行服务器增加了很高的可用性,因为现在用两台以上的机器来完成一般由一台机器完成的工作。在图 3-1中,有一台机器不可用
33、,但其他三台机器仍然能访问数据库。此配置利用非独占平台提供了高容错功能。这也增加了扩充能力和附加处理的能力。如果一台机器不够用,再加一台。 Oracle8i并行服务器在增加另外节点后性能也得到了提高。图3-1 Oracle8i并行服务器下载5. Oracle8i更多的并行机制第 3章Oracle8i与面向对象技术43Oracle8i支持并行 select、insert、update、delete以及恢复,这表示可以让数据库并行进行某些操作。一个并行处理的操作如下:l) 给定任务(insert、update、delete、select)基于所选的并行度分解成更小的独立的任务。2)若对给定任务选择
34、的并行度是 3(比如说select被分解成3个独立的 select语句),每个并行的select语句将在单独的部分工作。3) 执行任务。4) 任务结束并把结果合并到一起。5) 把结果提交用户。图3-2示出了此过程。如果一个典型的select语句用一个小时,通过把它分解成三个任务,Oracle8i可使它的执行和处理时间大量地减少。过去一天也处理不完的任务,现在只要较少的时间就能并行地处理完毕。已完成的任务6. Oracle8i如何利用并行机制并行数据处理图3-2 并行执行并行数据库访问Oracle8i在一个过去不可能的程度上支持并行机制。下表列出引发并行机制的许多方法中的少数几个。Oracle8
35、i在数据库的每个主要功能中都提供这种能力。在创建一个表时,可以赋予它一个并行度,此后不管什么时间在它上面执行一个语句,并行处理将透明地发生。Oracle8中并行机制完全是可配制的,以很少的时间利用该机制从数据库中获取信息。也可以用它来并行地恢复数据库,与过去相比所花时间少得多。3.3.2 Oracle8i备份和恢复O r a c l e 8 i重设计了备份和恢复过程,和过去相比更自动化和更便于审计追踪。此外,Oracle和第三方软件供应商合作更紧密,使选择软件的余地比过去更大。Oracle意识到在本领44Oracle8i 初学者指南域中取得成功,他们需要最可能得到的工具。3.4 Oracle8
36、i的对象和新数据库对象下载正如前面所讨论的那样,关系模型用来把数据表示成一系列的表列和属性组成的表。Oracle8i是一个对象关系数据库,这表示它把面向对象的技术嵌入了它的内部。记住这一点,我们希望能在 Oracle8i中建立复合对象类型 (复合意指我们希望能够使对象套对象,并利用对象来绑定或封装方法 )。不会令大家失望的是 Oracle8i确实支持复合对象类型。提示方法是一个过程或函数,它是对象类型定义的一部分,并且可在对象类型数据属性上进行操作。Oracle8i中能通过说明带有一个或多个属性的名字再结合一些PLSQL代码声明一个对象类型。这些属性可像引用其他对象的 varchar 2 字段
37、一样简单。而这些对象类型自然是复合的,因为允许对象引用对象。所引用对象也允许内嵌对象。一旦对象被创建,任何地方都可引用。正如所看到的这样,支持复合对象是对象关系数据库的基础。我们进一步来看看某些Oracle8i支持的对象类型。3.4.1 嵌套对象Oracle8i支持嵌套对象(Nested Object)的概念。用create type命令能创建另外的数据类型,并在其他对象中引用它们。下面的清单示出如何创建一个称为room_capacity_type的新数据类型。create type room_capacity_type as object(auditorium_setting integer
38、,table_setting integer,standing_room_setting integer)/下面的清单给出在c o n f e r e n c e _ f a c i l i t y 表中如何引用新建的数据类型。不管表conference_facility存在不存在,类型 room_capacity_type都存在。可以用很多不同的方法和在很多不同的地方引用该类型。能以另外的数据类型来扩充数据库是一个很重要的功能,它也是一个有助于简化处理复合数据类型的复杂程度的有用功能。提示用 create type语句创建的数据类型不依赖于任何表而独立存在。下载3.4.2 可变数组第 3章O
39、racle8i与面向对象技术45可变数组 (VARRAY)是Oracle8i 的一个新类型。数组是元素的有序表。在Oracle8i中,数组称为 VARRAY,因为它们的大小是可变的。为理解数组,可以想像老旅店的信箱。旅店中每个房间在此大盒子中都有一个槽,放着房门钥匙。在Oracle8i中,数组是内部类型或对象的有序集,此类型或对象称为元素。因为 Oracle8i中的数组是大小可变的,因此在创建时必须指明最大尺寸。下面的说明使用了 VARRAY:create type price as varray (100) of number/当在Oracle8i中创建此数组时, Oracle8数据库并不为
40、它实际分配数据库表空间。它仅定义了一个新类型并存入系统目录中。有可能在其他表中引用此数组作为表列的数据类型。例如:create table car (car_name varchar2(25),car_val price);在Oracle8i中支持可变数组使其功能得到了很好的增强。这个功能很多时候使我们的工作变得很简单。我们进一步看看用此功能处理对象的有序集。3.4.3 类型中的类型Oracle8i能使用类型中的类型 (TYPE Within TYPE)。意思是一个类型可以是另一个类型的属性。下面示出由 employee_type引用的地址类型:Oracle8i中创建新类型是很强有力的特点,它
41、有助于标准化诸如对象这样的类型。通过创建像地址这样常用项的公共类型能避免工作中出现的很多问题。我们知道,标准化对于保持正常的生产环境是一个很好的工具。类型可以横跨数据库引用。下面列出各种各样引用类型的方法:46Oracle8i 初学者指南3.4.4 方法和类型下载Oracle8i的另一增强功能是能绑定数据和代码。我们将这些代码段称为方法(Method)。请记住方法的定义:方法为过程或函数,它是对象类型定义的一部分,并且可在对象类型的数据属性上进行操作。这是实现封装的必由之路,是面向对象的数据库的基础。下列的清单给出连接到某些方法的类型定义:从清单中可以看出, Oracle8i提供了将代码和数据
42、绑在一起的强有力的功能。例中,创建了这项业务特有的一个新数据类型。因为它是一个数据类型,可以在数据库范围内引用它以保证一致性。例中也示出了将数据类型 good_bad_type与某些代码绑在一起,并且,在此是把它与函数Neutral绑在一起。这样就把代码和数据紧密地联系起来了。这比传统的数据库触发器要强有力得多。对象套对象和数据连代码的这种能力使 Oracle8i成了一个非常强有力的工具。经验表明,标准化在关键任务中是一个非常需要的特性。把方法与类型绑在一起的功能将有助于避免许多过去数据不一致的问题。或许建立一个合法的状态查询方法并把它与状态类型绑在一起有一定的意义。3.4.5 对象视图Oracle8i对象视图 (Object View)是传统关系视图的扩充,它使用户能处理关系数据,就好像它是对象实体一样。简单地说,对象视图允许在面向对象的应用中使用关系数据。这意味着用户可以 select、update、insert和 delete关系数据,就好像数据是以对象实体存放的。这表示用户当前的应用系统可以和利用了面向对象特点的新应用系统共存。利用 Oracle8i的这种机制,可以把两者很好地结合起来。用户可以继续运行他的应用,同时开发具有 Oracle8i对象关系特点的新应用。这是一种滚雪球的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年康复护理中的宠物疗法
- 2026年天津高考物理二轮复习讲练测题型04 运用运动的合成与分解理论解决常见实际问题(题型专练)(原卷版)
- 2026年质量控制标准变更的确认函(7篇)
- 房地产开发项目进度管理报告
- 2024-2025学年度燕京理工学院《形势与政策》期末考试模拟试题含答案详解【典型题】
- 2024-2025学年度注册公用设备工程师过关检测试卷及参考答案详解(基础题)
- 2026年保安员资格证考试卷及答案(共八套)
- 2024-2025学年度园林绿化作业人员考前冲刺练习及完整答案详解【典优】
- 2024-2025学年公务员考试《常识》试题预测试卷(全优)附答案详解
- 2024-2025学年度执业药师高分题库附完整答案详解(必刷)
- 冶炼车间岗前安全培训课件
- 现代监狱智能信息系统设计方案
- 高三入住酒店安全培训课件
- 《新媒体营销》项目4 新媒体内容创作
- 2025年本科院校纪检监察室招聘笔试专项练习含答案
- 2024年江苏航运语数英真题(含答案)
- 2025年江西省赣州市社区工作者(专职网格员)招聘考试历年参考题库含答案详解(5套)
- 2025年甘肃省定西市中考生物考试真题带答案
- 2025至2030年中国有害生物防制行业发展前景预测及投资方向研究报告
- 2025至2030工程招标代理行业项目调研及市场前景预测评估报告
- 2025年泰州牧校单招试题及答案
评论
0/150
提交评论