第10章对象关系数据库
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.3.6 方法、函数和过程3
SQL3支持过程,如auther_count可写成过程: create procedure auther_count_proc(in title varchar(20),out a_count integer) begin select count(author) into a_count from authors where suthors.title=title; end
10.2 对象联系图
对象联系图是实体联系图的一种扩充形式,用 于表达系统中各对象之间的相互关系,不仅能 描述关系中基本的数据结构,还可以用来表达 面向对象技术中嵌套、递归的数据结构。 10.2.1 对象联系图的成分 10.2.2 学校、教师和教材对象联系图 10.2.2 数据的泛化/细化的描述
10.2.2 学校教师和教材对象联系图
10.2.3 数据的泛化/细化的描述
当在较低层上抽象表达了与之联系的较高层上 抽象的特殊情况时,就称较高层上抽象是较低 层上抽象的“泛化”,而较低层上抽象是较高 层上抽象的“细化”。 其中,较高层的对象类型称为“超类 型”(Supertype),较低层的对象类型称为“子 类型”(SubType)。 子类型具有继承性,能继承超类型的特征,而 子类型本身又有其他的特征。
10.3.2 定义结构类型
车间与职工的嵌套关系 Dept(dno,dname,staff(empno,ename,age)) 可用下列形式定义: create type Employee(empno char(8), ename varchar(20), age integer); create type Department(dno char(8), dname Varchar(20), staff setof(Employee));
10.3.4 继承性的定DB中,提供了对继承的支持,继承性可 以发生在类型一级或表一级。 类型级的继承性是指在定义一个类时可以从已 存在的类中继承相关的属性。表级的继承性是 指一个表可继承上级表的属性。 类继承性:定义学生类型 create type Student (degree Varchar, department Varchar) under Person;
10.3.5部门雇员引用类型定义
create table Dept(dno integer, dname varchar(20), staff setof(ref(Emp))); create table Emp(empno integer, ename varchar(20), sex varchar(20), Age integer, Works_for ref(Dept));
10.1 10.2 10.3 10.4 10.5 10.6 10.7
对象关系数据模型 对象联系图 ORDB的定义语言 ORDB的查询语言 OODB与ORDB的比较 小结 习题
10.1 对象关系数据模型
传统关系模型称为“平面关系模型” ,不允许表中有表。 在传统关系数据模型基础上,增加了元组、数组、集合 等数据类型,以及提供了处理新数据类型操作的能力, 并具有继承性和对象标识等面向对象特点,这样的数据 模型,称为“对象关系数据模型”。基于对象关系数据 模型的DBS称为“对象关系数据库系统”(ORDBS)。 对象关系模型是对关系模型的发展,与传统的关系模型 兼容,因此许多概念,如实体标识、多值属性、泛化/细 化等,都可以直接引用,而无需经过变换转化。原来 SQL语言照样可用,只不过扩充了更强的功能。 对象关系模型使用对象联系图来描述系统结构。
10.3 ORDB的定义语言
10.3.1 10.3.2 10.3.3 10.3.4 10.3.5 10.3.6 10.3.7
ORDB的数据类型 结构类型 集合、数组和大对象 继承性的定义 引用类型的定义 方法、函数和过程 SQl3过程语句
10.3.1 ORDB的数据类型
10.3.6 方法、函数和过程1
定义结构类型时创建方法。如:
create type Employee as( name varchar(20), salary integer) method give_raise(percent integer)) create method give_raise(percent integer) for Employee Begin set self.salary= self.salary+( self.salary*percent)/100; end
10.3.3 定义集合、数组和大对象
create type NameArray varchar[10]; /*定义NameArray即是数组类型*/ create type CourseGrade(course Varchar(20), grade integer); create type StudentCourse (name Varchar(20), cg setof(course)); /*定义StudentGrade由姓名和课程成绩表构成*/ create table sc of StudentCourse; /*定义表sc为结构StudentCourse的集合*/
10.3.7 SQl3过程语句
用SQl3构造过程,几乎可使用通用语言的 所有功能,使用分支或循环结构。它提供 以下语句: while <条件> do set… end while repeat set …until <条件> end repeat for <变量> as …do set… end for if <条件> then set… else…end if case语句
10.3.5 引用类型的定义
递归嵌套结构:在部门类型与雇员类型的联系中,定义 了元组类型Dept与Emp。 Dept(dno,dname,emp(eno,ename,age)) Emp(eno,ename,age,Dept(dno,dname)) 在Dept类中包括了Emp类,表示个部门有哪些雇员。在 Emp类中又要包括Dept类,表示雇员在哪个部门工作。
复合类型有四种: (1) 结构类型:不同类型元素的有序集合称为结构。 如日期可由日月年三部分组成(如:8,July,2002)。 (2) 数组类型:同类元素的有序集合,称数组。 (3) 多集类型:同类元素的无序集合(成员可多次出现), 称为多集(Multiset)。例如成绩集{80,70,80,80}。 (4) 集合类型:同类元素的无序集合(每个成员只能出 现一次),称为集合(Set)。例如课程集:{MATHS, PHYSICS,PL,OS,DB}。 数据类型可以嵌套。
10.4.3 嵌套与解除嵌套
查询结果可以嵌套关系形式显示,也可以INF(非嵌套)形 式显示。将一个嵌套关系转换成INF的过程称为解除嵌套。
例10_5:在上例中,如果希望查询结果为嵌套关系,那 么可在属性(fno,fname)上对关系进行嵌套,语句如下: SELECT A.unme,set(B.fno,B.fname) as teachers FROM university as A,A.staff as B,B.teach as C
10.2.1 对象联系图的成分
用实线表示对象之间的联系。 椭圆代表对象类型(相当于实体类型)。 小圆圈表示属性是基本数据类型(整型、实型、字符串)。 椭圆之间的边表示对象之间的“引用”。 单箭头(→)表示属性值是单值(属性可以是基本数据类型, 也可以是另一个对象类 型)。 双箭头(→→)表示属性值是多值(属性可以是基本数据类 型,也可以是另一个对象类型)。 双线箭头( )表示超类与子类间的联系(从子类指向超类)。 双向箭头()表示两个属性之间值的联系为逆联系。
10.2.3带泛化边的对象联系图
10.3 ORDB的定义语言
对象关系数据库系统支持更复杂的数据类型, 如结构类型、元组、数组、集合数据类型,支 持继承和引用,与关系模型兼容,因此原来支 持关系模型的SQL语言也照样可用。 在SQL99标准中提供了对对象关系模型数据库 的支持。 本小节介绍ORDB的定义语言,主要包括ORDB 的数据类型的定义、继承性和引用类型的定义 等内容。
10.3.6 方法、函数和过程2
SQL支持函数: create function Publisher(x varchar(20),y varchar(20)) return Publisher Begin set name=x; set branch=y; end
WHERE C.editor.uname=A.uname
GROUP BY A.uname;
10.5 OODB与ORDB的比较
OODB ORDB
从OOPLC++出发引入持久数据概 念,能操作DB形成持久化C++
导航式查询
从SQL出发,引入复合类型、继 承性、引用类型等概念
结构化查询
符合面向对象语言
显式联系 惟一的对象标识符 能够表示“关系”
符合第4代语言
隐式联系 用主键标识记录 能够表示“对象”
10.6 小结
在传统关系模型基础上引入面向对象功能,提供复合数 据类型,这种模型称为对象关系模型。 支持对象关系模型的DBS称为ORDBS。 对于ORDB的设计,常用的方法是采用对象联系图法。 对象联系图是实体联系图的扩充,是面向对象数据模型 中数据结构的一种重要图例表示方法。它使用了对象标 识的概念,使结构的嵌套和递归成为可能。 在SQL3中已收入了面向对象的内容,扩充的SQL3适应对 象概念并提供一个高级接口。
10.4.1 以关系为值的属性
允许表达式出现在任何关系名可以出现的地方,比如 FROM子句或SELECT子句中。表达式可灵活地用于处理 嵌套关系结构。 例10_1: 检索讲授“maths”课,采用“Math”教材的教 工号和姓名。 SELECT fno,fname FROM faculty WHERE ('maths','Math') IN teach; 例10_2: 检索每一位教师开设的课程。 SELECT A.fname, ame FROM faculty as A, A.teach as B;
10.3.4 表级继承性
先用SQL定义一个表People: create table person (name Varchar, social_number integer); 然后再用继承性定义另个表student: create table Student (degree Varchar, department Varchar) under Person;
10.4 ORDB的查询语言
对面向对象数据库进行查询仍可用SQL语句实 现。对SQL语言的SELECT句型进行扩充便能处 理带有复合类型、嵌套及引用类型。 本节以学校、员工和教材ORDB为例,介绍面 向对象的SELECT句型的用法。 10.4.1 以关系为值的属性 10.4.2 路径表达式 10.4.3 嵌套与解除嵌套
10.4.2 路径表达式
例10_3:检索长沙地区的大学校长姓名。 SELECT uname,president.fname FROM university WERE city=‘changsha’; 例10_4:检索长沙地区各大学超过50岁的教师姓名。 SELECT A.uname,B.fname FROM university as A, A.staff as B WHERE A.city=‘changsha’ AND B.age>50;
第10章对象关系数据库
在传统的关系型数据库系统的基础上引入了面 向对象的这类系统称为对象关系数据库系统 (ORDB)。 本章主要内容包括:对象关系数据模型、 ORDBS数据库设计方法—对象联系法、SQL3 对ORDBS的支持、OODBS和ORDBS的比较。
第10章对象关系数据库