对象数据库系统-new.ppt
第23章 对象数据库系统,23.1 研究动机示例23.2 ORDBMS23.3 OODBMS23.4 OODBMS和ORDBMS的比较,第23章 对象数据库系统,对象数据库系统两个发展方向面向对象的数据库系统目标是针对复杂对象扮演核心角色的应用领域,这种方法受面向对象的编程语言的影响。对象数据库管理组开发了新的标准:对象数据模型(ODM)和对象查询语言(OQL)。对象关系数据库系统扩展的关系型数据库系统。SQL:1999扩展了SQL标准以支持数据的对象关系模型。RDBMSOODBMSORDBMS,23.1 研究动机示例23.1.1 新的数据类型,SQL:1999 DDL语句描述的部分Dinky的ORDBMS模式,与传统关系系统的DDL有一些重要差别,它们突出了ORDBMS的新的数据建模能力。CREAT TABLE Frames(framno integer,image jpeg-image,category integer);(2)CREAT TABLE Categories(cid integer,name text,lease-price float,comments text);(3)CREAT TYPE theater-t ASROW(tno integer,name text,address text,phone text);(4)CREAT TABLE Theaters OF theater-t(5)CREAT TABLE Nowshowing(film integer,theater ref(theater-t)with scope theaters,start date,end date);(6)CREAT TABLE Films(filmno integer,title text,stars setof(text),director text,budget float);(7)CREAT TABLE Countries(name text,boundary polygon,population integer,language text);,这一列值只能引用第4行定义的theaters表中的行(一个给定的REF类型必须与一个特定的表相关联),23.1.2 操纵新数据类型,例1(P574)Clog 公司想租用一个Herbet 和日出图案的图像,并组合成包装盒。类SQL语法描述形式,一个用于查找可能需要的图像和它们的租借价格的查询。SELECT F.frameno,thumbnail(F.image),C.lease-priceFROM Frames F,Categories CWHERE F.category=C.cid AND is-sunrise(F.image)AND Is-herbert(F.image)thumbnail方法产生一个输入图像的缩略图。Is-sunrises方法是一个分析图像的布尔函数,如果图像包含一个日出图案返回真。Is-herbert方法图像包含Herbert的图形时返回真。结果产生一个图形祯的代码号,图像缩略图和所有包含Herbert和日出图形的价格。,23.1.2 操纵新数据类型,例2(P575)在Andorra方圆100公里内正在放映Herbert电影的电影院名字。SELECT N.theatername,N.theateraddress,F.titleFROM Nowshowing N,Film F,Countries CWHERE N.film=F.filmno AND Overlaps(C.boundary,radius(N.theateraddress,100)AND C.name=Andorra AND HerbertF.stars(5)行 Nowshowing表中的theater属性是对另一个表中的一个对象的引用,包含属性name,address和phone.这个对象引用支持符号N.theatername和N.theateraddress.每个符号都指Nowshowing表中行N引用的theater-t对象的属性。(6)Films表的stars属性是每个电影中明星名字的集合Radius方法返回的第一参数为圆心,第二参数为半径的圆。overlap 测试空间重叠关系。,23.2 对象关系数据库系统,23.2.1 面向对象数据模型23.2.2 对象-关系数据库23.2.3 小结,23.2.1 面向对象数据模型,23.2.1.1 OO模型的核心概念23.2.1.2 类层次(结构)23.2.1.3 继承23.2.1.4 对象的嵌套,23.2.1.1 OO模型的核心概念,1.对象定义:对象是由一组数据结构和在这组数据结构上的操作的程序代码封装起来的基本单位。组成部分属性(Attribute)集合属性描述对象的状态、组成和特性方法(Method)集合描述了对象的行为特性,OO模型的核心概念(续),2.对象标识OID(Object IDentifier)概念:面向对象数据库中的每个对象都有一个唯一的不变的标识称为对象标识(OID)特点:永久持久性 独立于值的、系统全局唯一的,OO模型的核心概念(续),3.封装(Encapsulation)每一个对象是其状态与行为的封装 封装是对象的外部界面与内部实现之间实行清晰隔离的一种抽象,DBMS不需要知道一个ADT的数据是如何存储的,也不需要知道ADT的方法是如何工作的。只需要知道能获得什么方法,以及方法的输入输出类型。这种隐藏ADT内部细节的方法称为封装。对象封装之后查询属性值必须通过调用方法,OO模型的核心概念(续),4.类(Class)对象类(简称类):共享同样属性和方法集的所有对象构成了一个对象类实例:一个对象是某一类的一个实例(instance),23.2.1 面向对象数据模型,23.2.1.1 OO模型的核心概念23.2.1.2 类层次(结构)23.2.1.3 继承23.2.1.4 对象的嵌套,类层次(结构)(续),教员、行政人员、工人中只有本身的特殊属性和方法同时它们又继承教职员工类和人的所有属性和方法逻辑上它们具有人、教职员工和本身的所有属性和方法,图15.1 学校数据库的类层次结构图,类层次(结构)(续),超类/子类之间的关系体现了“IS A”的语义超类是子类的抽象(Generalization)或概括子类是超类的特殊化(Specialization)或具体化类层次可以动态扩展,一个新的子类能从一个或多个已有类导出,23.2.1 面向对象数据模型,23.2.1.1 OO模型的核心概念23.2.1.2 类层次(结构)23.2.1.3 继承23.2.1.4 对象的嵌套,23.2.1.3 继承,单继承:一个子类只能继承一个超类的特性(包括属性和方法)层次结构图是一棵树 多重继承:一个子类能继承多个超类的特性层次结构图是一个带根的有向无回路图,继承(续),多重继承,具有多继承的类层次结构图,继承(续),继承性的优点第一,建模的有力工具,提供了对现实世界简明而精确的描述第二,提供了信息重用机制 子类与超类的冲突子类在定义自己特殊属性和方法时可能与继承下来的超类的属性和方法发生冲突由系统解决,23.2.1 面向对象数据模型,23.2.1.1 OO模型的核心概念23.2.1.2 类层次(结构)23.2.1.3 继承23.2.1.4 对象的嵌套,23.2.1.4 对象的嵌套,对象嵌套:一个对象的属性可以是一个对象,这样对象之间产生一个嵌套层次结构 设Obj1和Obj2是两个对象。如果Obj2是Obj1的某个属性的值,称Obj2属于Obj1,或Obj1包含Obj2。复杂对象 Obj1子对象 Obj2嵌套层次结构,对象的嵌套(续),汽车的嵌套层次图,对象的嵌套(续),对象嵌套层次结构和类层次结构形成了对象横向和纵向的复杂结构各种类之间具有层次结构某一个类内部也具有嵌套层次结构,关系模型与OO模型的比较,表15.1 关系数据模型与OO模型的比较,23.2 对象关系数据库系统,23.2.1 面向对象数据模型23.2.2 对象-关系数据库23.2.3 小结,23.2.2 对象-关系数据库,23.2.2.1 对象关系数据库系统中扩展的关系数据类型23.2.2.2 对象关系数据库系统中扩展的对象类型及其定义 23.2.2.引用类型(Reference Type)23.2.2.4 继承性23.2.2.5 子表和超表,对象关系数据库系统中扩展的关系数据类型,扩展的类型:LOBBOOLEAN集合类型ARRAY用户定义的DISTINCT类型等面向对象的数据类型行类型ROW TYPE抽象数据类型(Abstract Data Type),ORDBS中扩展的关系数据类型(续),大对象LOB(Large OBject)类型LOB可存储多达十亿字节的串。LOB分类二进制大对象BLOB(Binary Large OBject)BLOB用于存储音频、图像数据字符串大对象CLOB(Character Large OBject)。CLOB用于存储长字符串数据,ORDBS中扩展的关系数据类型(续),2.BOOLEAN类型 布尔类型,支持3个真值:true、false和unknown操作符:NOT、AND、OR、EVERY、ANY 例如 WHERE EVERY(QTY200)或WHERE ANY(QTY200)QTY列为空值:返回unknown;QTY列为非空:当该列的每一个值都使(QTY200)为true时,EVERY返回true,否则为false;当该列的每一个值都使(QTY200)为false时,ANY返回false,否则为true。,ORDBS中扩展的关系数据类型(续),3.集合类型(Collection Type)ARRAY 相同类型元素的有序集合称为数组ARRAYSQL3新增的集合类型允许在数据库的一列中存储数组SQL3的数组只能是一维的数组中的元素不能再是数组,ORDBS中扩展的关系数据类型(续),例2CREATE TABLE SALES(ITEM_NO CHAR(20),/*商品号*/QTY INTEGER ARRAY12,/*整数数组,存放销售额*/PRIMARY KEY(ITEM_NO);,ORDBS中扩展的关系数据类型(续),向SALES表插入一个元组:INSERT INTO SALES(ITEM_NO,QTY)VALUES(T-shirt2000,ARRAY200,150,200,100,50,70,80,200,10,20,100,200);查找三月份销售额大于100的商品号:SELECT ITEM_NO FROM SALES WHERE QTY3100;,ORDBS中扩展的关系数据类型(续),4.DISTINCT类型 SQL3新加了一种DISTINCT类型 定义DISTINCT数据类型语法 CREAT TYPE AS FINAL;,ORDBS中扩展的关系数据类型(续),没有使用DISTINCT类型例如,职工的智商字段(IQ)和鞋号字段(SHOE_SIZE)定义成INTEGER类型WHERE SHOE_SIZE IQ,ORDBS中扩展的关系数据类型(续),使用DISTINCT类型重新定义这两字段类型CREAT TYPE SHOE_SIZE_TYPE AS INTEGER FINAL;CREAT TYPE IQ_TYPE AS INTEGER FINAL;SHOE_SIZE_TYPE和IQ _TYPE成为两种不同的数据类型 表达式:WHERE SHOE_SIZE IQ 是非法的如果在定义类型时设置了选项,下面用法也是合法的:WHERE MY_SHOE_SIZE CAST(MY_IQ AS SHOE_SIZE),23.2.2 对象-关系数据库,23.2.2.1 对象关系数据库系统中扩展的关系数据类型23.2.2.2 对象关系数据库系统中扩展的对象类型及其定义 23.2.2.3 参照类型(Reference Type)23.2.2.4 继承性23.2.2.5 子表和超表,ORDBS中扩展的对象类型及其定义,在ORDBMS中,类型(TYPE)具有类(CLASS)的特征,可以看成类1.行对象与行类型定义行类型(ROW TYPE):CREATE ROW TYPE();,ORDBS中扩展的对象类型及其定义(续),创建行类型例3 CREATE ROW TYPE Person_type(pnoNUMBER,nameVARCHAR2(100),addressVARCHAR2(100);,ORDBS中扩展的对象类型及其定义(续),创建基于行类型的表 CREATE TABLE OF;例4 CREATE TABLE person_extent OF Person_type(pno PRIMARY KEY);,ORDBS中扩展的对象类型及其定义(续),2.列对象与对象类型 可以创建一个对象类型,表的属性可以是该对象类型。创建列对象语句如下:CREATE TYPE AS OBJECT();,ORDBS中扩展的对象类型及其定义(续),例5 CREATE TYPE address_objtyp AS OBJECT(streetVARCHAR2(50),cityVARCHAR2(50);CREATE TYPE name_objtyp AS OBJECT(first_nameVARCHAR2(30),last_nameVARCHAR2(30);,ORDBS中扩展的对象类型及其定义(续),创建表,定义其中的属性是对象类型例6 CREATE TABLE people_reltab(Id NUMBER(10),name_obj name_objtyp,address_obj address_objtyp);,ORDBS中扩展的对象类型及其定义(续),3.抽象数据类型(Abastract Data Type,ADT)概念:SQL3允许用户创建指定的带有自身行为说明和内部结构的用户定义类型称为抽象数据类型 定义ADT的一般形式为 CREATE TYPE(所有属性名及其类型说明,定义该类型函数(方法);,ADT的特点,(1)ADT的属性定义和行类型的属性定义类同。(2)在创建ADT的语句中,通过用户定义的函数比较对象的值。(3)ADT的行为通过方法(methods)、函数(functions)实现。(4)SQL3要求抽象数据类型是封装的,而行类型则不要求封装。(5)ADT可以参与类型继承,23.2.2 对象-关系数据库,23.2.2.1 对象关系数据库系统中扩展的关系数据类型23.2.2.2 对象关系数据库系统中扩展的对象类型及其定义 23.2.2.3 参照类型(Reference Type)23.2.2.4 继承性23.2.2.5 子表和超表,23.2.2.3 参照类型(Reference Type),REF类型(参照类型、引用类型)引入的原因:类型之间可能具有相互参照的联系形式 REF 特点:REF类型总是和某个特定的类型相联系。它的值是OID,参照类型(续),创建两个表:Employee和Company,两表之间存在相互参照关系,即某个职工在某个公司工作(1)创建行类型例7 CREATE ROW TYPE employee_type(name VARCHAR(35),age INTEGER);CREATE ROW TYPE Comp_ type(compname VARCHAR(20),location VARCHAR(20);,参照类型(续),(2)创建基于行类型的表:CREATE TABLE Employee OF employee_type;CREATE TABLE Company OF Comp_ type(3)描述参照关系 CREATE ROW TYPE Employment _type(employee REF(employee_type),company REF(Comp_ type);CREATE TABLE Employment OF Employment _type 表Employment中某一个元组的employee属性值是某个职工的OIDcompany属性值是该职工所在公司的OID,23.2.2 对象-关系数据库,23.2.2.1 对象关系数据库系统中扩展的关系数据类型23.2.2.2 对象关系数据库系统中扩展的对象类型及其定义 23.2.2.3 参照类型(Reference Type)23.2.2.4 继承性23.2.2.5 子表和超表,23.2.2.4 继承性,ORDBMS应该支持继承性一般是单继承性例14 CREATE TYPE emp_type UNDER person_type AS(emp_id INTEGER,salary REAL)NOT FINAL;NOT FINAL:表示不是类层次结构中最后的“叶结点”FINAL:该类型是类层次结构的叶结点,23.2.2 对象-关系数据库,23.2.2.1 对象关系数据库系统中扩展的关系数据类型23.2.2.2 对象关系数据库系统中扩展的对象类型及其定义 23.2.2.3 参照类型(Reference Type)23.2.2.4 继承性23.2.2.5 子表和超表,23.2.2.5 子表和超表,超表、子表、子表的子表构成一个表层次结构表层次和类型层次的概念十分相似,子表和超表(续),例15 对于下面的类型层次,先定义这些类型TYPE,然后创建基于这些类型的表,类型层次示例,子表和超表(续),CREATE TYPE person/*创建person 类型,根类型*/(id INTEGER,name VARCHAR(20),birthyear INTEGER,address VARCHAR(40)NOT FINAL;/*NOT FINAL表示可以有子类型*/CREATE TYPE employee/*创建person的子类型employee*/UNDER person/*类型employee继承person的属性*/(salary INTEGER)/*employee定义自己的属性*/NOT FINAL;,子表和超表(续),CREATE TYPE executive/*创建employee的子类型executive*/UNDER employee(bonus INTEGER)FINAL;CREATE TYPE student/*创建person的子类型student*/UNDER person(major VARCHAR(10),wage DECIMAL)FINAL,子表和超表(续),例16Department类型和employee具有相互参照的联系,使用REF来表示这种联系 CREATE TYPE department(ID INTEGER,manager REF(employee),Budget INTEGER);ALTER TYPE employee ADD ATTRIBUTE dept REF(department);,子表和超表(续),定义基于这些类型的基本表和表层次:CREATE TABLE person_table OF person(name WITH OPTIONS NOT NULL);,employee_table是person_table的子表,CREATE TABLE exec_table of executive UNDER employee_table,CREATE TABLE employee_table OF employee UNDER person_table;,子表和超表(续),CREATE TABLE student_table OF student UNDER person_table;CREATE TABLE dept_table OF department(manager SCOPE IS employee_table);/SCOPE IS 用来限定所引用的对象在一个确定的表employee_table的范围内ALTER TABLE employee_table ALTER COLUMN dept ADD SCOPE IS dept_table;,子表和超表(续),查询例16所创建的表例17 SELECT name,address FROM person_table WHERE birthyear=1970;/查询结果包括了person_table、employee_table、exec_table、student_table表上的所有人,子表和超表(续),关闭子表的检索例18 SELECT name,address FROM ONLY person_table WHERE birthyear=1970;/ONLY将检索的对象限制为指定表中的对象,而不是该表和它的子表中的对象,子表和超表(续),INSERT、DELETE、UPDATE对子表和超表的操作规则INSERT:向子表插入一行时一般会在该子表的超表上也插入一行。DELETE:从表删除一行时一般会在该表的超表和子表上也删除相应的一行,23.2 对象关系数据库系统,23.2.1 面向对象数据模型23.2.2 对象-关系数据库23.2.3 小结,23.2.3 小结,OO模型的基本概念对象对象标识OID封装类对象关系数据库系统中扩展的关系数据类型大对象LOBBOOLEAN类型集合类型ARRAYDISTINCT类型,小结(续),对象关系数据库系统中扩展的对象类型行对象与行类型列对象与对象类型抽象数据类型关系对象数据库系统支持继承子表和超表,23.3 OODBMS,23.3.1 ODMG数据模型和ODL ODMG对象数据模型对象数据库管理组ODMG标准中定义的对象数据库模型,借鉴了面向对象程序设计语言和抽象数据类型的思想,表达了对象数据库管理系统中的各种语义,以描述对象的特征和行为。该对象模型可以在模式中显示地说明对象的数据成员、对象之间的联系、以及对象的操作方法。ODMG对象模型是一种可扩充性很强的数据模型,具有继承性、多态性以及很强的实体特征的抽象能力,能够捕捉和描述现实世界中更加丰富的语义。,23.3.1 ODMG数据模型和ODL,ODMG对象模型主要支持以下概念:数据模型的最基本的建模结构是对象。每个对象有一个唯一的标示符。Object对象都有一个类型,同一类型的对象具有相同的状态(特征集)和共同的行为(操作集)。一个对象是某个类型的实例。(Type)一个对象的状态由该对象的特征集来定义和描述,对象的特征可以是对象本身的属性或与其它对象之间的联系。(Property Attribute Relationship)一个对象的行为由一组操作来定义,这些操作可以输入、输出参数,并且可以返回特定类型的结果。利用ODL定义对象数据管理系统的模式。它存储的对象都是模式中定义的类型的实例,即对象,这些对象可以供多个用户和应用共享。,23.3.1 ODMG数据模型和ODL,对象:对象标示符:类:数据类中具有相同属性的对象的集合。类的外延(Extent):类的所有实例构成的集合。如果对象O是类型A的实例,那么它一定是类型A的外延中的元素。如果对象A是类型B的子类型,A的外延是B的外延的子集。类层次和继承:类与类之间的继承关系构成类的层次结构。子类继承超类的属性和方法。父 B person p1子 A student st1 A外延是B外延的子集,23.3.1 ODMG数据模型和ODL,属性,原子类型,结构的类型,ROW ARRAY List of Set of Bag of,联 系-联系描述对象与同一类或不同类的一个或多个对象的关系。逆联系-直观上它是“另一方向”的联系。,状态,23.3.1 ODMG数据模型和ODL,行为,方法 应用到类的对象上的函数。,接口(interface)定义一个类,每个接口可以声明一个区间(extent)它是该类的当前对象集合的名称。如果只操作单个对象,则区间声明可以省略。,例:Interface Movie(extent Movies key movieName)/没有两个对象有相同的movieName值 attribute date start;attribute date end;attribute date movieName;relationship set ShownAt inverse Theater:nowshowing;/一部电影在多个电影院放映Movie类的数据库对象集合称为Movies。“Key”Movie中没有两个对象有相同的MovieName值。Interface Theater(extent Theaters key theaterName)/没有两个对象有相同的movieName值 attribute string TheaterName;attribute string address;attribute integer ticketPrice;relationship set nowshowing inverse Movie:shownAt;/一个电影院正在放映多个电影 int numshowing()/该电影院正在放映多少部电影Movie 的shownAt和Theater的nowshowing联系的声明彼此是互逆的。,定义一个联系 可通过遍历路径的说明来显示地定义一个联系。遍历路径描述了参加联系的两个对象实例间的逻辑连接。遍历路径的是成对进行的,分别用来说明该联系中的不同遍历方向。例:一个教授可以教多门课程,一门课程由某位教授来讲授,可以在professor中定义一个teachers遍历路径,在course中定义一个is-taught-by遍历路径。在两个遍历路径上使用一个inverse子句来指明这两个遍历路径作用在同一个联系上。Class Professor:relationship set teaches Inverse Course:is-taught-by;:;Class Courser:relationship set is-taught-by Inverse Professor:teaches;:;由遍历路径teaches和is-taught-by定义的联系是Professor和Course对象间的一个一对多的联系,这种基数是在遍历说明中进行说明的,一个professor实例通过teaches遍历路径与多个Course实例相关联;一个Course实例通过is-taught-by遍历路径与单个Professor实例相关联。,23.3.2 OQL,国际化标准组织对对象的查询语言OQL进行了标准化。OQL语言的设计基于以下的原理和假设:OQL依赖于ODMG的对象模型。OQL类似于SQL 92,并且对面向对象的概念进行了扩充。例如:复杂对象、对象标示符、路径表达式、多态性、方法调用、动态绑定。OQL提供了处理集合对象、包对象、列表对象和数组对象的基本方法。OQl是一种基于代数操作,可以自由复合的函数式语言。基于同一类型系统,能够在绑定编程语言中调用OQL查询。相反,OQL也调用绑定编程语言的操作。OQL提供对对象的说明性查询。可以容易地定义OQL语言的语义。,23.3.2 OQL,例1 查找正在放映多于一部电影的电影院以及它正在放映的电影。SELECT mname:M.moviename,tname:T.theaterNameFROM Movies M,M.shownAt TWHERE T.numshowing()1SELECT 给出结果字段的名字,两个结果字段的名字分别为mname和tname。FROM 变量M定义为以Movies为区间的每个电影,对于每个给定电影M,变量T定义为M.shownAt集合中的每一个电影院。,分组查询例2 SELECT T.ticketPrice,avgNum:AVG(SELECT()FROM partition P)FROM Theaters T GROUP BY T.ticketPrice 按照电影票价格对电影院进行分组,并使用OQL关键字partition表示。SELECT子句针对每种票价,计算在该票价划分的电影院中正在放映的 平均电影数分组变种例3SELECT low,high,avgNum:AVG(SELECT ing()FROM partition P)FROM Theaters TGROUP BY low:T.ticketPrice=5每个电影院对象T基于它的票价被放于两个划分low和high的一个SELECT中的low和high是布尔变量,对于任何给定的输出元组,只能有一个为真,partition是对应电影院对象的相应划分。结果low为真,avgNum是低票价电影院所放映的平均电影数。结果high为真,avgNum是高票价电影院所放映的平均电影数。,23.3.2 OQL,OQL支持返回汇集例4(SELECT T.theaterName FROM Theaters TORDER BY T.ticketPrice DESC)0:4得到的以票价为顺序的电影院名字列表,0:4抽取一个列表,包含最高票价的前五个电影院的名字。,23.4 OODBMS和ORDBMS的比较,23.4.1 OODBMS和ORDBMS的相似点(1)都支持用户定义的ADT,结构化类型,对象标识符和引用类型及继承(2)两者都支持能操纵集合类型的查询语言,ORDBMS支持SQL的扩展形式 OODBMS支持ODL/OQL(3)ORDBMS试图向RDBMS中加OODBMS特征,而OODBMS也基于关系查询语言开发它的查询语言。(4)OODBMS和ORDBMS都提供DBMS功能。,23.4.2 OODBMS和ORDBMS的不同点,基本原理不同:OODBMS试图向程序设计语言中添加DBMS功能 ORDBMS试图向关系DBMS中添加丰富的数据类型。OODBMS的目标是实现与程序设计语言的无缝集成。而这些集成不是ORDBMS的重要目标。OODBMS的目标是适用于以对 象为中心设计的应用,即典型的用户会话过程的组成是:检索很多对象,在这些对象上进行长时间工作以及偶尔访问相关对象,关注如何对对象的部分内容进行缓存。大部分应用中,一旦对象从磁盘检索到,就能在内存中缓存。关注-使内存对象引用更有效。ORDBMS是以大数据集合为重点的应用而优化设计的。如何优化磁盘访问是一个主要的问题。,