




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十一章第十一章 面向对象数据库面向对象数据库 本章概念:本章概念: ODMGODMG标准的核心概念标准的核心概念 面向对象数据模型的基本概念面向对象数据模型的基本概念 持久化程序设计语言的基本概念持久化程序设计语言的基本概念 基于基于C+C+的面向对象数据库的对象定义语言和对象操纵语言的面向对象数据库的对象定义语言和对象操纵语言 OODBOODB与与ORDBORDB的比较的比较 使用使用UMLUML类图来概念对象建模类图来概念对象建模 第十一章第十一章 面向对象数据库面向对象数据库1. ODMG1. ODMG组织和标准组织和标准ODMGODMG(Object Data Management
2、GroupObject Data Management Group)ODMG93ODMG93是用于面向对象数据管理产品接口的一个定义。是用于面向对象数据管理产品接口的一个定义。ODMG93ODMG93标准有五个核心概念:标准有五个核心概念:ODMG93标准有五个核心概念:标准有五个核心概念:(1 1)对象是基本的数据结构、是存储和操作的基本单位。)对象是基本的数据结构、是存储和操作的基本单位。(2 2)每个对象有一个永久的标识符。这个标识符在该对象的整)每个对象有一个永久的标识符。这个标识符在该对象的整 个生命期中都有效,即不论该对象是存储在外存中还是内个生命期中都有效,即不论该对象是存储在外
3、存中还是内 存中,该标识符都必须是有效的。存中,该标识符都必须是有效的。(3 3)对象可以被指定类型和子类型。对象被创建为一个给定的)对象可以被指定类型和子类型。对象被创建为一个给定的 类型。对象还可以定义为其他对象的子类型。此时,它们类型。对象还可以定义为其他对象的子类型。此时,它们 继承父类型的所有数据特性和行为。继承父类型的所有数据特性和行为。(4 4)对象状态由数据值与联系定义。)对象状态由数据值与联系定义。(5 5)对象行为由对象操作定义。)对象行为由对象操作定义。 2. OODBS 2. OODBS的概念的概念 一个面向对象数据库系统(一个面向对象数据库系统(OODBSOODBS)
4、应该满足两个标准:)应该满足两个标准: 首先首先它是一个数据库系统(它是一个数据库系统(DBSDBS),具备),具备DBSDBS的基本功能,的基本功能, 譬如查询语言、散列或成组存取方法、事务管理、一致性控制及譬如查询语言、散列或成组存取方法、事务管理、一致性控制及恢复;恢复; 其次其次是一个面向对象系统,是针对面向对象程序设计语言的持是一个面向对象系统,是针对面向对象程序设计语言的持久性对象存储管理而设计的,充分支持完整的面向对象概念和机久性对象存储管理而设计的,充分支持完整的面向对象概念和机制,譬如用户自定义数据类型、自定义函数、对象封装等必不可制,譬如用户自定义数据类型、自定义函数、对象
5、封装等必不可少的特点。少的特点。 OODBSOODBS表达为:表达为:“面向对象系统面向对象系统 + + 数据库能力数据库能力” 1. 1. 对象(对象(objectobject) 对象由三个部分组成:对象由三个部分组成:(1 1)一组变量。一组变量。它们包含对象的数据,它们包含对象的数据, 变量相当于变量相当于ERER模型中的属性。模型中的属性。(2 2)一组消息。一组消息。这是一个对象所能响应的消息集合,每个消息可这是一个对象所能响应的消息集合,每个消息可 有若干参数。对象接受消息后应作出相应的响应。有若干参数。对象接受消息后应作出相应的响应。(3 3)一组方法(一组方法(MethodMe
6、thod)。)。每个方法是实现一个消息的代码段,每个方法是实现一个消息的代码段, 一个方法返回一个值作为对消息的响应。一个方法返回一个值作为对消息的响应。 对象的方法可以分为只读型和更新型两种。对象的方法可以分为只读型和更新型两种。 2. 2.类(类(classclass) 在数据库中通常有很多相似的对象。在数据库中通常有很多相似的对象。“相似相似”是指它们响应是指它们响应相同的消息使用相同的方法、并且有相同名称和类型的变量。相同的消息使用相同的方法、并且有相同名称和类型的变量。 将相似的对象分组形成了一个将相似的对象分组形成了一个“类类”( Class)( Class)。 类是相似对象的集合
7、。类中每个对象也称为类的实例(类是相似对象的集合。类中每个对象也称为类的实例(InstanceInstance)。 一个类中的所有对象共享一个公共的定义,尽管它们对变量一个类中的所有对象共享一个公共的定义,尽管它们对变量所赋予的值不同。所赋予的值不同。 面向对象数据模型中类的概念相当于面向对象数据模型中类的概念相当于ERER模型中实体集的概念。模型中实体集的概念。 例例: : 用伪码写一个(用伪码写一个(“职员职员”)类的定义。定义中给出了类似的变)类的定义。定义中给出了类似的变 量和类的对象所响应的消息量和类的对象所响应的消息, ,处理这些消息的方法在这里未给出。处理这些消息的方法在这里未给
8、出。 class employeeclass employee / /* * 变量变量 * */ / string name string name; string addressstring address; data start_datedata start_date; intint salary salary; / /* * 消息消息 * */ / int annual_salary int annual_salary( )( ); string get_namestring get_name( )( ); string get_addressstring get_address( );
9、); int set_addressint set_address(string new_addressstring new_address);); int employment_lengthint employment_length( )( ); ; 一个类对象包括两部分内容:一个类对象包括两部分内容:(1)一个集合变量,)一个集合变量,它的值是该类的所有实它的值是该类的所有实例对象所组成的集合;例对象所组成的集合;(2) 对消息对消息new实施一个方法,实施一个方法,用以创建类用以创建类的一个新实例。的一个新实例。 3. 继承性继承性 继承性允许不同类的对象共享它们公共部分的结构和特性。继
10、承性允许不同类的对象共享它们公共部分的结构和特性。 继承性可以用超类和子类的层次联系实现。继承性可以用超类和子类的层次联系实现。 单继承性单继承性: : 一个子类可以继承某一个超类的结构和特性;一个子类可以继承某一个超类的结构和特性; 多重继承性多重继承性: : 一个子类也可以继承多个超类的结构和特性。一个子类也可以继承多个超类的结构和特性。 继承性是数据间的泛化细化联系,是一种继承性是数据间的泛化细化联系,是一种“is a”is a”联系,联系,表示了类之间的相似性。表示了类之间的相似性。 图中:图中:每个职员(每个职员(employee)是一个人()是一个人(person),), 人是职员
11、的泛化、抽象化,人是职员的泛化、抽象化, 职员是人的细化、具体化。职员是人的细化、具体化。 person是超类,是超类,employee是子类;等等。是子类;等等。personpersoncustomercustomeremployeeemployeeofficerofficertellertellersecretarysecretary例:银行日常工作中涉及到各类人员的细化层次的类继承层次图:例:银行日常工作中涉及到各类人员的细化层次的类继承层次图:伪代码定义如下:伪代码定义如下:class person /* 人人 */string name; /* 姓名姓名 */string addre
12、ss; /* 地址地址 */ ;class customer isa person /* 客户客户 */ int credit_rating; /* 信用度信用度 */ ;class employee isa person /* 职员职员 */ date start_date; /* 工作起始日期工作起始日期 */ int salary;/* 工资工资 */ ;class officer isa employee /* 高级职员高级职员 */ int office_number; /* 工号工号 */ int expense_account_number; /* 经费账号经费账号 */ ;cl
13、ass teller isa employee /* 职员职员 */ int hours_per_week; /* 每周工作量每周工作量 */ int station_number; /* 柜号柜号 */ ;class secretary isa employee /* 秘书秘书 */ int hours_per_week; /* 每周工作量每周工作量 */ string manager; /* 经理姓名经理姓名 */ ; 例:下图是人的又一个细化图:例:下图是人的又一个细化图: facultyfaculty和和studentstudent是是personperson的细化子类。的细化子类。有
14、的人既是教师又是学生,有的人既是教师又是学生, faculty_studentfaculty_student应是应是facultyfaculty和和studentstudent这两个类的子类这两个类的子类。 即:多重继承性。即:多重继承性。personpersonfacultyfacultyfaculty_studentfaculty_studentstudentstudent 4. 对象标识(对象标识(Object Identifier,简记为,简记为OID) 面向对象系统提供面向对象系统提供 “对象标识符对象标识符” 的概念来标识对象。的概念来标识对象。 OID与对象的物理存储位置无关,也
15、与数据的描述方式和值无关。与对象的物理存储位置无关,也与数据的描述方式和值无关。 OID是惟一的,也就是说,每个对象具有单一的标识符,在对象创是惟一的,也就是说,每个对象具有单一的标识符,在对象创建的瞬间,由系统赋给对象一个建的瞬间,由系统赋给对象一个OID值,它在系统内是惟一的,在值,它在系统内是惟一的,在对象生存期间,标识是不能改变的。对象生存期间,标识是不能改变的。 对象标识是指针一级的概念,是一个强有力的数据操纵原语,对象标识是指针一级的概念,是一个强有力的数据操纵原语,也是对集合、元组和递归等复合对象操纵的基础也是对集合、元组和递归等复合对象操纵的基础 自行车自行车车闸车闸车轮车轮钢
16、圈钢圈辐条辐条轮胎轮胎车架车架齿轮齿轮闸线闸线杠杆杠杆衬垫衬垫5.5.对象包含对象包含不同类的对象之间可能存在着包含关系(即组合关系)。不同类的对象之间可能存在着包含关系(即组合关系)。下图:自行车结构的数据库的类包含层次图下图:自行车结构的数据库的类包含层次图自行车自行车车闸车闸车轮车轮钢圈钢圈辐条辐条轮胎轮胎车架车架齿轮齿轮闸线闸线杠杆杠杆衬垫衬垫图中:自行车是车轮、车闸、齿轮、车架的组合。图中:自行车是车轮、车闸、齿轮、车架的组合。车轮又包括钢圈、辐条和轮胎。结构的每一个构件都描述为一车轮又包括钢圈、辐条和轮胎。结构的每一个构件都描述为一个对象,同时构件间的包含也可以用对象间的包含来描述
17、。个对象,同时构件间的包含也可以用对象间的包含来描述。自行车自行车车闸车闸车轮车轮钢圈钢圈辐条辐条轮胎轮胎车架车架齿轮齿轮闸线闸线杠杆杠杆衬垫衬垫 包含其他对象的对象称为复合对象。包含其他对象的对象称为复合对象。包含关系可以有多层,形成包含关系可以有多层,形成类包含层次图。类包含层次图。包含是一种包含是一种“是一部分是一部分”(is part ofis part of)联系。)联系。 如:车轮是自行车的一部分,而不能说如:车轮是自行车的一部分,而不能说“车轮是一辆自行车车轮是一辆自行车”。 因此,包含与继承是两种不同的数据联系。因此,包含与继承是两种不同的数据联系。一、持久化程序设计语言一、持
18、久化程序设计语言1.持久化语言与嵌入式语言的区别持久化语言与嵌入式语言的区别(1)在嵌入式语言中,宿主语言的类型系统与)在嵌入式语言中,宿主语言的类型系统与SQL的类型系统不同,程序员的类型系统不同,程序员要负责宿主语言与要负责宿主语言与DML之间的类型转换。之间的类型转换。 持久化程序设计语言的查询语言与宿主语言完全集成在一块,持久化程序设计语言的查询语言与宿主语言完全集成在一块,具有相同具有相同的类型系统。创建对象并将之存储在数据库中,不需要任何显式的类型或的类型系统。创建对象并将之存储在数据库中,不需要任何显式的类型或格式改变。任何格式转换对程序员都是透明的。格式改变。任何格式转换对程序
19、员都是透明的。(2) 2) 使用嵌入式查询语言的程序员要负责编写程序把数据从数据库中取出放使用嵌入式查询语言的程序员要负责编写程序把数据从数据库中取出放到内存中。在更新时,程序员还需编写程序段将更新过的数据写回数据库。到内存中。在更新时,程序员还需编写程序段将更新过的数据写回数据库。而而在持久化语言中,程序员可以直接操纵持久数据,而不必为存取数据编在持久化语言中,程序员可以直接操纵持久数据,而不必为存取数据编写程序。写程序。 3 3 ODMG 93ODMG 93和持久化和持久化C+C+系统系统 2. 持久化语言的三个基本概念持久化语言的三个基本概念(1) 对象的持久性:对象的持久性:要把要把O
20、OPL变成持久化语言,第一步就是提供一种办法,变成持久化语言,第一步就是提供一种办法,把对象区分成是持久的还是暂留的。在程序运行结束后,新创建的持久对象把对象区分成是持久的还是暂留的。在程序运行结束后,新创建的持久对象将被保存,而暂留对象将消失。将被保存,而暂留对象将消失。(2)对象标识和指针:)对象标识和指针:当一个持久对象被创建时,它就要被分配一个持久的对当一个持久对象被创建时,它就要被分配一个持久的对象标识符。当创建的对象为暂留时,被分配一个暂留的对象标识符,在程序象标识符。当创建的对象为暂留时,被分配一个暂留的对象标识符,在程序终止后,对象被删掉,标识符失去意义。终止后,对象被删掉,标
21、识符失去意义。(3)持久对象的存储和访问:)持久对象的存储和访问:逻辑上,实现类的方法的程序代码应该和类的类逻辑上,实现类的方法的程序代码应该和类的类型定义一起作为数据库模式的一部分存储。但现在往往将程序代码存储在数型定义一起作为数据库模式的一部分存储。但现在往往将程序代码存储在数据库之外的文件中,目的是避免对编译器和据库之外的文件中,目的是避免对编译器和DBMS软件进行集成。软件进行集成。 查找数据库中对象的方法有三种:查找数据库中对象的方法有三种:第一种方法是根据对象名找对象。第一种方法是根据对象名找对象。实现时,每个对象有一个对象名实现时,每个对象有一个对象名(如同文件名一样)。这种方法
22、对少量的对象是有效的,但对上百万个对象就(如同文件名一样)。这种方法对少量的对象是有效的,但对上百万个对象就 不适用了。不适用了。第二种方法是依据对象标识找对象。第二种方法是依据对象标识找对象。而对象标识存储在数据库之外。而对象标识存储在数据库之外。第三种方法是将对象按聚集形式存放第三种方法是将对象按聚集形式存放,然后利用程序循环找所需对象。然后利用程序循环找所需对象。 聚集形式包括集合(聚集形式包括集合(Set)、多集()、多集(Multiset)等。)等。 大多数大多数OODBS都支持这三种访问数据库的方法。都支持这三种访问数据库的方法。 二、二、ODMG C+ODMG C+对象定义语言对
23、象定义语言ODMG C+ ODMG C+ 对象定义语言(对象定义语言(C+ ODLC+ ODL)扩充了)扩充了C+C+的类型定义语法。的类型定义语法。 例例: 在第在第10章的对象联系图中,定义章的对象联系图中,定义Faculty为新的类为新的类Person的的子类,那么可得到下图的带泛化边的对象联系图。子类,那么可得到下图的带泛化边的对象联系图。namenameFacultyFacultyUniversityUniversityCoursetextCoursetextpresidentpresidentworks_forworks_forfnofno city city uname unam
24、eeditoreditorstaffstaffteachteachediteditteacherteachersalarysalarytextnametextnamecnamecnameageagePersonPerson带泛化边的对象联系图带泛化边的对象联系图该对象联系图用该对象联系图用C+ ODL写的代码示例为:写的代码示例为:class Person:public Persistent_Object public:string name;int age;class Faculty:public Person private:int salary;public:int fno;Ref wo
25、rks_for inverse University:staff;Set Ref teach inverse Coursetext:teacher;class University:public Persistent_Object public:string uname;string city;Ref president;Set Ref staff inverse Faculty:works_for;Set Ref edit inverse Coursetext:editor;class Coursetext:public Persistent_Object public:string cna
26、me;string textnameRef teacher inverse Faculty:teach;Ref editor inverse University:edit;三、三、ODMG C+ODMG C+对象操纵语言对象操纵语言 例例: 在上述数据库中,在上述数据库中,插入教师开课信息:某教师开设了一门课及插入教师开课信息:某教师开设了一门课及所使用教材的编写学校所使用教材的编写学校 (fno,cname,textname,uname) 。 假设教师及学校的数据均已在数据库中存在,插入操作算法为:假设教师及学校的数据均已在数据库中存在,插入操作算法为: 打开数据库;打开数据库; 事务开始
27、;事务开始; 查询工号为查询工号为fno值的值的Faculty对象对象ofa; 查询校名为查询校名为uname值的值的University对象对象oun; 创建创建Coursetext对象对象oco,送入,送入cname和和textname值;值; 在在oco的的teacher中插入中插入Faculty对象对象ofa; 在在oco的的editor中插入中插入University对象对象oun; 事务提交(事务提交(commit)。)。4 ODMG 97和对象语言和对象语言 一、一、 ODMGODMG数据模型数据模型 ODMGODMG数据模型是数据模型是OODBMSOODBMS的基础。的基础。O
28、ODBOODB是对象的集合,每个对是对象的集合,每个对象有一个惟一的对象标识符(象有一个惟一的对象标识符(OIDOID),类是具有类似性质的对象),类是具有类似性质的对象的汇集。类的定义由三部分组成:的汇集。类的定义由三部分组成:(1 1)属性)属性(Attributes):(Attributes):属性可以是基本类型,也可以是复合属性可以是基本类型,也可以是复合类型。复合类型有类型。复合类型有structstruct、arrayarray、listlist、bagbag、setset等五种。等五种。(2 2)联系)联系(Relationships):(Relationships):联系是指对
29、象之间的引用或引用联系是指对象之间的引用或引用的汇集。的汇集。ODMGODMG模型中的联系与模型中的联系与ERER模型中的二元联系相类似。模型中的二元联系相类似。(3 3)方法)方法(Methods):(Methods):方法是能应用到类的对象上的函数。方法是能应用到类的对象上的函数。二、二、ODMG ODLODMG ODL ODMG ODMG数据库模式定义为一系列接口(数据库模式定义为一系列接口(interfaceinterface)的汇集。)的汇集。关键字关键字interfaceinterface(接口)(接口)用来定义一个类。对于每个接口,可用来定义一个类。对于每个接口,可以说明一个以说
30、明一个extentextent(范围),它是代表类的当前对象集的一个名(范围),它是代表类的当前对象集的一个名字。字。 实际上接口和范围类似于关系模型中的关系模式和关系实例。实际上接口和范围类似于关系模型中的关系模式和关系实例。例例: :对于前面的模式和对象联系图对于前面的模式和对象联系图, , 我们可以用我们可以用ODMG ODLODMG ODL来定义来定义, ,形式如下:形式如下:interface Personinterface Person(extent Peopleextent People) attribute string name attribute string name;
31、attribute integer ageattribute integer age; ;interface Facultyinterface Faculty:PersonPerson/ /* * 类类FacultyFaculty是类是类PersonPerson的子类的子类 * */ /(extent Faculties key fnoextent Faculties key fno) attribute integer fno attribute integer fno; attribute integer salaryattribute integer salary; relationsh
32、ip University works_for inverse University:staffrelationship University works_for inverse University:staff; relationship Set teach inverse Coursetext:teacherrelationship Set teach inverse Coursetext:teacher; integer num_teachinteger num_teach()()raisesraises(noTeachnoTeach););/ /* *统计教师授课门数的一个方法统计教师
33、授课门数的一个方法* */ / / /* * raises raises(引发)表示该方法可能引发的异常(引发)表示该方法可能引发的异常 * */ / ;interface Universityinterface University(extent Universities key unoextent Universities key uno) attribute integer uno attribute integer uno; attribute string unameattribute string uname; attribute string cityattribute stri
34、ng city; relationship Faculty presidentrelationship Faculty president; relationship Set staff inverse Faculty:works_forrelationship Set staff inverse Faculty:works_for; relationship Set edit inverse Coursetext:editorrelationship Set edit inverse Coursetext:editor; integer num_staffinteger num_staff(
35、);();/ /* * 统计学校人数的一个方法统计学校人数的一个方法 * */ / ;interface Coursetextinterface Coursetext(extent Coursetextsextent Coursetexts) attribute string cname attribute string cname; attribute string textnameattribute string textname; relationship Faculty teacher inverse Faculty:teachrelationship Faculty teacher
36、inverse Faculty:teach;relationship University editor inverse University:editrelationship University editor inverse University:edit; ;三、三、ODMG OQL ODMG OQL 1 1OQLOQL中的中的SELECTSELECT语句语句 OQLOQL允许人们用传统的允许人们用传统的SELECTSELECT查询语句来写表达式,也具有消除查询语句来写表达式,也具有消除重复、子查询、排序等功能。重复、子查询、排序等功能。 例:用例:用OQLOQL的的SELECTSELE
37、CT语句可以写出下列查询操作。语句可以写出下列查询操作。 检索大学里授课门数超过检索大学里授课门数超过3 3门的教师。要求显示大学校名和教师门的教师。要求显示大学校名和教师姓名,显示时属性名为姓名,显示时属性名为university_nameuniversity_name和和faculty_namefaculty_name:SELECT university_name:F.works_for.unameSELECT university_name:F.works_for.uname faculty_name:F.name faculty_name:F.name FROM Faculty F F
38、ROM Faculty F WHERE F.num_teach WHERE F.num_teach() 3() 3; 检索上海地区大学中教师开设课程的课程名。检索上海地区大学中教师开设课程的课程名。 SELECT DISTINCT C.cnameSELECT DISTINCT C.cname FROM University U FROM University U,U.staffU.staff F F,F.teachF.teach C C WHERE U.city WHERE U.city =shanghai =shanghai; 也可以用子查询形式表达,但子查询是出现在也可以用子查询形式表达,
39、但子查询是出现在FROMFROM子句中:子句中: SELECT DISTINCT C.cnameSELECT DISTINCT C.cname FROM SELECT U FROM SELECT U FROM University U FROM University U WHERE U.city WHERE U.city =shanghai =shanghai)D1D1, (SELECT FSELECT F FROM D1.staff F FROM D1.staff F)D2D2, D2.teach CD2.teach C;这个语句也可写成这个语句也可写成WHEREWHERE子句中嵌子查询的形
40、式:子句中嵌子查询的形式:SELECT DISTINCT C.cnameSELECT DISTINCT C.cnameFROM CoursetextFROM Coursetext C CWHERE C.teacherWHERE C.teacher IN IN( SELECT F( SELECT F FROM Faculty F FROM Faculty F WHERE F.works_for WHERE F.works_for IN IN( SELECT U( SELECT U FROM University U FROM University U WHERE U.city WHERE U.c
41、ity =shanghai) =shanghai); 检索复旦大学的教师,要求按年龄降序排列,若年龄相同按检索复旦大学的教师,要求按年龄降序排列,若年龄相同按工资升序排列。工资升序排列。 SELECT FSELECT F FROM University U FROM University U,U.staffU.staff F F WHERE U.uname =Fudan WHERE U.uname =Fudan University University ORDER BY F.age ORDER BY F.age DESC DESC,F.salaryF.salary;OQLOQL中中SELEC
42、TSELECT语句查询结果是集合(语句查询结果是集合(setset)或包()或包(bagbag),但加了),但加了ORDER BYORDER BY子句后,输出结果就成为列表(子句后,输出结果就成为列表(ListList)。在集合、包中,)。在集合、包中,行序是无所谓的,但在列表中,行序是重要的。行序是无所谓的,但在列表中,行序是重要的。 下面查询返回的是列表值而不是集合或多集:下面查询返回的是列表值而不是集合或多集: (SELECT F.fnoSELECT F.fno,F.nameF.name FROM Faculty F FROM Faculty F ORDER BY F.age ORDER
43、 BY F.age DESC DESC)0:40:4; 该查询返回的是年龄最大的五位教师姓名值。该查询返回的是年龄最大的五位教师姓名值。 表达式表达式0:40:4表示抽取年龄最大的表示抽取年龄最大的5 5个教师。个教师。 检索上海地区各大学中教师开课的课程名,要求显示校名、检索上海地区各大学中教师开课的课程名,要求显示校名、教师名、课程名:教师名、课程名: SELECT Struc(unameSELECT Struc(uname,set(nameset(name,set(cnameset(cname)FROM University UFROM University U,U.staffU.sta
44、ff F F,F.teachF.teach C CWHERE U.cityWHERE U.city = shanghai = shanghai;SELECTSELECT子句中的表达式不必都是简单的变量,可以是任何表达式子句中的表达式不必都是简单的变量,可以是任何表达式(包括用类型构造符构成的表达式)。上式中用了(包括用类型构造符构成的表达式)。上式中用了structstruct类型构类型构造符和造符和setset类型构造符。类型构造符。SELECTSELECT子句后的子句后的structstruct字样,是一种显字样,是一种显式地定义结构类型的方式,在实际使用时也可省略式地定义结构类型的方式,
45、在实际使用时也可省略. . 2 2OQLOQL表达式的附加格式表达式的附加格式 OQLOQL在在SELECTSELECT语句格式中提供了全称量词(语句格式中提供了全称量词(FOR ALLFOR ALL)和存在量词()和存在量词(EXISTSEXISTS)等谓词,以及聚集运算符、分组子句和集合运算符(并、交和差)。等谓词,以及聚集运算符、分组子句和集合运算符(并、交和差)。(1 1) 量词表达式量词表达式 全称量词表达式的句法:全称量词表达式的句法:FOR ALL x IN SFOR ALL x IN S:C(xC(x) )该表达式用于检测集合该表达式用于检测集合S S的所有成员的所有成员x x
46、是否都满足条件是否都满足条件C(xC(x) )。如果。如果S S中每个成员中每个成员x x都满足都满足C(xC(x) ),则该表达式结果为,则该表达式结果为truetrue,否则为,否则为falsefalse。 存在量词的表达式的句法:存在量词的表达式的句法: EXISTS x IN SEXISTS x IN S:C C(x x)该表达式用于检测集合该表达式用于检测集合S S中是否至少有一个成员中是否至少有一个成员x x满足条件满足条件C C(x x)。)。若存在,则该表达式结果为若存在,则该表达式结果为truetrue,否则为,否则为falsefalse。 例例: : 写出下列查询操作的写出
47、下列查询操作的SELECTSELECT语句。语句。 检索存在检索存在6060岁以上教师的大学校名。岁以上教师的大学校名。 SELECT DISTINCT U.unameSELECT DISTINCT U.uname FROM University U FROM University U WHERE EXISTS F IN U.staff WHERE EXISTS F IN U.staff: : F.age F.age=60=60;/ /* * F F是元组变量是元组变量 * */ / 检索教师年龄全在检索教师年龄全在5050岁以下的大学校名。岁以下的大学校名。 SELECT U.unameSE
48、LECT U.uname FROM University U FROM University U WHERE FOR ALL F IN U.staff WHERE FOR ALL F IN U.staff: : F.age F.age5050;(2 2) 使用聚集操作和分组子句的使用聚集操作和分组子句的SELECTSELECT语句语句 OQLOQL使用与使用与SQLSQL相同的五种聚集运算符:相同的五种聚集运算符:AVGAVG,COUNTCOUNT,SUMSUM,MINMIN和和MAXMAX。在传统的在传统的SQLSQL中,这些运算符只能应用于表中指定列,而中,这些运算符只能应用于表中指定列,
49、而OQLOQL中,同样运算符中,同样运算符可应用于其成员为合适类型的聚集操作。即:可应用于其成员为合适类型的聚集操作。即:COUNTCOUNT可应用于任何聚集,可应用于任何聚集,SUMSUM和和AVGAVG可以用于基本类型的聚集,可以用于基本类型的聚集,MAXMAX和和MINMIN可以用于任何可比较类型的聚集。可以用于任何可比较类型的聚集。 OQLOQL的的SELECTSELECT语句也使用分组子句和组条件表达式子句,但增加了新意。语句也使用分组子句和组条件表达式子句,但增加了新意。例例: :写出下列查询操作的写出下列查询操作的SELECTSSELECTS语句。语句。 检索每个年龄段教师平均授
50、课门数。检索每个年龄段教师平均授课门数。 SELECT F.ageSELECT F.age,avgNum:AVGavgNum:AVG(SELECT P.F.num_teachSELECT P.F.num_teach()() FROM partition PFROM partition P) FROM Faculty FFROM Faculty F GROUP BY F.age GROUP BY F.age;(3 3)集合运算符)集合运算符 像传统的像传统的SQLSQL一样,一样,OQLOQL中也有并、交、差等集合操作。中也有并、交、差等集合操作。例例: :检索教师人数不到检索教师人数不到100
51、01000人,但工资低于人,但工资低于15001500元的人数超过元的人数超过500500人的那些人的那些 大学的编号和校名。大学的编号和校名。 (SELECT U.unoSELECT U.uno,U.unameU.uname FROM University U FROM University U GROUP BY U.uno GROUP BY U.uno,U.unameU.uname HAVING U.num_staff HAVING U.num_staff()() 1000 ) 1000 ) EXCEPT EXCEPT (SELECT U.unoSELECT U.uno,U.UnameU.
52、Uname FROM University U FROM University U,U.staffU.staff F F WHERE F.salary WHERE F.salary 1500 500 500 ););3 3OQLOQL中对象的赋值和建立中对象的赋值和建立(1 1)对宿主语言变量赋值)对宿主语言变量赋值传统传统SQLSQL需要在元组分量和宿主语言变量之间传递数据,而需要在元组分量和宿主语言变量之间传递数据,而OQLOQL则不同,可以很则不同,可以很方便地把表达式的结果值赋给任何合适类型的宿主语言变量。方便地把表达式的结果值赋给任何合适类型的宿主语言变量。例例: : 检索大于检索大
53、于6060岁的教师可用下列语句:岁的教师可用下列语句: SELECT F FROM Faculty F WHERE F.ageSELECT F FROM Faculty F WHERE F.age 60 60;该查询结果的类型是该查询结果的类型是setsetFacultyFaculty。如果。如果oldFacultiesoldFaculties是同类型的宿主语言是同类型的宿主语言变量,用扩充了变量,用扩充了OQLOQL的的C+C+可以写成下列形式:可以写成下列形式: oldFacultiesoldFaculties = SELECT F = SELECT F FROM Faculty F FR
54、OM Faculty F WHERE F.age WHERE F.age 60 60; 并且并且oldFacultiesoldFaculties的值将成为这些的值将成为这些FacultyFaculty对象的集合。对象的集合。(2 2)从聚集中提取元素)从聚集中提取元素 获取集合或者包的每个成员是比较复杂的,但比传统获取集合或者包的每个成员是比较复杂的,但比传统SQLSQL基于游标的方法要基于游标的方法要简单。首先,我们需要把集合或者包转换成列表,这可以用带简单。首先,我们需要把集合或者包转换成列表,这可以用带ORDER BYORDER BY子句的方子句的方法。法。例:检索大于例:检索大于60岁
55、的教师,要求查询结果按工资、年龄降序排列,岁的教师,要求查询结果按工资、年龄降序排列,可用下列语句实现:可用下列语句实现:facultyList = SELECT F FROM Faculty F WHERE F.age 60 ORDER BY F.salary DESC,F.age DESC;该语句将把按工资、年龄降序排列的所有该语句将把按工资、年龄降序排列的所有Faculty对象的列表赋给对象的列表赋给宿主语言变量宿主语言变量facultyList。1. 各种各种DBS的长处和优势可以概括如下:的长处和优势可以概括如下: (1)关系系统:数据类型简单,查询语言功能强大,高保护性。)关系系统
56、:数据类型简单,查询语言功能强大,高保护性。(2)基于持久化语言的)基于持久化语言的OODBS:支持复合数据类型,与程序设计语言集:支持复合数据类型,与程序设计语言集 成一体化,高性能。成一体化,高性能。(3) ORDBS:支持复合数据类型,查询语言功能强大,高保护性。:支持复合数据类型,查询语言功能强大,高保护性。 该总结具有普遍性,但对有些该总结具有普遍性,但对有些DBS而言它们的分界线是模糊的。例如,而言它们的分界线是模糊的。例如,有些以持久化语言为基础的有些以持久化语言为基础的OODBS是在一个关系是在一个关系DBS之上实现的,这之上实现的,这些系统的性能可能比不上那些直接建立在存储系
57、统之上的些系统的性能可能比不上那些直接建立在存储系统之上的OODBS,但,但这些系统却提供了关系系统所具有的较强保护能力。这些系统却提供了关系系统所具有的较强保护能力。5 OODBOODB与与ORDBORDB的比较的比较 2. OODB 2. OODB与与ORDBORDB的主要区别如下所示:的主要区别如下所示:OODBOODBORDBORDB从从OOPL C+OOPL C+出发,引入持久数据的概出发,引入持久数据的概念,能操作念,能操作DBDB,形成持久化,形成持久化C+C+系统系统从从SQLSQL出发,引入复合类型、继承性、出发,引入复合类型、继承性、引用类型等概念(引用类型等概念(SQL
58、3SQL 3)ODMG OQLODMG OQL(类似于(类似于SQLSQL)SQL3SQL3有导航式查询有导航式查询, ,也有非过程性查询也有非过程性查询结构化查询结构化查询, , 非过程性查询非过程性查询符合面向对象语言符合面向对象语言符合第符合第4 4代语言代语言显式联系显式联系隐式联系隐式联系惟一的对象标识符惟一的对象标识符有主键概念,也有对象标识概念有主键概念,也有对象标识概念能够表示能够表示“关系关系”能够表示能够表示“对象对象”对象处于中心位置对象处于中心位置关系处于中心位置关系处于中心位置一、一、 统一建模语言(统一建模语言(Unified Modeling Language:
59、UML) UML适用于各类系统的建模,为了实现这种大范围应用能力适用于各类系统的建模,为了实现这种大范围应用能力 UML被定义成比较粗放和具有普遍性,以满足不同系统的建模。被定义成比较粗放和具有普遍性,以满足不同系统的建模。通过提供不同类型生动的图,通过提供不同类型生动的图,UML能表达系统多方面的透视,这些图有使用能表达系统多方面的透视,这些图有使用: 事件图(事件图(Use-Case Diagram)、)、 类图(类图(Class Diagram)、)、 状态图(状态图(State Diagram)、)、 组件图(组件图(Component Diagram) 等等9种。种。 下面只描述强调
60、系统的数据、某些行为和面貌的类图下面只描述强调系统的数据、某些行为和面貌的类图 6 6 使用使用UMLUML类图来概念对象建模类图来概念对象建模 二、二、用类图表达类和关联用类图表达类和关联 类图描述了系统的静态结构,包括类和类间的联系。类图描述了系统的静态结构,包括类和类间的联系。类图与类图与ERER图、对象联系图有很多类似的地方,但所用的术语和符号有所不同。图、对象联系图有很多类似的地方,但所用的术语和符号有所不同。 1. 1. 类图与类图与ER图中术语的区别图中术语的区别 类图与ER图中术语的区别ERER图中的术语图中的术语类图中的术语类图中的术语实体集实体集(Entity Set)(E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿化工程护卫方案(3篇)
- 旧船改造升级工程方案(3篇)
- 2025年成人教育终身学习体系创新构建策略研究报告
- 2025年老年康养服务项目养老产业可持续发展评估报告
- 2025年共享厨房行业投资趋势与机会研究报告
- 南通安装工程方案(3篇)
- 轮渡路改造工程方案(3篇)
- 开工程咨询公司方案(3篇)
- 医患关系特点全解析
- 车祸现场急救课件
- 《普通话宣传周》中小学推广普通话主题班会模板
- 2025年中国电信集团招聘考试试题及答案全收录
- 成都市新都区部分单位2025年8月公开招聘编外(聘用)人员(三)(20人)备考练习试题及答案解析
- 浙江省G12名校协作体2025学年第一学期9月高三上学期开学联考数学试卷
- 人教PEP版(一起)(2024)一年级上册英语全册教案
- 租户消防安全知识培训课件
- 2025广东汕尾市海丰县纪委监委招聘政府聘员6人笔试模拟试题及答案解析
- 《食堂食品安全管理制度》知识培训
- 《大学生就业指导》课件第六章 就业权益与法律保障
- 2025年事业单位招聘工作人员考试笔试试题(含答案)
- 2025年事业单位工勤技能-河北-河北汽车驾驶与维修员二级(技师)历年参考题库含答案解析(5套)
评论
0/150
提交评论