配色: 字号:
chp15
2012-05-06 | 阅:  转:  |  分享 
  
AnIntroductiontoDatabaseSystem中国人民大学信息学院对象关系数据库系统对象关系数据库系统(O
bjectRelationalDatabaseSystem,ORDBS)是面向对象数据模型(ObjectOriented
DataModel,简称OO模型)和关系数据模型相结合的产物三条研究路线以面向对象的程序设计语言为基础,研究持久的程序设
计语言,支持OO模型;建立新的面向对象数据库系统OODBS,支持OO数据模型;以关系数据库和SQL为基础,把面向对象技术融入数
据库系统的ORDBS第十五章对象关系数据库系统15.1面向对象数据模型15.2对象-关系数据库15.3小结
15.1面向对象数据模型面向对象数据库系统支持OO模型面向对象数据库系统:一个持久的、可共享的对象库的存储和管理者对象库
:由一个OO模型所定义的对象的集合体15.1面向对象数据模型15.1.1OO模型的核心概念15.1.2类层次(结
构)15.1.3继承15.1.4对象的嵌套15.1.1OO模型的核心概念1.对象定义:对象是由一组数据结构
和在这组数据结构上的操作的程序代码封装起来的基本单位。组成部分属性(Attribute)集合属性描述对象的状态、组成和特性
方法(Method)集合描述了对象的行为特性OO模型的核心概念(续)2.对象标识OID(ObjectIDentifier
)概念:面向对象数据库中的每个对象都有一个唯一的不变的标识称为对象标识(OID)特点:永久持久性独立于值的、系统全局唯
一的OO模型的核心概念(续)3.封装(Encapsulation)每一个对象是其状态与行为的封装封装是对象的外部界面与
内部实现之间实行清晰隔离的一种抽象,外部与对象的通信只能通过消息对象封装之后查询属性值必须通过调用方法OO模型的核心概念(
续)4.类(Class)对象类(简称类):共享同样属性和方法集的所有对象构成了一个对象类实例:一个对象是某一类的一个实例(
instance)在OODB中,类是“型”,对象是某一类的一个“值”15.1面向对象数据模型15.1.1OO模型
的核心概念15.1.2类层次(结构)15.1.3继承15.1.4对象的嵌套类层次(结构)(续)类层次(结构
)(续)超类/子类之间的关系体现了“ISA”的语义超类是子类的抽象(Generalization)或概括子类是超类的特殊化
(Specialization)或具体化类层次可以动态扩展,一个新的子类能从一个或多个已有类导出15.1面向对象数据模型
15.1.1OO模型的核心概念15.1.2类层次(结构)15.1.3继承15.1.4对象的嵌套15.1
.3继承单继承:一个子类只能继承一个超类的特性(包括属性和方法)层次结构图是一棵树多重继承:一个子类能继承多个超类的特
性层次结构图是一个带根的有向无回路图继承(续)多重继承继承(续)继承性的优点第一,建模的有力工具,提供了对
现实世界简明而精确的描述第二,提供了信息重用机制子类与超类的冲突子类在定义自己特殊属性和方法时可能与继承下来的超类的属性
和方法发生冲突由系统解决15.1面向对象数据模型15.1.1OO模型的核心概念15.1.2类层次(结构)15.
1.3继承15.1.4对象的嵌套15.1.4对象的嵌套对象嵌套:一个对象的属性可以是一个对象,这样对象之间产生
一个嵌套层次结构设Obj1和Obj2是两个对象。如果Obj2是Obj1的某个属性的值,称Obj2属于Obj1,或Obj1包含O
bj2。复杂对象子对象嵌套层次结构对象的嵌套(续)对象的嵌套(续)对象嵌套层次结构和类层次结构形成了对象横向和纵向的复
杂结构各种类之间具有层次结构某一个类内部也具有嵌套层次结构关系模型与OO模型的比较第十五章对象关系数据库系统15.1
面向对象数据模型15.2对象-关系数据库15.3小结15.2对象-关系数据库15.2.1对象关系数据库系
统中扩展的关系数据类型15.2.2对象关系数据库系统中扩展的对象类型及其定义15.2.3参照类型(ReferenceT
ype)15.2.4继承性15.2.5子表和超表对象关系数据库系统中扩展的关系数据类型扩展的类型:LOBBOOL
EAN集合类型ARRAY用户定义的DISTINCT类型等面向对象的数据类型行类型ROWTYPE抽象数据类型(Abstr
actDataType)ORDBS中扩展的关系数据类型(续)大对象LOB(LargeOBject)类型LOB可存
储多达十亿字节的串。LOB分类二进制大对象BLOB(BinaryLargeOBject)BLOB用于存储音频、图像数据
字符串大对象CLOB(CharacterLargeOBject)。CLOB用于存储长字符串数据ORDBS中扩展的关系数
据类型(续)2.BOOLEAN类型布尔类型,支持3个真值:true、false和unknown操作符:NOT、AND、O
R、EVERY、ANY例如WHEREEVERY(QTY>200) 或WHEREANY(QTY>2
00)QTY列为空值:返回unknown;QTY列为非空:当该列的每一个值都使(QTY>200)为true时,EVERY返回
true,否则为false;当该列的每一个值都使(QTY>200)为false时,ANY返回false,否则为true。ORD
BS中扩展的关系数据类型(续)3.集合类型(CollectionType)ARRAY相同类型元素的有序集合称为数组ARRA
YSQL3新增的集合类型允许在数据库的一列中存储数组SQL3的数组只能是一维的数组中的元素不能再是数组ORDBS中扩展
的关系数据类型(续)[例2]CREATETABLESALES(ITEM_NOCHAR(20), /商品号/Q
TYINTEGERARRAY[12], /整数数组,存放销售额/PRIMARYKEY(ITEM_NO));OR
DBS中扩展的关系数据类型(续)向SALES表插入一个元组:INSERTINTOSALES(ITEM_NO,QT
Y)VALUES(‘T-shirt2000’,ARRAY[200,150,200,100,50,70,80,
200,10,20,100,200]);查找三月份销售额大于100的商品号:SELECTITEM_NOF
ROMSALES WHEREQTY[3]>100; ORDBS中扩展的关系数据类型(续)4.DISTIN
CT类型SQL3新加了一种DISTINCT类型定义DISTINCT数据类型语法CREATTYPEname> ASFINAL [ion>] []; ORDBS中扩展的关系数据
类型(续)没有使用DISTINCT类型例如,职工的智商字段(IQ)和鞋号字段(SHOE_SIZE)定义成INTEGER类型W
HERESHOE_SIZE>IQORDBS中扩展的关系数据类型(续)使用DISTINCT类型重新定义这两字段类型C
REATTYPESHOE_SIZE_TYPEASINTEGERFINAL;CREATTYPEIQ_TYPEAS
INTEGERFINAL;SHOE_SIZE_TYPE和IQ_TYPE成为两种不同的数据类型表达式:WHERESH
OE_SIZE>IQ是非法的如果在定义类型时设置了选项,下面用法也是合法的:WHEREMY_S
HOE_SIZE>CAST(MY_IQASSHOE_SIZE)15.2对象-关系数据库15.2.1对象关系数
据库系统中扩展的关系数据类型15.2.2对象关系数据库系统中扩展的对象类型及其定义15.2.3参照类型(Referenc
eType)15.2.4继承性15.2.5子表和超表ORDBS中扩展的对象类型及其定义在ORDBMS中,类型(TY
PE)具有类(CLASS)的特征,可以看成类1.行对象与行类型定义行类型(ROWTYPE):CREATER
OWTYPE();ORDBS中扩
展的对象类型及其定义(续)创建行类型[例3]CREATEROWTYPEPerson_type (
pno NUMBER, name VARCHAR2(100), address VARCHAR2(100)
);ORDBS中扩展的对象类型及其定义(续)创建基于行类型的表CREATETABLE
OF;[例4]CREATETABLEperson_extentOFPerso
n_type(pnoPRIMARYKEY); ORDBS中扩展的对象类型及其定义(续)2.列对象与对象类
型可以创建一个对象类型,表的属性可以是该对象类型。创建列对象语句如下:CREATETYPEe>ASOBJECT();ORDBS中扩展的对象类
型及其定义(续)[例5]CREATETYPEaddress_objtypASOBJECT
(street VARCHAR2(50),city VARCHAR2(50));
CREATETYPEname_objtypASOBJECT(first_name VARCH
AR2(30),last_name VARCHAR2(30));ORDBS中扩展的对象类型及其定
义(续)创建表,定义其中的属性是对象类型[例6]CREATETABLEpeople_reltab(
Id NUMBER(10),name_obj name_objtyp, address_obj
address_objtyp); ORDBS中扩展的对象类型及其定义(续)3.抽象数据类型(AbastractDa
taType,ADT)概念:SQL3允许用户创建指定的带有自身行为说明和内部结构的用户定义类型称为抽象数据类型定义ADT的
一般形式为CREATETYPE( 所有属性名及其类型说明, [定义该类型的等于=
和小于<函数,] 定义该类型其他函数(方法));ADT的特点(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参照类型(ReferenceType)15.2.4继承性15.2.5子表和
超表15.2.3参照类型(ReferenceType)REF类型(参照类型、引用类型)引入的原因: 类型
之间可能具有相互参照的联系形式 REF<类型名>特点:REF类型总是和某个特定的类型相联系。它的值是OID
参照类型(续)创建两个表:Employee和Company,两表之间存在相互参照关系,即某个职工在某个公司工作(1)创建行类
型[例7]CREATEROWTYPEemployee_type(
nameVARCHAR(35),ageINTEGER);
CREATEROWTYPEComp_type(compn
ameVARCHAR(20),locationVARCHAR(20));
参照类型(续)(2)创建基于行类型的表:CREATETABLEEmployeeOFempl
oyee_type;CREATETABLECompanyOFComp_type(3)描述参照
关系CREATEROWTYPEEmployment_type(
employeeREF(employee_type),companyREF
(Comp_type));CREATETABLEEmploymentOFEmployment
_type表Employment中某一个元组的employee属性值是某个职工的OIDcompany属性值是该职工所在公司的
OID参照类型(续)[例8]CREATEROWTYPEemployee_type(
nameVARCHAR(35),ageINTEGER,
emp_idREF(employee_type));[例9]CREATETABLEEmployeeO
Femployee_typeVALUESFORemp_idARESYSTEMGENERATED;参照类
型(续)建立参照属性:<参照属性名>[REF(<类型名>)]SCOPEIS<关系名>[例10]
CREATETABLEaddress_objtabOFaddress_objtyp;[例11]C
REATETABLEpeople_reltab2(idNUMBER(4)PRIMARY
KEY,name_objname_objtyp,addresss_r
efREF(address_objtyp)SCOPEISaddress_objtab)参照类型(续)[例12]
CREATEINDEXaddress_ref_idxON people_reltab2(address_ref);[例
13] SELECTid FROMpeople_reltab2p WHEREp
.address_ref.city=''北京''andp.address_r
ef.street=''牛街'';15.2对象-关系数据库15.2.1对象关系数据库系统中扩展的关系数据类型15.2.2
对象关系数据库系统中扩展的对象类型及其定义15.2.3参照类型(ReferenceType)15.2.4继承性15.
2.5子表和超表15.2.4继承性ORDBMS应该支持继承性一般是单继承性[例14]CREATE
TYPEemp_type UNDERperson_typeAS( emp_id
INTEGER, salaryREAL) NOTFINAL;NOTFINA
L:表示不是类层次结构中最后的“叶结点”FINAL:该类型是类层次结构的叶结点15.2对象-关系数据库15.2.1对象
关系数据库系统中扩展的关系数据类型15.2.2对象关系数据库系统中扩展的对象类型及其定义15.2.3参照类型(Refer
enceType)15.2.4继承性15.2.5子表和超表15.2.5子表和超表超表、子表、子表的子表构成一个表
层次结构表层次和类型层次的概念十分相似子表和超表(续)[例15]对于下面的类型层次,先定义这些类型TYPE,然后创建基于
这些类型的表子表和超表(续)CREATETYPEperson /创建person类型,根类型/
(idINTEGER,nameVARCHAR(20),birthyearINTEGER,
addressVARCHAR(40))NOTFINAL; /NOT
FINAL表示可以有子类型/CREATETYPEemployee /创建person的子类型employee/
UNDERperson /类型employee继承person的属性/(salaryI
NTEGER) /employee定义自己的属性/NOTFINAL; 子表和超表(续)CREAT
ETYPEexecutive /创建employee的子类型executive/UNDERemploye
e (bonusINTEGER)FINAL; CREATETYPEstudent
/创建person的子类型student/UNDERperson(majorVARC
HAR(10),wageDECIMAL)FINAL子表和超表(续)[例16]Department类型和em
ployee具有相互参照的联系,使用REF来表示这种联系CREATETYPEdepartment
(IDINTEGER,managerREF(employee),Budg
etINTEGER);ALTERTYPEemployeeADDATTRIBUTEdeptREF(dep
artment);子表和超表(续)定义基于这些类型的基本表和表层次:CREATETABLEperson_tableOF
person (nameWITHOPTIONSNOTNULL);子表和超表(续)CR
EATETABLEstudent_tableOFstudentUNDERperson_table;
CREATETABLEdept_tableOFdepartment(managerSCOPEIS
employee_table);ALTERTABLEemployee_tableALTERCOLUMN
deptADDSCOPEISdept_table;子表和超表(续)查询[例16]所创建的表[例17]
SELECTname,addressFROMperson_tableWHER
Ebirthyear<=1970;子表和超表(续)关闭子表的检索[例18]SELECTname
,addressFROMONLYperson_tableWHEREbirthyear
<=1970;子表和超表(续)INSERT、DELETE、UPDATE对子表和超表的操作规则INSERT:向子表插入一行时
一般会在该子表的超表上也插入一行。DELETE:从表删除一行时一般会在该表的超表和子表上也删除相应的一行第十五章对象关系数
据库系统15.1面向对象数据模型15.2对象-关系数据库15.3小结15.3小结OO模型的基本概念对象
对象标识OID封装类对象关系数据库系统中扩展的关系数据类型大对象LOBBOOLEAN类型集合类型ARRAYDISTINCT类型小结(续)对象关系数据库系统中扩展的对象类型行对象与行类型列对象与对象类型抽象数据类型关系对象数据库系统支持继承子表和超表类型层次示例employee_table是person_table的子表CREATETABLEexec_tableofexecutiveUNDERemployee_tableCREATETABLEemployee_tableOFemployeeUNDERperson_table; 数据库系统概论AnIntroductiontoDatabaseSystem第十五章对象关系数据库系统教员、行政人员、工人中只有本身的特殊属性和方法同时它们又继承教职员工类和人的所有属性和方法逻辑上它们具有人、教职员工和本身的所有属性和方法图15.1学校数据库的类层次结构图具有多继承的类层次结构图汽车的嵌套层次图表15.1关系数据模型与OO模型的比较强弱模式演化能力继承、组合主外码联系,数据依赖数据间关系有无封装性有无抽象数据类型方法关系操作动态行为属性属性静态性质OID码数据标识符类二维表基本数据结构面向对象数据模型关系数据模型内容
献花(0)
+1
(本文系小海的幸福...首藏)