免费智能真题库 > 历年试卷 > 数据库系统工程师 > 2012年上半年 数据库系统工程师 上午试卷 综合知识
  第65题      
  知识点:   面向对象数据库系统的特征   面向对象数据模型   数据库   数据库系统
  关键词:   面向对象数据库   数据库系统   对象   面向对象   数据   数据库        章/节:   数据库主流应用技术       

 
以下关于面向对象数据库系统的叙述中,错误的是(65)。
 
 
  A.  具有表达和管理对象的能力
 
  B.  具有表达复杂对象结构的能力
 
  C.  不具有表达对象嵌套的能力
 
  D.  具有表达和管理数据库变化的能力
 
 
 

 
  第65题    2013年上半年  
   64%
在面向对象数据库系统的数据类型中,对象属于(65)类型。
  第64题    2012年上半年  
   48%
以下关于面向对象数据模型的叙述中,错误的是(64)。
  第62题    2011年上半年  
   48%
以下的SQL语句,Student与Person之间的关系是(62)。
   知识点讲解    
   · 面向对象数据库系统的特征    · 面向对象数据模型    · 数据库    · 数据库系统
 
       面向对象数据库系统的特征
        数据库的特征依赖于实际应用,所设计的数据库语言必须允许用户方便地使用这些特征,数据库的结构也应能有效地支持这些特征。本节结合面向对象的程序设计方法,讨论面向对象数据库系统与传统数据库系统相区别的主要特征。
        (1)面向对象数据库系统应该具有表达和管理对象的能力。面向对象数据库系统通过对象及它们之间的相互联系来描述现实世界。它应该支持对象标识,使得对象的存在不依赖于本身的值,而只依赖于它的标识,对象间能够通过对象标识而相互区分。类的层次和继承是一个关键的概念,新的类允许从以前定义过的类那里继承结构和操作。因此在面向对象数据库系统中,新的对象类型可以简便地重用已有的类型定义。面向对象数据库系统的一个问题是如何表示对象间的联系。在ODMG2.0(Object Database Management Group,对象数据库管理组)标准中,提出了用一对反向引用来表示二元关系,即把与某个对象相关的对象的标识放在那个对象内部,并维护参照完整性。
        (2)面向对象数据库系统中的对象可以具有任意复杂度的对象结构。这使对象能够包含所有描述该对象的必要信息。传统数据库恰好与此相反,它把关于复杂对象的信息分散在许多关系或记录中,从而丧失了现实世界的对象与数据库表示之间的直接对应关系。在面向对象数据库系统中,允许逐步细化复杂实体,还能将整个复杂对象或其子集作为一个独立的单位,可以在某一时刻将一成员对象加进去。
        (3)面向对象数据库系统必须具有与面向对象编程语言交互的接口。面向对象程序设计中的对象是瞬态对象,只在程序执行过程中存在,而面向对象数据库可以延长对象的存在,把对象持久地存储起来。对象在程序结束之后仍然持续存在,以后可以被检索或被其他程序使用。面向对象数据库系统通过与面向对象编程语言交互的接口,可以提供持久化对象和共享对象的能力,从而允许多个程序和应用共享这些对象。
        (4)面向对象数据库应具有表达和管理数据库变化的能力。管理同一对象的多个版本的能力对于设计和工程应用是至关重要的。一个对象的旧版本代表一个已经通过测试和鉴定的设计方案,那么应该保存这个版本直到新版本通过测试和鉴定。除了允许版本变化外,面向对象数据库系统也应该允许模式演变。所谓模式演变,是指类的声明发生了变化,或创建了新的类或联系。
        综上所述,一个面向对象数据库系统首先应是一个数据库系统,同时又必须具有面向对象的特征。
 
       面向对象数据模型
        数据模型是现实世界对象或实体,以及对象的约束和对象间联系的逻辑组织。面向对象数据模型借鉴了面向对象的概念,是面向对象数据库系统所必须支持的数据模型。
        面向对象数据库系统是以面向对象数据模型为基础的,是当今数据库技术发展的一大趋势。对于面向对象数据模型,已经有许多基本概念达成了共识,但是仍然缺少一个统一的严格的定义。面向对象数据模型可以看作是一个更高层次上的实现数据模型的新成员,它经常被用作高层概念模型,尤其在软件工程领域中更是如此。
        一系列面向对象的概念构成了面向对象数据模型的基础。概括起来,面向对象数据模型的基本概念有对象、类、继承、对象标识、对象嵌套等,下面将一一加以介绍。
               对象结构
               我们可以认为一个对象对应着E-R模型中的一个实体。对象中封装的属性和方法对外界是不可见的,对象之间的相互作用要通过消息来实现。一般来讲,一个对象有如下相关内容:
               (1)属性集合:一个对象的属性值构成了该对象的状态,类似于关系数据库中关系元组的属性。属性的值域可以是任何类,包括原子类,如整型值、字符串等。一个属性可以有一个单一值,也可以有一个来自于某个值域的值集,即一个对象的属性可以是一个对象,从而形成了嵌套关系。
               (2)方法集合:一个对象的方法作用于该对象的状态上,同一类对象所有操作的实现相同。方法的定义和实现:定义规定了方法名称、参数的个数和类型、返回值的类型,以及可能的语义描述;实现是一段代码,用来实现方法的功能。方法的定义和实现是相互分离的,为程序员提供了极大的灵活性,甚至可以用不同的语言实现不同的操作。
               (3)消息集合:消息是发送给对象以存取属性值的,除了通过对象所指定的公共界面外,没有其他方法可以访问该对象。对象接收外部传送的消息,执行相应的操作,操作的结果同样可以以消息的形式返回。
               对象类
               在面向对象数据库中,类是一系列相似对象的集合,对应于E-R模型中的实体集概念。类是面向对象系统和数据库系统之间最重要的连接。首先,类直接说明了一个实例及其所属类之间的实例关系;其次,类提供了构成查询的基础;再次,类可以用来增加面向对象数据库的语义完整性;最后,类提出了所有对象的属性和方法的规格说明,便于生成对象。
               每个对象是它所在类的一个实例。类的概念类似于关系模式,类的属性类似于关系模式中的属性;对象类似于元组,类的一个实例对象类似于关系中的一个元组。如果把类本身看作一个对象,则称之为类对象。与其相关的属性集和方法集适用于该类对象而不适用于该类的实例,这样的属性和方法称之为类属性和类方法。一个类的类属性常常用来描述该类的实例的聚集特性。例如,所有学生实例的“平均年龄”就是一个聚集特性的例子。
               继承与多重继承
               在面向对象数据模型中,所有类形成了一个有限的层次结构或者是有根的无环有向图,我们称之为类层次。如有一个类C和一个连接到C的一组较低层类的集合S,则集合S中的类称为类C的子类,而类C又称为集合S中类的父类。集合S中的任何类继承类C的所有属性和方法,并可以有自己定义的属性和方法。一个父类可以有多个子类,一个子类也可以有多个父类,都存在直接关联或者间接关联的现象。
               在面向对象数据模型中存在着两种继承:继承(单继承)和多重继承。在大多数情况下,类的继承足以满足应用的要求,典型的树型结构组织用来表示类层次。在树型结构组织中,每个类最多有一个父类,即一个子类只能继承一个父类的属性、方法和消息。然而,有些情况用树型结构并不能很好地表达类层次。多重继承允许一个类从多个直接父类中继承属性、方法和消息,此时类层次可以用一个有向无环图来表示。
               在下图中给出了一个学校数据库的类层次结构图,通过它我们分别来解释类层次、继承和多重继承。
               
               具有多继承的类层次结构图
               在这个学校应用的面向对象数据库系统中,“人”是其他所有类的父类,它是这个有向无环图的根,是一个最高的类层次;在下面的一个类层次中,教工和学生是人的子类,它们继承了人的所有属性、方法和消息,同时又有本身的特殊属性、方法和消息;在最低的一个类层次中,教师、行政人员、工人和在职研究生是教工的子类,它们继承了教工和人的所有属性、方法和消息,在职研究生、研究生和本科生是学生的子类,它们继承了学生和人的所有属性、方法和消息。值得一提的是,在职研究生既是教工的子类,也是学生的子类,它同时继承了教工和学生两个父类的所有属性、方法和消息。
               类的继承带来很多的优点,子类在继承父类特性的同时,还可以定义自身的属性、方法和消息,但这样就可能和父类的属性、方法和消息发生冲突。这类冲突可能发生在子类和父类之间,通常由系统解决。对于子类和父类之间的同名冲突,一般是以子类定义的为准。但是在多继承中,一个子类可以有多个父类,如果这些父类中存在同名冲突,就会发生二义性。例如,教工和学生都有方法“显示信息”,它们共同的子类在职研究生就不知道应该继承哪一个方法了。在多继承中有三种处理二义性的方案:一是由用户选择继承的优先次序;二是由系统指定继承某一个父类的定义;三是如果出现了二义性问题,就不允许多继承,甚至有些面向对象数据库系统根本不允许多继承。
               对象标识
               每个对象有一个唯一的、由系统生成的对象标识(Object Identifier,OID)。OID的值对外部用户来说是不可见的,但是系统会在内部用这个值唯一地标识每个对象,并用这个值创建和管理内部对象引用。
               相对于非面向对象数据模型和程序设计语言来说,对象标识给出了一种更强的标识概念,几种常用的标识形式如下:
               (1)值:用于标识的一个数据值。这种形式的标识常在关系数据库中使用。如一个元组的主码标识了这个元组。
               (2)名称:用于标识的用户提供的一个名称。在程序设计语言中,用户赋予每个变量一个名字来标识它;在文件系统中,用户给每个文件赋予一个名称来唯一地标识这个文件。
               (3)内置名:以上两种标识是由用户给出的,而内置名则是一种由系统来提供的标识。这种形式的标识在数据模型或程序设计语言中使用。
               不同的标识符其持久性程度是不同的,主要有以下几种:
               (1)过程内持久性:标识只有在单个过程的执行期间才是持久的,如过程内的局部变量。
               (2)程序内持久性:标识只有在单个程序或查询执行期间才是持久的,如程序设计语言中的全局变量、内存指针,SQL语句中的元组标识符。
               (3)程序间持久性:标识在从一个程序的执行到另一个程序的执行期间都保持不变,如指向磁盘上的文件系统数据的指针提供了程序之间的标识,SQL语句中的关系名也具有程序间持久性。
               (4)永久持久性:标识的持久性不仅仅跨越了各个程序的执行,还跨越了数据结构的重新组织。这种持久性正是面向对象系统所要求的。
               对象标识符必须具有永久持久性,也就是说,特定对象一经产生,系统就赋予一个在全系统中唯一的对象标识符,应该是固定不变的,一直到它被删除。面向对象数据库系统必须具有生成对象标识并维护其永远不变性的机制。
               标识符通常是由系统自动生成的,不需要用户来完成这项工作。然而在使用这种功能时要注意:系统生成的标识符通常是特定于这个系统的,如果要将数据转移到另一个不同的数据库系统中,则标识符必须进行转化。而且,如果一个实体在建模时已经有一个系统之外的唯一标识符,则系统生成的标识符就可能是多余的。如身份证号码可以作为个人的唯一标识符。
               早期的面向对象数据模型要求把所有的一切表示为对象,无论是一个简单的值还是一个复杂的对象,导致这样的情况出现:两个整型数值10和20,需要创建两个具有不同OID的对象。这种模型需要生成很多的对象标识符,很不实用。因此,大多数的面向对象数据库系统允许有对象和值两种表示方法,即每个对象必须有一个永远不变的OID,但是值没有OID,值只是代表它自己。
               对象嵌套
               对象嵌套是面向对象数据库系统中的一个重要概念。
               在面向对象数据模型中,对象的一个属性可以是一个单一值,也可以是一个来自于值域的值集,即一个对象的属性可以是一个对象,形成了嵌套关系,产生了一个嵌套层次结构。
               一个对象被称为复杂对象,如果它的某个属性的值是另一个对象。复杂对象主要分为两类:非结构化的复杂对象和结构化的复杂对象。非结构化的复杂对象通常是数据库系统不明结构、需要大量存储空间的数据类型,如图像或大文本对象。结构化的复杂对象是指数据库系统清楚对象内部结构,并可以通过递归生成的对象。
               关系模式是对一个二维关系的描述,具有平面的结构。前面讲到的类层次结构形成了对象间的纵向关系,这里的对象嵌套层次结构则形成了对象间的横向关系。我们通过下图来说明。每台笔记本电脑包括:产地、型号、外部设备和内部器件等属性。其中产地和型号的数据类型是字符串,外部设备和内部器件都不是标准数据类型,而是对象。外部设备包括:外接鼠标和外接光驱等属性;内部器件包括:显示器、CPU、内存、硬盘等属性;外接光驱也是一个对象,包括:产地、型号、功率等属性。这样一种嵌套层次结构允许不同的用户采用不同的粒度来观察对象,突出了对象的特征,隐藏了不必要的信息,简化了查询。
               
               笔记本电脑的嵌套层次图
 
       数据库
        数据库(DataBase,DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
        系统使用的所有数据存储在一个或几个数据库中。
 
       数据库系统
        简单地说,数据库系统就是基于数据库的计算机应用系统。这样一个系统包括以下内容。
        ①以数据为主体的数据库。
        ②管理数据库的系统(DBMS)。
        ③支持数据库系统的计算机硬件环境和操作系统环境。
        ④管理和使用数据库系统的人——数据库管理员。
        1)数据库的定义和特征
        数据库,顾名思义就是存放数据的仓库,这种想当然的理解是不准确的。数据库对应的英文单词是DataBase,如果直译则是数据基地;而数据仓库则另有其词DataWarehouse。所以数据库和数据仓库不是同义词,数据仓库是在数据库技术的基础上发展起来的又一新的应用领域。
        数据库技术发展到今天已经是一门成熟的技术,但却没有一个被普遍接受的、严格的定义。数据库是相互关联数据的集合,这是大家公认的数据库的基本特征之一。下面一段话概括了数据库应该具备的一些特征,也可以把它作为数据库的定义。
        数据库是相互关联数据的集合,它用综合的方法组织数据,具有较小的数据冗余,可供多个用户共享,具有较高的数据独立性,具有安全控制机制,能够保证数据的安全、可靠,允许并发地使用数据库,能有效、及时地处理数据,并能保证数据的一致性和完整性。
        (1)相互关联的数据集合。数据库中的数据不是孤立的,数据与数据之间是相互关联的。也就是说,在数据库中不仅要能够表示数据本身,还要能够表示数据与数据之间的联系。比如在学籍管理中,有学生和课程两类数据,在数据库中除了要存放这两类数据之外,还要存放哪些学生选修了哪些课程或哪些课程由哪些学生选修这样的信息,这就反映了学生数据和课程数据之间的联系。
        (2)用综合的方法组织数据。数据库能够根据不同的需要按不同的方法组织数据,如可以用顺序组织方法、索引组织方法、聚集(Cluster)组织方法等。
        (3)低冗余与数据共享。由于在数据库技术之前,数据文件都是独立的,所以任何数据文件都必须含有满足某应用的全部数据。比如,人事部门有一个职工文件,教育部门也有一个职工文件,两个部门的职工文件中都有"职工基本情况"的数据,也就是说这一部分数据是重复存储的,如果还有第三、第四个部门也有类似的职工文件,那么重复存储所造成的空间浪费是很大的。在数据库中,可以共享类似"职工基本情况"这样的共用数据,从而降低数据的冗余度。
        (4)数据具有较高的独立性。数据独立性是指数据的组织和存储方式与应用程序互不依赖、彼此独立的特性。在数据库技术之前,数据文件的组织方式和应用程序是密切相关的,当改变数据结构时,相应的应用程序也必须随之修改,这样就大大增加了应用程序的开发代价和维护代价。而数据库技术却可以使数据的组织和存储方法与应用程序互不依赖,从而大大降低应用程序的开发代价和维护代价。
        (5)保证数据的安全、可靠。数据库技术要能够保证数据库中的数据是安全、可靠的。数据库要有一套安全机制,以便可以有效地防止数据库中的数据被非法使用或非法修改;数据库还要有一套完整的备份和恢复机制,以便保证当数据遭到破坏时(软件或硬件故障引起的),能立刻将数据完全恢复,从而保证系统能够连续、可靠地运行。
        (6)最大限度地保证数据的正确性。保证数据正确的特性在数据库中称为数据完整性。在数据库中可以通过建立一些约束条件保证数据库中的数据是正确的。比如输入年龄小于0或者大于200时,数据库能够主动拒绝这类错误。
        (7)数据可以并发使用并能同时保证数据的一致性。数据库中的数据是共享的,并且允许多个用户同时使用同一数据,这就要求数据库能够协调一致,保证各个用户之间对数据的操作不发生矛盾和冲突,即在多个用户同时使用数据库的情况下,能够保证数据的一致性和正确性。
        2)数据库管理系统
        数据库的各种功能和特性,并不是数据库中的数据所固有的,而是靠管理或支持数据库的系统软件——数据库管理系统(DataBase Management System, DBMS)提供的。一个完备的数据库管理系统应该具备上一节提到的各种功能,其任务就是对数据资源进行管理,并且使之能为多个用户共享,同时还能保证数据的安全性、可靠性、完整性、一致性,并要保证数据的高度独立性。一个数据库管理系统应该具备以下功能。
        (1)数据库定义功能。可以定义数据库的结构和数据库的存储结构,可以定义数据库中数据之间的联系,可以定义数据的完整性约束条件和保证完整性的触发机制等。
        (2)数据库操纵功能。可以完成对数据库中数据的操纵,可以装入、删除、修改数据,可以重新组织数据库的存储结构,可以完成数据库的备份和恢复等操作。
        (3)数据库查询功能。可以以各种方式提供灵活的查询功能,可以使用户方便地使用数据库中的数据。
        (4)数据库控制功能。可以完成对数据库的安全性控制、完整性控制、多用户环境下的并发控制等各方面的控制。
        (5)数据库通信功能。在分布式数据库或提供网络操作功能的数据库中还必须提供数据库的通信功能。
        3)数据库管理员
        从事数据库管理工作的人员称为数据库管理员(DataBase Administrator, DBA)。DBA有大量的工作要做,既有技术方面的工作,又有管理方面的工作,要参加数据库开发和使用的全部工作。总体来说,DBA的工作可以概括如下。
        (1)在数据库规划阶段要参与选择和评价与数据库有关的计算机软件和硬件,要与数据库用户共同确定数据库系统的目标和数据库应用需求,要确定数据库的开发计划。
        (2)在数据库设计阶段要负责数据库标准的制定和共用数据字典的研制,要负责各级数据库模式的设计,要负责数据库安全、可靠方面的设计。
        (3)在数据库运行阶段首先要负责对用户进行数据库方面的培训;要负责数据库的转储和恢复;要负责对数据库中的数据进行维护;要负责监视数据库的性能,并调整、改善数据库的性能,提高系统的效率;要继续负责数据库安全系统的管理;要在运行过程中发现问题、解决问题。
        4)数据库的发展
        数据库的核心任务是数据管理,它包括数据的分类、组织、编码、存储、检索和维护等。数据管理经历了以下3个阶段。
        (1)人工管理阶段。人工管理阶段是指计算机诞生的初期(20世纪50年代中期以前)。这个时期的计算机技术,从硬件看还没有磁盘这样的可直接存取的存储设备,从软件看没有操作系统,更没有管理数据的软件。这个时期数据管理的特点如下。
        ①数据不保存。因为计算机主要用于科学计算,一般也不需要长期保存数据,只是在完成某一个计算或课题时才将数据输入,然后不仅原始数据不保存,计算结果也不保存。
        ②没有文件的概念。这个时期的数据组织必须由每个程序的程序员自行组织和安排。
        ③一组数据对应一个程序。每组数据只对应一个应用,即使两个程序用到相同的数据,也必须各自定义、各自组织,数据无法共享、无法相互利用和互相参照。因此,程序和程序之间有大量的数据重复。
        ④没有形成完整的数据管理的概念。由于以上几个特点及没有对数据进行管理的软件系统,所以这个时期的每个程序都要包括数据存取方法、输入输出方法和数据组织方法等。因为程序是直接面向存储结构的,所以存储结构的任何一点修改,都会导致程序的修改,程序与数据不具有独立性。
        (2)文件系统阶段。文件系统阶段是指20世纪50年代后期到60年代中期这一阶段。从那时起,计算机不仅大量用于科学计算,也开始大量用于信息管理。像磁盘这样的直接存取存储设备也已经出现,在软件方面也有了操作系统和高级语言,还有了专门用于数据管理的软件,即文件系统(或操作系统的文件管理部分)。这个阶段的数据管理具有以下特点。
        ①数据可以长期保存在磁盘上,也可以反复使用,即可以经常对文件进行查询、修改、插入和删除等操作。
        ②操作系统提供了文件管理功能和访问文件的存取方法,程序和数据之间有了数据存取的接口,程序开始通过文件名和数据打交道,可以不再关心数据的物理存放位置。因此,这时也有了数据的物理结构和数据的逻辑结构的区别。程序和数据之间有了一定的独立性。
        ③文件的形式已经多样化。由于有了磁盘这样的直接存取存储设备,文件也就不再局限于顺序文件,也有了索引文件、链表文件等。因而,对文件的访问可以是顺序访问,也可以是直接访问。但文件之间是独立的,它们之间的联系要通过程序去构造,文件的共享性还比较差。
        ④有了存储文件以后,数据就不再仅仅属于某个特定的程序,而是可以由多个程序反复使用。但文件结构的设计仍然是基于特定的用途,程序仍然是基于特定的物理结构和存取方法编制的。因此,数据的存储结构和程序之间的依赖关系并未根本改变。
        ⑤数据的存取基本上以记录为单位。
        (3)数据库系统阶段。数据库系统阶段从20世纪60年代后期开始,数据库技术的诞生既有计算机技术的发展做依托,又有数据管理的需求做动力。数据库的数据不再是面向某个应用或某个程序,而是面向整个企业(组织)或整个应用。
   题号导航      2012年上半年 数据库系统工程师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第65题    在手机中做本题