| |||
20世纪90年代,计算机领域中面向对象技术和开放技术得到了推广和使用,并对数据库技术的发展起着巨大的促进作用。 (1)概念设计作为需求分析到逻辑设计的一个中间阶段,对应用系统的开发起着十分重要的作用。概念模型是对用户数据需求的精确描述,但并不涉及具体的实现细节,易于理解,便于数据库设计人员和非技术用户进行交流。人们不断在探索,用概念模型尽可能完美地表达用户的需求。在20世纪90年代,随着面向对象技术的推广和应用,提出了对象联系图和UML类图的技术。实际上这两种技术都是ER模型中ER图的发展。本章9.1节介绍这种面向对象的概念建模技术。 (2)随着C/S(客户机/服务器)结构的出现,人们可以最有效地使用计算机资源。廉价的PC机(客户机)位于桌面,并提供图形前端及大量的软件开发工具,如电子数据表、图表程序和报表制作器等。小型机和大型机作为DBMS的宿主,能充分使用其计算能力和中心位置来提供快速、协调的数据访问。但前端和后端数据库怎么连接起来呢? 对于那些相对独立的软件供应商而言,经常要为每一个DBMS编写一个版本的应用程序,或者为每个要访问的DBMS编写针对DBMS的代码。这就意味着,大量的资源都耗在了编写和维护DB的访问上,更不用说应用程序了。此时应用程序的评价标准不再是质量,而是它能否在给定的DBMS中访问数据库。 这就需要开放的数据库连接,即人们需要用一种新的方法来访问不同的数据库。ODBC技术就是这种优秀的中间件技术。ODBC是“开放数据库互连”(Open DataBase Connectivity)的英文缩写。ODBC的出现为数据库应用系统的开发指明了道路,将成为Web数据库技术的主流。本章9.2节介绍开放的数据库互连技术。 |
| |||
在面向对象技术中,数据类型系统由基本类型、复合类型和引用类型三部分组成。 1.基本类型 (1)基本数据类型是指整型、浮点型、字符、字符串、布尔型和枚举型。 (2)枚举类型是一个标识符的列表,它和整型是同义词。例如把sex定义为枚举类型{male,female},在效果上就是把标识符male和female定义成整数0和1的同义词。 | |||
2.复合类型 复合类型有下列五种。 (1)行类型 ①不同类型元素的有序集合称为行类型(Row Type)。 ②也称为元组类型、结构类型或对象类型。 ③例如日期可以由日、月、年三部分组成(1,October,2006)。 (2)数组类型 ①相同类型元素的有序集合称为数组类型(Array Type)。 ②一般,数组的大小是预先设置的。 ③例如人名数组:[BAO,AN,NING,WEN,GAO,DING,SHI,ZHOU]。 (3)列表类型 ①相同类型元素的有序集合,并且允许有重复的元素,称为列表类型(List Type)。 ②作为一种特例,字符串(string)类型是列表(List)类型的简化形式。 ③列表的大小预先未设置,在使用时,可以有任意个元素。 (4)包类型 ①相同类型元素的无序集合,并且允许有重复的元素,称为包类型(Bag Type)。 ②也称为多集类型(Multiset Type)。 ③例如成绩集:{80,90,70,80,80}。 (5)集合类型 ①相同类型元素的无序集合,并且所有的元素必须是不同的,称为集合类型(Set Type),有时也称为关系类型。 ②例如课程集:{MATHS,PHYSICS,PL,OS,DB}。 (6)说明 ①复合类型中后四种类型——数组、列表、包、集合——统称为汇集(collection)类型,或批量(bulk)类型。 ②复合类型的差异。 ③数据类型可以嵌套。例如课程成绩集:{(MATHS,80),(PHYSICS,90),(PL,70),(OS,80),(DB,80)},外层是集合类型,里层是行类型。 | |||
3.引用类型(reference type) (1)引用类型相当于程序设计中指针的概念。 (2)引用类型这个概念可以把类型定义中的实例映射扩充到类型值域中的实例映射,提供有关实现细节的抽象。 (3)引用类型可以避免数据结构的无穷嵌套问题。 |
| |||
1.传统ER模型的不足 (1)在传统的数据库技术中,ER模型里的多值属性都要设法转换成单属性或一个弱实体。 (2)另外,关系模型中的属性值都是原子值(即1NF性质),不允许是元组值或关系值。这就限制了关系模型的适用范围。 (3)也就是传统数据库的数据结构比较简单,不能支持复合数据类型和嵌套、递归等数据结构。 | |||
2.对象联系图的提出 (1)为此,在20世纪90年代初,有学者对ER图加以扩充,提出了对象联系图的概念,在数据结构之间允许嵌套和递归。 (2)对象联系图能真实地反映现实世界数据之间的各种联系,为对象数据库的实现创造了良好的条件。 (3)使用类型构造图的思想,我们可以把实体联系图扩充成对象联系图。 (4)对象联系图完整地揭示了数据之间的联系。 | |||
3.对象联系图中的七个基本成分 ①椭圆代表对象类型(相当于实体类型)。 ②小圆圈表示属性是基本数据类型(整型、实型、字符串型等)。 ③椭圆之间的边表示对象之间的“引用”。 ④单箭头(→)表示属性值是单值(属性可以是基本数据类型,也可以是另一个对象类型,即元组类型)。 ⑤双箭头()表示属性值是多值(属性可以是基本数据类型,也可以是另一个对象类型,即关系类型)。 ⑥双线箭头()表示对象类型之间的超类与子类联系(从子类指向超类)。 ⑦双向箭头()表示两个属性之间值的联系为逆联系。 | |||
4.实例 ①一个数据库模式的对象联系图,有大学、教师、课程等信息。 ②University是有关大学信息的对象类型,有六个属性。其中三个是基本数据类型,学校编号uno、校名uname和学校所在城市city;一个是单值属性president,表示学校中的校长是某一位教师;还有两个是多值属性,属性staff表示学校中有若干教师,属性edit表示学校编写了若干本教材。 ③Person是一个有关人员信息的对象类型,有四个属性,都是基本数据类型,社会安全号(social_number)、姓名(name)、年龄(age)和性别(sex)。 ④Faculty是有关教师信息的对象类型,有四个属性。其中两个是基本数据类型,教师编号fno和工资salary;一个是单值属性works_for,表示教师服务的学校;一个是多值属性teach,表示教师开设了若干门课程。 ⑤从Faculty到Person有双线箭头(),表示Faculty是Person的一个子类型,自动具有social_number、name、age和sex等四个属性,表示“每个教师是一个人”的语义。 ⑥Coursetext是有关课程与教材信息的对象类型,有五个属性。其中三个是基本数据类型,课程号cno、课程名cname和教材名textname;还有两个是单值属性,属性teacher表示开课的教师,属性editor表示教材的编写学校。 ⑦类型定义中的成分现在用从类型定义到值域类型的属性表示,例如“teach”是一个从对象类型Faculty到对象集(其成分是Coursetext类型)的属性。属性之间的双向箭头()表示两个属性之间值的联系为逆联系。譬如teach和teacher是一对互逆的属性,此处teach是多值属性,teacher是单值属性,实际上体现了Faculty与Coursetext间对象的1:N联系。 | |||
5.对象联系图的说明 ①对象联系图是描述面向对象数据模型的基本工具。 ②对象联系图不仅完整地揭示了数据之间的联系,也把查询的层次观点表现得一清二楚。 ③例如在图中,一个查询可能是从University开始,把Faculty看成它的子对象(通过值为集合的属性staff)。这样,查询形式如同数据库中果真有嵌套关系University(…,staff(…)),这里的属性staff包含了一所大学的所有教师信息。但是另一个查询可能正好相反,那么就要用相反的层次观点解释,例如从Faculty开始查询,把University作为子对象,通过单值属性works_for实现,如同数据库中有嵌套关系Faculty(…,works_for(uname,city,…))。 ④任何形式的层次联系均被包含在对象联系图中,而且实现时不会有冗余现象。 |
| |||||||||
1.统一建模语言(UML)概述 (1)在面向对象技术的发展过程中,产生了许多开发方法和开发工具。但都有各自的一套符号和术语,这导致了许多混乱甚至错误。 (2)在20世纪90年代中期,Booch、Rumbaugh和Jacobson等三位专家源于早先的方法和符号,但并不拘泥于早先的方法和符号,设计了一个标准的建立模型语言。 (3)他们把这个成果称为“统一建模语言”(Unified Modeling Language,简写为UML),并把UML版本交给OMG(Object Management Group)组织。 (4)经过修改后在1997年推出UML 1.0和UML 1.1版,确定UML为面向对象开发的行业标准语言,并得到了微软、Oracle、IBM等大厂商的支持和认证。 (5)UML适用于各类系统的建模,为了实现这种大范围应用能力,UML被定义成比较粗放和具有普遍性,以满足不同系统的建模。 (6)通过提供不同类型的图,UML能表达系统多方面的透视,这些图有类图(Class Diagram)、用例图(Use-Case Diagram)、状态图(State Diagram)、组件图(Component Diagram)等9种。 | |||||||||
2.用类图表达类和关联 (1)类图 ①类图描述了系统的静态结构,包括类和类间的联系。 ②类图与前面学过的ER图、对象联系图有很多类似的地方。 ③但所用的术语和符号有所不同。 (2)类图与ER图中术语的区别 (3)类图中的基本成分是类和关联 ①类被表示为由三个部分组成的方框。 a.上面部分给出了类的名称。 b.中间部分给出了该类的属性(其类型为基本数据类型)。 c.下面部分给出了一些可以应用到这些对象的操作。 ②关联是对类的实例之间联系的命名,相当于ER模型中的联系类型。与关联有关的内容有。
| |||||||||
(4)实例1:大学、教师、课程组成的类图 ①对象联系图。 ②形成的ER图。 ③在图中,FACULTY是PERSON的子类。 ④类图。 ⑤对类图的解释。 a.图中有4个类:University、Faculty、Coursetext和person。在每个类的方框中,指出了类名,对象的属性和操作。其中,Faculty是Person的子类,在超类的端点处标以空心三角形“Δ”。 b.图中有4个关联:President(1:1)、Staff(1:N)、Edit(1:N)和Teach(1:N)。这4个关联都是二元关联。虽然在类图中关联名可以沿着一个方向读(在关联名上加个实心三角形明确表示方向)。 | |||||||||
(5)实例2 ①两个一元关联:Is_married_to(婚姻)和Manage(管理)。 ②Manage关联的一端命名为角色“manager”,表示一个职员可担经理的角色。而另一角色没有命名,但是对关联已命名了。 ③在角色名没有出现时,可以把与端部相连的类的名字作为角色的命名。 (6)实例3 ①表示Vendor(厂商)、Part(零件)和Warehouse(仓库)之间存在一个三元关联Supplies(供应)。 ②与ER图一样,用菱形符号表示三元关联,并填上关联的名字。 ③这里,联系是多对多对多,并且不可以用三个二元关联替换,若要替换,势必造成信息丢失。 | |||||||||
3.用类图表达关联类 (1)像ER模型中联系可以有属性一样,类图中关联本身也可以有属性或自己的操作,此时应把关联模拟成“关联类”。 (2)实例。 ①在ER模型中,学生与课程是一个多对多联系,其选课联系有一属性“成绩”。现在可以用类图表示。 ②图中,学生Student和课程Course表示成两个类。 ③Student和Course之间的关联Registration(注册)也有自己的属性term(学期)、grade(成绩)和操作checkEligibility(检查注册是否合格)。因此关联Registration应表示成一个类,即“关联类”,用虚线与关联线相连。 ④我们还可以发现,对于某门课程的注册,会给学生一个计算机账号。基于此,这个关联类还可以与另一个类ComputerAccount有一个关联。 | |||||||||
4.用类图表达概化/特化 在2.6.2节中,已提到ER模型中的子类实体与超类实体概念。现在来讨论如何用类图来表达概化/特化。下面先举一个有概化/特化的类图例子,再详细解释。 | |||||||||
(1)实例。 ①考察类图例子,每个类只标出类名和属性,未标出操作。 ②职员有三种:计时制职员(HourlyEmp)、月薪制职员(SalariedEmp)和顾问(Consultant)。 ③这三种职员都共享的特征在Employee超类中,而自己特有的特征存储在其相应的子类中。 ④表示概化路径时,从子类到超类画一条实线,在实线的一端带空心的三角形指向超类。 ⑤也可以对给定超类的一组概化路径表达成一棵与单独子类相联系的多分支树,共享部分用指向超类的空心三角形表示。 ⑥譬如中,从门诊病人(Outpatient)到病人(Patient)和从住院病人(ResidentPatient)到病人(Patient)的两条概化路径结合成带指向Patient的三角形的共享部分。 | |||||||||
(2)下面介绍类图中与概化/特化有关的内容。 ①鉴别器 a.可以在紧靠路径处设置一个鉴别器(discriminator)指出概化的基础。 b.在左图中,可以在职员类型(计时制、月薪制、顾问)的基础上鉴别出职员类别。 c.在右图中,可以在住不住院的基础上鉴别出病人的类别。 ②概化表示了继承性联系 a.子类的对象也是超类的对象,因此概化是一个“is a”联系,子类继承了超类的所有性质。 b.继承性是使用面向对象模型的一个主要优点。继承性可以使代码具有重用性(reuse):程序员不必编写已在超类中编写过的代码,只需对那些作为已存在类的新的、被精炼的子类编写不重复的代码。 ③抽象类和具体类 a.抽象类(abstract class)是一种没有直接对象,但它的子孙可以有直接对象的类。 b.在左图中,抽象类应在类名下面用一对花括号并写上abstract字样(类Patient中已标出)。 c.有直接对象的类,称为具体类(concrete class)。 d.在右图中,Outpatient和ResidentPatient都可以有直接对象,但Patient不可以有它自己直接的对象。 ④子类的语义约束 a.子类的语义约束词。 ·complete、imcomplete和disjoint等字样放在花括号内,靠近概化。 ·这些单词表示了子类之间的语义约束。 b.这些约束主要有4种,其意义如下。 ·overlapping(重叠):子类的对象集可以相交。 ·disjoint(不相交):子类的对象集不可以相交。 ·complete(完备):超类中的对象必须在子类中出现。 ·imcomplete(非完备):超类中的对象可以不在子类中出现。 c.说明。 ·图中的概化都是不相交的。 ·一个职员可以是计时制、月薪制或顾问,但不可以同时兼。 ·同样,一个病人可以是一个门诊病人或住院病人,但不可以同时是两者。 ·左图中的概化是非完备的,表示一个职员可以不属于三种类型中的任何一个,此时这个职员作为具体类Employee的对象存储。 ·相反,右图中的概化是完备的,表示一个病人必须是门诊病人或住院病人,不能是其他情况,因此Patient被说明成一个抽象类。 | |||||||||
5.用类图表达聚合 (1)聚合的概念 ①聚合(aggregation)表达了成分对象和聚合对象之间的“is part of”(一部分)的联系。 ②聚合实际上是一种较强形式的关联联系(附加“is part of”语义)。 ③在类图中表示时,聚合的一端用空的菱形表示。 | |||||||||
(2)实例1 ①大学的聚合结构。 ②University(大学)由AdministrativeUnit(管理部门)和School(学院)聚合完成。 ③在Building(大楼)和Room(房间)之间联系的一端处的菱形不是空心的,是实心的。 ④实心菱形是一种较强形式的聚合,称为复合(Composition)。 ⑤在复合中,一个部分对象只属于一个整体对象,但与整体对象共存亡。 ⑥也就是聚合对象的删除将引起它的成分对象一起删除。 ⑦但是有可能在聚合对象消亡前就有可能其中一部分对象就被删掉了。大楼与房间就属于这样的联系。 | |||||||||
(3)实例2 ①类图表示了Product(产品)、Part(零件)、Assembly(部件)和Simple Part(元件)之间的关联。 ②产品有若干零件直接或间接组合而成。 ③零件被区分成部件和元件两类,元件是指不能再拆分的零件,而部件是指由其他部件或元件组合而成的零件。 ④也就是产品有若干零件组成,而零件本身又可以由其他零件组合而成。 ⑤这是一个“递归聚合”的例子。 ⑥在中,Part被表示成抽象类,因此一个零件可以是一个部件也可以是一个元件。 ⑦一个部件对象是零件实例的集合,表示它由其他部件和(或)元件组合而成。 |
联系客服