1、 中国人民大学信息学院中国人民大学信息学院 数据库系统概论数据库系统概论An Introduction to Database System第十五章第十五章 对象关系数据库系统对象关系数据库系统对象关系数据库系统对象关系数据库系统v 对象关系数据库系统(Object Relational Database System,ORDBS)是面向对象数据模型(Object Oriented Data Model,简称OO模型)和关系数据模型相结合的产物v 三条研究路线 以面向对象的程序设计语言为基础,研究持久的程序设计语言,支持OO模型;建立新的面向对象数据库系统OODBS,支持OO数据模型;以关系数
2、据库和SQL为基础,把面向对象技术融入数据库系统的ORDBS 第十五章第十五章 对象关系数据库系统对象关系数据库系统15.1 面向对象数据模型面向对象数据模型15.2 对象对象-关系数据库关系数据库15.3 小结小结15.1 面向对象数据模型面向对象数据模型v面向对象数据库系统支持OO模型模型v面向对象数据库系统:面向对象数据库系统:一个持久的、可共享的对象库的存储和管理者v对象库对象库:由一个OO模型所定义的对象的集合体 15.1 面向对象数据模型面向对象数据模型15.1.1 OO模型的核心概念模型的核心概念15.1.2 类层次类层次(结构结构)15.1.3 继承继承15.1.4 对象的嵌套
3、对象的嵌套15.1.1 OO模型的核心概念模型的核心概念1.对象v定义:对象是由一组数据结构和在这组数据结构上的操作的程序代码封装起来的基本单位。v组成部分 属性(Attribute)集合属性描述对象的状态、组成和特性 方法(Method)集合描述了对象的行为特性OO模型的核心概念模型的核心概念(续续)2.对象标识OID(Object IDentifier)v概念:面向对象数据库中的每个对象都有一个唯一的不变的标识称为对象标识(OID)v特点:永久持久性 独立于值的、系统全局唯一的OO模型的核心概念模型的核心概念(续续)3.封装(Encapsulation)v 每一个对象是其状态与行为的封装
4、v 封装是对象的外部界面与内部实现之间实行清晰隔离的一种抽象,外部与对象的通信只能通过消息 v 对象封装之后查询属性值必须通过调用方法 OO模型的核心概念模型的核心概念(续续)4.类(Class)v对象类对象类(简称类):共享同样属性和方法集的所有对象构成了一个对象类v实例实例:一个对象是某一类的一个实例(instance)v在OODB中,类是“型”,对象是某一类的一个“值”15.1 面向对象数据模型面向对象数据模型15.1.1 OO模型的核心概念模型的核心概念15.1.2 类层次类层次(结构结构)15.1.3 继承继承15.1.4 对象的嵌套对象的嵌套类层次类层次(结构结构)(续续)n教员、
5、行政人员、工人中只有本身的特殊属性和方法n同时它们又继承教职员工类和人的所有属性和方法n逻辑上它们具有人、教职员工和本身的所有属性和方法 图15.1 学校数据库的类层次结构图 类层次类层次(结构结构)(续续)v 超类/子类之间的关系体现了“IS A”的语义 超类是子类的抽象(Generalization)或概括 子类是超类的特殊化(Specialization)或具体化v 类层次可以动态扩展,一个新的子类能从一个或多个已有类导出 15.1 面向对象数据模型面向对象数据模型15.1.1 OO模型的核心概念模型的核心概念15.1.2 类层次类层次(结构结构)15.1.3 继承继承15.1.4 对象
6、的嵌套对象的嵌套15.1.3 继承继承v单继承:一个子类只能继承一个超类的特性(包括属性和方法)层次结构图是一棵树 v多重继承:一个子类能继承多个超类的特性 层次结构图是一个带根的有向无回路图 继承继承(续续)v多重继承 具有多继承的类层次结构图 继承继承(续续)v继承性的优点 第一,建模的有力工具,提供了对现实世界简明而精确的描述 第二,提供了信息重用机制 v子类与超类的冲突 子类在定义自己特殊属性和方法时可能与继承下来的超类的属性和方法发生冲突 由系统解决15.1 面向对象数据模型面向对象数据模型15.1.1 OO模型的核心概念模型的核心概念15.1.2 类层次类层次(结构结构)15.1.
7、3 继承继承15.1.4 对象的嵌套对象的嵌套15.1.4 对象的嵌套对象的嵌套v对象嵌套:一个对象的属性可以是一个对象,这样对象之间产生一个嵌套层次结构 设Obj1和Obj2是两个对象。如果Obj2是Obj1的某个属性的值,称Obj2属于Obj1,或Obj1包含Obj2。复杂对象子对象嵌套层次结构对象的嵌套对象的嵌套(续续)汽车的嵌套层次图 对象的嵌套对象的嵌套(续续)v对象嵌套层次结构和类层次结构形成了对象横向和纵向的复杂结构 各种类之间具有层次结构 某一个类内部也具有嵌套层次结构 关系模型与关系模型与OO模型的比较模型的比较表15.1 关系数据模型与OO模型的比较内容关系数据模型面向对象
8、数据模型基本数据结构二维表类数据标识符码OID静态性质属性属性动态行为关系操作方法抽象数据类型无有封装性无有数据间关系主外码联系,数据依赖继承、组合模式演化能力弱强第十五章第十五章 对象关系数据库系统对象关系数据库系统15.1 面向对象数据模型面向对象数据模型15.2 对象对象-关系数据库关系数据库15.3 小结小结15.2 对象对象-关系数据库关系数据库15.2.1 对象关系数据库系统中扩展的关系数据类型对象关系数据库系统中扩展的关系数据类型15.2.2 对象关系数据库系统中扩展的对象类型及其定义对象关系数据库系统中扩展的对象类型及其定义 15.2.3 参照类型参照类型(Reference
9、Type)15.2.4 继承性继承性15.2.5 子表和超表子表和超表对象关系数据库系统中扩展的关系数据类型对象关系数据库系统中扩展的关系数据类型v扩展的类型:LOB BOOLEAN 集合类型ARRAY 用户定义的DISTINCT类型等 面向对象的数据类型行类型ROW TYPE抽象数据类型(Abstract Data Type)ORDBS中扩展的关系数据类型中扩展的关系数据类型(续续)1.大对象LOB(Large OBject)类型v LOB可存储多达十亿字节的串。v LOB分类二进制大对象BLOB(Binary Large OBject)BLOB用于存储音频、图像数据字符串大对象CLOB(C
10、haracter Large OBject)。CLOB用于存储长字符串数据 ORDBS中扩展的关系数据类型中扩展的关系数据类型(续续)2.BOOLEAN类型 v 布尔类型,支持3个真值:true、false和unknownv 操作符: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
11、中扩展的关系数据类型中扩展的关系数据类型(续续)3.集合类型(Collection Type)ARRAY v 相同类型元素的有序集合称为数组ARRAY SQL3新增的集合类型 允许在数据库的一列中存储数组v SQL3的数组只能是一维的 数组中的元素不能再是数组ORDBS中扩展的关系数据类型中扩展的关系数据类型(续续)例2CREATE TABLE SALES(ITEM_NO CHAR(20),/*商品号*/QTY INTEGER ARRAY12,/*整数数组,存放销售额*/PRIMARY KEY(ITEM_NO);ORDBS中扩展的关系数据类型中扩展的关系数据类型(续续)v 向SALES表插入一
12、个元组:INSERT INTO SALES(ITEM_NO,QTY)VALUES (T-shirt2000,ARRAY200,150,200,100,50,70,80,200,10,20,100,200);v 查找三月份销售额大于100的商品号:SELECT ITEM_NO FROM SALES WHERE QTY3100;ORDBS中扩展的关系数据类型中扩展的关系数据类型(续续)4.DISTINCT类型 v SQL3新加了一种DISTINCT类型 v 定义DISTINCT数据类型语法 CREAT TYPE AS FINAL ;ORDBS中扩展的关系数据类型中扩展的关系数据类型(续续)v没有使
13、用DISTINCT类型 例如,职工的智商字段(IQ)和鞋号字段(SHOE_SIZE)定义成INTEGER类型 WHERE SHOE_SIZE IQORDBS中扩展的关系数据类型中扩展的关系数据类型(续续)v 使用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 M
14、Y_SHOE_SIZE CAST(MY_IQ AS SHOE_SIZE)15.2 对象对象-关系数据库关系数据库15.2.1 对象关系数据库系统中扩展的关系数据类型对象关系数据库系统中扩展的关系数据类型15.2.2 对象关系数据库系统中扩展的对象类型及其定义对象关系数据库系统中扩展的对象类型及其定义 15.2.3 参照类型参照类型(Reference Type)15.2.4 继承性继承性15.2.5 子表和超表子表和超表ORDBS中扩展的对象类型及其定义中扩展的对象类型及其定义v 在ORDBMS中,类型(TYPE)具有类(CLASS)的特征,可以看成类1.行对象与行类型行对象与行类型n定义行类
15、型(ROW TYPE):CREATE ROW TYPE ();ORDBS中扩展的对象类型及其定义中扩展的对象类型及其定义(续续)n创建行类型例3 CREATE ROW TYPE Person_type(pnoNUMBER,nameVARCHAR2(100),addressVARCHAR2(100);ORDBS中扩展的对象类型及其定义中扩展的对象类型及其定义(续续)n创建基于行类型的表 CREATE TABLE OF;例4 CREATE TABLE person_extent OF Person_type (pno PRIMARY KEY);ORDBS中扩展的对象类型及其定义中扩展的对象类型及其
16、定义(续续)2.列对象与对象类型列对象与对象类型 v可以创建一个对象类型,表的属性可以是该对象类型。v创建列对象语句如下: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中扩展的对象类型及其定义中扩展的对象类
17、型及其定义(续续)n创建表,定义其中的属性是对象类型例6 CREATE TABLE people_reltab(IdNUMBER(10),name_objname_objtyp,address_obj address_objtyp);ORDBS中扩展的对象类型及其定义中扩展的对象类型及其定义(续续)3.抽象数据类型(Abastract Data Type,ADT)v 概念:SQL3允许用户创建指定的带有自身行为说明和内部结构的用户定义类型称为抽象数据类型 v 定义ADT的一般形式为 CREATE TYPE (所有属性名及其类型说明,定义该类型的等于和小于函数,定义该类型其他函数(方法);ADT
18、的特点的特点(1)ADT的属性定义和行类型的属性定义类同。(2)在创建ADT的语句中,通过用户定义的函数比较对象的值。(3)ADT的行为通过方法(methods)、函数(functions)实现。(4)SQL3要求抽象数据类型是封装的,而行类型则不要求封装。(5)ADT有3个通用的系统内置函数(6)ADT可以参与类型继承15.2 对象对象-关系数据库关系数据库15.2.1 对象关系数据库系统中扩展的关系数据类型对象关系数据库系统中扩展的关系数据类型15.2.2 对象关系数据库系统中扩展的对象类型及其定义对象关系数据库系统中扩展的对象类型及其定义 15.2.3 参照类型参照类型(Referenc
19、e Type)15.2.4 继承性继承性15.2.5 子表和超表子表和超表15.2.3 参照类型参照类型(Reference Type)vREF类型(参照类型、引用类型)引入的原因:类型之间可能具有相互参照的联系 形式 REF 特点:REF类型总是和某个特定的类型相联系。它的值是OID参照类型参照类型(续续)v创建两个表:Employee和Company,两表之间存在相互参照关系,即某个职工在某个公司工作(1)创建行类型例7 CREATE ROW TYPE employee_type(name VARCHAR(35),age INTEGER);CREATE ROW TYPE Comp_ typ
20、e(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中某一个元组的e
21、mployee属性值是某个职工的OIDcompany属性值是该职工所在公司的OID 参照类型参照类型(续续)例8 CREATE ROW TYPE employee_type(name VARCHAR(35),age INTEGER,emp_id REF(employee_type);例9 CREATE TABLE Employee OF employee_type VALUES FOR emp_id ARE SYSTEM GENERATED;参照类型参照类型(续续)v 建立参照属性:REF()SCOPE IS 例10 CREATE TABLE address_objtab OF address
22、_objtyp;例11 CREATE TABLE people_reltab2(id NUMBER(4)PRIMARY KEY,name_obj name_objtyp,addresss_ref REF(address_objtyp)SCOPE IS address_objtab)参照类型参照类型(续续)例12CREATE INDEX address_ref_idx ON people_reltab2(address_ref);例13SELECT id FROM people_reltab2 p WHERE p.address_ref.city=北京 and p.address_ref.str
23、eet=牛街;15.2 对象对象-关系数据库关系数据库15.2.1 对象关系数据库系统中扩展的关系数据类型对象关系数据库系统中扩展的关系数据类型15.2.2 对象关系数据库系统中扩展的对象类型及其定义对象关系数据库系统中扩展的对象类型及其定义 15.2.3 参照类型参照类型(Reference Type)15.2.4 继承性继承性15.2.5 子表和超表子表和超表15.2.4 继承性继承性v ORDBMS应该支持继承性 一般是单继承性v 例14 CREATE TYPE emp_type UNDER person_type AS(emp_id INTEGER,salary REAL)NOT FI
24、NAL;nNOT FINAL:表示不是类层次结构中最后的“叶结点”nFINAL:该类型是类层次结构的叶结点15.2 对象对象-关系数据库关系数据库15.2.1 对象关系数据库系统中扩展的关系数据类型对象关系数据库系统中扩展的关系数据类型15.2.2 对象关系数据库系统中扩展的对象类型及其定义对象关系数据库系统中扩展的对象类型及其定义 15.2.3 参照类型参照类型(Reference Type)15.2.4 继承性继承性15.2.5 子表和超表子表和超表15.2.5 子表和超表子表和超表v 超表、子表、子表的子表构成一个表层次结构v 表层次和类型层次的概念十分相似子表和超表子表和超表(续续)例
25、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)/*emplo
26、yee定义自己的属性*/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
27、INTEGER,manager REF(employee),Budget INTEGER);ALTER TYPE employee ADD ATTRIBUTE dept REF(department);子表和超表子表和超表(续续)v 定义基于这些类型的基本表和表层次:nCREATE TABLE person_table OF person (name WITH OPTIONS NOT NULL);employee_table是person_table的子表nCREATE TABLE exec_table of executive UNDER employee_tablenCREATE TABL
28、E 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);ALTER TABLE employee_table ALTER COLUMN dept ADD SCOPE IS dept_table;子表和超表子表和超表(续续)v查询例16所创建的表例17 SELECT name
29、,address FROM person_table WHERE birthyear=1970;子表和超表子表和超表(续续)v关闭子表的检索例18 SELECT name,address FROM ONLY person_table WHERE birthyear=1970;子表和超表子表和超表(续续)vINSERT、DELETE、UPDATE对子表和超表的操作规则 INSERT:向子表插入一行时一般会在该子表的超表上也插入一行。DELETE:从表删除一行时一般会在该表的超表和子表上也删除相应的一行 第十五章第十五章 对象关系数据库系统对象关系数据库系统15.1 面向对象数据模型面向对象数据模型15.2 对象对象-关系数据库关系数据库15.3 小结小结15.3 小结小结vOO模型的基本概念 对象 对象标识OID 封装 类v对象关系数据库系统中扩展的关系数据类型 大对象LOB BOOLEAN类型 集合类型ARRAY DISTINCT类型小结小结(续续)v对象关系数据库系统中扩展的对象类型 行对象与行类型 列对象与对象类型 抽象数据类型v关系对象数据库系统支持 继承 子表和超表