资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
对象关系数据库. 关系模型与对象模型1. 关系模型的特点 强调数据的独立性(以数据为中心),数据与程序分离。 采用关系模型、概念单一,实体和联系都是用关系来表示。 关系必须是规范化的关系,要求每一分量不可再分。 支持关系语言,具有高度非过程化,支持集合运算 通过外来码实现表的连接(多表查询)2. 扩充的类型系统 是对关系数据模型进行的扩充。 提供更为丰富的面向对象的类型系统。 扩充的类型系统允许元组的属性值为复杂类型,在关系查询语言中增加处 理新数据类型的成分。(a)既保留关系模型基础(b)又提高建模能力 对象关系模型为希望使用面向对象特征的关系数据库用户提供可能。3. 面向对象数据库 数据库中不是只存储单纯的数据,而是存储包含属性和方法的对象。 对于一个数据库对象,可定义在其上运行的过程和函数。使数据库中的数 据和访问该数据的方法联系起来,可标准化数据访问的方法并提高对象的可复 用性。应用逻辑从应用程序中移动到数据库中(对象方法) 创建通用的数据库对象,并能成为数据库对象的标准,可实现数据库对象 的重用。4. 对象模型与关系模型对象模型 对象类型的属性描述 对象类型的方法封装了操作该对象的代码。提供了处理数据库中数据的界 面。关系模型 二维表中列的定义 没有方法a.另编程b可使用操作某数据库表的存储过程。面向对象数据模型中的类概念实体集概念。 面向对象数据模型中的对象概念实体概念5. Oracle 的扩充类型(1)Oracle 是一个开放的类型系统,增加了复杂的数据类型以及用户自定义 类型(2)用户定义的数据类型使得可以在数据库中为现实世界的对象建模对象类型(记录类型) 数组类型嵌套表类型(3)创建对象表,实现面向对象的数据库设计(而非关系型数据库设计)。应用逻辑从应用程序中移动到数据库中(对象方法)二. 利用对象类型定义复合数据类型1. 用户自定义数据类型 使用对象类型定义一个记录数据类型 CREATE TYPE name_type AS OBJECT( first_name VARCHAR2(4), last_name VARCHAR2(4) ) ;CREATE TYPE address_type AS OBJECT( city VARCHAR2(10), street VARCHAR2(10), zip NUMBER(6) ) ;CREATE TABLE worker( wid NUMBER(5) PRIMARY KEY, wname name_type , address address_type ) ;2. 对象类型数据的操作使用对象类型声明了关系表中的列,DML语句必须用一些特殊的语法(2) 插入新记录时,对于对象类型的列,要使用构造函数构造出对应类型的数据。(3) 构造函数是对象类型的特殊方法,利用此方法为该类型创建对象。构造方法 的名称与对象类型(类)同名。(4) 对记录型数据的分量进行操作时,要使用别名 插入语句例:insert into worker values(l,name_type(王,至远), address_type(北京,白颐路 5 号,100084);insert into worker values(2,name_type(,张,大年), address_type(,天津,康宁里 20 号,300072);insert into worker values(3,name_type(赵,力平), address_type(上海,南京路 23 号,200092);查询语句 1 :select * from worker ; 查询语句 2 : select wid, wname from worker;WIDNAME(FIRST_NAME, LAST_NAME)1 NAME_TYPE(,王,至远)2 NAME_TYPE(,张,大年)3 NAME_TYPE(,赵,力平)3. 对象类型数据的查询 查询语句 3 (用别名 )select wid 顾客编号,w.address.city 城市,w.address.street 街道,w.address.zip 邮编 from worker w ;查询语句 4(别名的使用)select * from worker w order by w.address.zip ;4. 对象类型数据的操作修改update worker w set w.address.zip=100083 where wid=1 ;删除delete from worker where wid=1;delete from worker w where w.wname.first_name=张; 修改表结构alter table cust add(address1 address_type);不能对表修改自定义的数据类型格式 5用户自定义数据类型(1) 对象类型更加贴近现实世界的数据特征。(2) 使用对象类型可以更加统一、自然地声明和操作表中的数据 (在整个数 据库中地址一致性)(3) 创建可为大家引用的新数据类型:a.创建一个模式(如pub)b.建立公共对象类型(新数据类型)c.设置必要的权限(4) 使用CREATE PROCEDURE new_worker(wid NUMBER , name pub.name_type , address pub.address_type ) ;6. 自定义数据类型上的索引create index aaa on worker(wname);ORA-02327:无法在具有数据类型ADT的列上创建索引。(即使在 name_type 类中定义了排序方法也不可以)(1) 如经常进行如下查询:select wid 顾客编号,w.address.city 城市,w.address.street 街道w.address.zip 邮编 from worker w where w.address.zip=100084 ;(2) 可建索引如下:create index I_zip on worker(address.zip);三使用对象表 面向对象数据库设计1. 建立对象表的类 建类型(对象类型声明) create type 类型名 as object(=属性名1类型说明,I属性说明属性名2类型说明, member function函数名(参数说明)return返回类型,卜方法说明member procedure过程名(参数说明), );2. 对象属性类型 对象类型必须包含一个或多个属性,属性的类型可以是:Oracle的原始数据类型LOB对象对象的引用(REF)收集(COLLECTION )等3. 对象方法(1) 方法是一个过程或函数, 是对象类型定义的一部分,是程序员编写的用 于操纵对象属性的子程序,被封装在对象类型中。(2) 方法的种类:a.成员方法(member)b.构造方法(constructor)c.MAP或ORDER方法(排序方法)(3) 一个类可以有多个方法(也可以不定义方法)(4) 对象类型不存储数据;必须创建相应的表来存储数据4. 编写方法代码 建类型体(实现类成员方法) create type body 类型名 ASmember function函数方法名(参数说明) return返回类型is说明部分begin执行部分end ;member procedure过程方法名(参数说明)is说明、部分士5. eg建立对象表执行部分end ;方法实现 方法实现建对象表Create table 表名 of 对象类型( ) ; 例:CREATE TYPE employee_type AS OBJECT(.) ;CREATE TABLE employees OF employee_type(empno constraint e1 primary key );表定义的其他说明,如完整性约束等,表的列不能再定义CREATE TYPE BODY employee_type(.;6. 建立对象类型例CREATE TYPE employee_type AS OBJECT ( Empno NUMBER(3), Ename VARCHAR2(10), sal NUMBER(6,2), hiredate DATE ,MEMBER FUNCTIONdays_at_companyEND ;RETURN NUMBER,MEMBER PROCEDUREraise_salary(increment_sal NUMBER);/ 7. 创建对象表CREATE TABLE employees OF employee_type (PRIMARY KEY(empno),UNIQUE(ename),CHECK(sal300);8. 建立对象类型体CREATE OR REPLACE TYPE BODY employee_type ASMEMBER FUNCTION days_at_companyRETURN NUMBER IS BEGINRETURN floor(sysdate - hiredate);END;MEMBER PROCEDUREraise_salary(increment_sal NUMBER) ISBEGINUPDATE employeesSET sal = sal + increment_salWHERE empno = SELF.empno; END;END;9. 对方法的限制(1) 编译软件包中的函数或过程时 , 可以使用 PRAGMA 编译指令通知 PL/SQL 编译器禁止某方法对数据库表和包中的变量读写 , 当方法体中出现违反 情况时, 编译出错。(2) 格式:PRAGMA RESTRICT_REFERENCES ( function_name, WNDS , WNPS , RNDS , RNPS );WNDS 不允许写数据库RNDS 不允许读数据库WNPS 不允许改程序包变量RNPS 不允许引用程序包变量CREATE OR REPLACE TYPE employee_type AS OBJECT ( empno NUMBER, ename VARCHAR2(10), sal NUMBER, hiredate DATE ,MEMBER FUNCTIONdays_at_companyRETURN NUMBER,MEMBER PROCEDUREraise_salary(increment_sal NUMBER) ,PRAGMA RESTRICT_REFERENCES (days_at_company, WNDS , WNPS ) );10. 对象类型-构造子方法(1)Oracle 自动地为每个对象类型创建一个构造方法。(2)构造子方法的名称采用对象类型名。(3)构造子方法的参数即对象类型的所有属性。(4)构造子方法初始化一个对象类型的实例, 并将它的属性赋值。(5)例:insert into employees values(employee_type(l , Jone , 500 , 5-10 月-19
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号