免费智能真题库 > 历年试卷 > 数据库系统工程师 > 2018年上半年 数据库系统工程师 上午试卷 综合知识
  第69题      
  知识点:   面向对象数据模型   实体   关系模型   数据模型
  关键词:   E-R   标识符   关系模型   面向对象数据模型   实体   对象   面向对象   数据   数据模型        章/节:   数据库主流应用技术       

 
E-R图中的实体集A、B之前为1:*联系,转换为关系模型时,在B实体集中增加A实体集的标识符作外码;而在面向对象数据模型中,()。
 
 
  A.  在B对象中增加一个引用属性外,对A对象不作任何处理
 
  B.  在B对象中增加一个引用属性外,在A对象中增加一组引用属性
 
  C.  在A对象中增加一组引用属性外,对B对象不作任何处理
 
  D.  在A对象中增加一组引用属性外,在B对象中增加一组引用属性
 
 
 

 
  第64题    2012年上半年  
   48%
以下关于面向对象数据模型的叙述中,错误的是(64)。
  第62题    2010年上半年  
   61%
对象关系数据库中,员工(工号,姓名,性别,联系电话)表中的联系电话为多值属性,则员工属于(62),在SOL99标准中可以使用(63)..
  第62题    2009年上半年  
   58%
对象一关系模型与关系模型的区别是(62) 。
   知识点讲解    
   · 面向对象数据模型    · 实体    · 关系模型    · 数据模型
 
       面向对象数据模型
        数据模型是现实世界对象或实体,以及对象的约束和对象间联系的逻辑组织。面向对象数据模型借鉴了面向对象的概念,是面向对象数据库系统所必须支持的数据模型。
        面向对象数据库系统是以面向对象数据模型为基础的,是当今数据库技术发展的一大趋势。对于面向对象数据模型,已经有许多基本概念达成了共识,但是仍然缺少一个统一的严格的定义。面向对象数据模型可以看作是一个更高层次上的实现数据模型的新成员,它经常被用作高层概念模型,尤其在软件工程领域中更是如此。
        一系列面向对象的概念构成了面向对象数据模型的基础。概括起来,面向对象数据模型的基本概念有对象、类、继承、对象标识、对象嵌套等,下面将一一加以介绍。
               对象结构
               我们可以认为一个对象对应着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、内存、硬盘等属性;外接光驱也是一个对象,包括:产地、型号、功率等属性。这样一种嵌套层次结构允许不同的用户采用不同的粒度来观察对象,突出了对象的特征,隐藏了不必要的信息,简化了查询。
               
               笔记本电脑的嵌套层次图
 
       实体
        从上表中可见,在E-R模型中实体用矩形表示,通常矩形框内写明实体名。实体是现实世界中可以区别于其他对象的“事件”或“物体”。例如,企业中的每个人都是一个实体。每个实体由一组特性(属性)来表示,其中的某一部分属性可以唯一标识实体,如职工号。实体集是具有相同属性的实体集合,例如,学校所有教师具有相同的属性,因此教师的集合可以定义为一个实体集;学生具有相同的属性,因此学生的集合可以定义为另一个实体集。
 
       关系模型
        我们先学习几个相关的基本概念。
        (1)域:一组具有相同数据类型的值的集合。
        (2)笛卡儿积:给定一组域D1D2,…,Dn,这些域中可以有相同的。它们的笛卡儿积为:D1×D2×…×Dn={(d1d2,…,dn)|djDjj=1,2,…,n}。其中每一个元素(d1d2,…,dn)叫作一个n元组(简称为元组)。元组中的每一个值dj叫作一个分量。
        (3)关系:D1×D2×…×Dn的子集叫作在域D1D2,…,Dn上的关系,用RD1D2,…,Dn)表示。这里R表示关系的名字,n是关系的目或度。
        关系中的每个元素是关系中的元组,通常用t表示。关系是笛卡儿积的子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性。
        若关系中的某一属性组(一个或多个属性)的值能唯一地标识一个元组,则称该属性组为候选码(候选键)。若一个关系有多个候选码,则选定其中一个作为主码(主键)。主码的所有属性称为主属性。不包含在任何候选码中的属性称为非码属性(非主属性)。在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式所有属性的组合构成关系模式的候选码,称为全码。
        关系可以有三种类型:基本关系(基本表、基表)、查询表和视图表。基本表是实际存在的表,它是实际存储数据的逻辑表示;查询表是查询结果对应的表;视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
        基本关系具有以下6条性质:
        (1)列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。
        (2)不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
        (3)列的顺序无所谓,即列的次序可以任意交换。
        (4)任意两个元组不能完全相同。但在大多数实际关系数据库产品中,例如Oracle等,如果用户没有定义有关的约束条件,它们都允许关系表中存在两个完全相同的元组。
        (5)行的顺序无所谓,即行的次序可以任意交换。
        (6)分量必须取原子值,即每一个分量都必须是不可分的数据项。
        关系的描述称为关系模式,一个关系模式应当是一个五元组,它可以形式化地表示为:RUD,DOM,F)。其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。关系模式通常可以简记为RA1A2,…,An)。其中R为关系名,A1A2,…,An为属性名。
        关系实际上就是关系模式在某一时刻的状态或内容。也就是说,关系模式是型,关系是它的值。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。但在实际当中,常常把关系模式和关系统称为关系,读者可以从上下文中加以区别。
        在关系模型中,实体以及实体间的联系都是用关系来表示。在一个给定的现实世界领域中,相应于所有实体及实体之间的联系的关系的集合构成一个关系数据库。
        关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述,是关系模式的集合。关系数据库的值也称为关系数据库,是关系的集合。关系数据库模式与关系数据库通常统称为关系数据库。
 
       数据模型
        1)信息结构与E-R方法
        (1)数据的3种范畴。数据需要进行认识、理解、整理、规范和加工,然后才能存放到数据库中。也就是说,数据从现实生活进入到数据库实际经历了若干个阶段。一般划分为3个阶段,也就是数据的3种范畴,即现实世界、信息世界、机器世界。
        ①现实世界。存在于人们头脑之外的客观世界,也就是客观存在并可以相区分的客观事物或抽象事物,称为实体。
        ②信息世界。客观事物必然在人们的头脑中产生反映,把这种反映称为信息。
        ③机器世界。对信息世界的信息进行数据化,数据化后的信息称之为数据。
        (2)E-R方法。我们需要对现实世界的信息结构进行描述,最常用的方法是实体-联系方法,即通常所说的E-R(Entity-Relationship)方法。E-R方法使用的工具称为E-R图,它所描述的现实世界的信息结构称为企业模式(Enterprise Schema),也把这种描述结果称为E-R模型。
        E-R图的3个要素是实体、属性以及实体和属性之间的联系。
        ①实体。在E-R图中用矩形框表示实体,把实体名写在方框内。
        ②属性。实体的属性用椭圆框表示,框内写上属性名,并用连线与相应的实体相连。这种画法有点麻烦,后来也有直接将属性名写在实体旁边,并对实体的标识属性标注下划线。
        ③联系。联系本身也有属性,联系是通过相关联的实体的有关属性体现出来的。实体之间的联系用菱形框表示,框内写上联系名,并用连线与有关的实体相连。实体之间联系的基本类型有一对一(1∶1)、一对多(1∶n)和多对多(mn)3种。
        实体之间的联系类型并不取决于实体本身,而是取决于现实世界的管理方法,或者说取决于语义,即同样两个实体,如果有不同的语义,则可以得到不同的联系类型。比如有仓库和器件两个实体,下面来讨论它们之间的联系。
        ①如果规定一个仓库只能存放一种器件,并且一种器件只能存放在一个仓库,这时仓库和器件之间的联系是一对一的。
        ②如果规定一个仓库可以存放多种器件,但是一种器件只能存放在一个仓库,这时仓库和器件之间的联系是一对多的。
        ③如果规定一个仓库可以存放多种器件,同时一种器件可以存放在多个仓库,这时仓库和器件之间的联系是多对多的。
        2)数据库系统的体系结构
        数据库系统的应用结构经历了集中式结构、文件服务器的网络结构到现在客户机/服务器网络结构以及分布式网络结构。
        (1)集中式数据库系统。集中式数据库系统,就是将数据以及数据的管理都集中在一台计算机上。这类数据库效率高,可靠性好,数据冗余少,数据独立性高。
        (2)客户机/服务器(C/S)数据库系统。在客户机/服务器数据库系统中,数据库服务器的平台与客户端无关,其数据库管理系统集中负责管理数据库服务器上的数据和资源,它向客户提供一个开放的使用环境,客户端的用户通过数据库接口访问数据库。客户端称为前台,服务器称为后台。前台的工作包括管理用户接口或界面、采集数据、向后台发出请求等;而后台负责管理外设、存取共享数据、响应前台请求并送回结果。客户端的应用程序和数据一般是用户自己专用的,而服务器的功能和数据是所有用户共享的。
        (3)分布式数据库系统。分布式数据库系统就是数据物理的分布存储在不同的计算机上,这些物理上分布存储的数据在逻辑上构成一个整体的数据库。也就是一个物理上分布于计算机网络的不同地点,而逻辑上又属于同一系统的数据集合。网络上每个地点的数据库都有自治能力,能够完成局部应用;同时每个地点的数据库又属于整个系统,通过网络也可以完成全局应用。
        3)传统的三大模型
        数据库中不仅要存放数据本身,还要存放数据与数据之间的联系,可以用不同的方法表示数据与数据之间的联系,把表示数据与数据之间联系的方法称为数据模型。传统的数据模型有层次数据模型、网络数据模型和关系数据模型。
        (1)层次数据模型。用树形结构来表示实体之间的联系的模型称为层次模型。支持层次模型的典型系统诞生于1970年前后,就是IBM公司的IMS(Information Management System)。构成层次模型的树是由节点和连线组成的,节点表示实体集(文件或记录型),连线表示相连两个实体之间的联系,这种联系只能是一对多的。通常把表示"一"的实体放在上方,称为父节点;而把表示"多"的实体放在下方,称为子节点。层次模型表示一对多的联系是直接而方便的。但由于层次模型有以下两点限制:
        ①有且仅有一个节点无父节点,这个节点即为树的根。
        ②其他节点有且仅有一个父节点。
        这样就使得多对多联系不能直接用层次模型表示,但是如果把多对多联系转换成一对多联系,又会出现一个子记录型有多个父记录型的结果,这同样不符合层次数据库的要求。解决的办法只有把它分解成两个层次型。层次数据模型或层次数据库是由若干层次型构成的,或者说它是一个层次型的集合。
        (2)网络数据模型。如果取消层次模型中的两点限制,即允许每一个节点可以有多个父节点,便形成了网络。用网络结构来表示实体之间联系的数据模型称为网络数据模型。网络模型和层次模型在本质上是一样的,从逻辑上看它们都是用连线表示实体之间的联系,用节点表示实体集;从物理上看,层次模型和网络模型都是用指针来实现两个文件之间的联系,其差别仅在于网络模型中的连线或指针更加复杂,更加纵横交错,从而使数据结构更复杂。在网络模型中同样使用父节点和子节点这样的术语,并且同样把父节点安排在子节点的上方。网络数据模型的典型代表是CODASYL系统。
        (3)关系数据模型。关系数据模型源于数学,它把数据看成二维表中的元素,而这个二维表就是关系。用关系(表格数据)表示实体和实体之间联系的模型称为关系数据模型。通俗地讲,关系就是一个二维表格,表格中的每一行称为一个元组,它相当于一个记录值,每一列是一个属性值集,列可以命名,称为属性名。这里的属性与前面讲到的实体属性(特征)或记录的字段意义相当。由此可见,关系是元组的集合,如果表格有n列,则称该关系是n元关系。关系应满足以下性质。
        ①表格中的每一列都是不可再分的基本属性。
        ②各列被指定一个相异的名字。
        ③各行相异,不允许重复。
        ④与行、列次序均无关。
        综合以上4点,可以说:一个关系是一个文件,该文件中的每个记录是唯一的,所有记录具有相同个数和类型的字段,也就是说,所有记录有同样的固定长度和格式。在关系数据模型中实体本身以及实体与实体之间的联系都用关系来表示,实体之间的联系不再通过指针来实现。
        对于用户,关系方法应该是很简单的,但是关系数据库管理系统本身是很复杂的。关系方法之所以对用户简单,是因为它把大量的困难转给了数据库管理系统。关系数据库管理系统一经投入使用,便逐步取代了层次数据库和网状数据库。现在耳闻目睹的数据库管理系统,全部都是关系数据库管理系统,像Sybase、Oracle、Informix、MS SQL Server、FoxPro、Access等。
        4)数据独立性和三层模式结构
        数据独立性是指应用程序与存储数据相互独立的特性。也就是当修改数据的组织方法和存储结构时,应用程序不用修改的特性。数据独立性又分为存储数据独立性和概念数据独立性。
        (1)存储数据独立性。以前所熟悉的计算机文件,都是真正在磁盘上存在的物理文件或存储文件,应用程序也是针对这样的文件而写的。在存储文件中,不仅存储了管理现实世界所需要的各种数据,还存储了大量为了管理文件本身所需要的辅助数据,如索引和指针等。为了使应用程序与这些索引和指针等分离开来,使之只关心管理现实世界所需要的各种数据本身,把程序分成两部分,一部分是应用程序或用户程序(User-Program),另一部分是存储子程序(Storage-Routine)。用户程序操作一个物理上并不存在的概念文件或逻辑文件,而实际操作则是交由存储子程序去操作存储文件来完成的。这时如果修改存储文件的组织方法或存储结构,将与用户程序无关,而存储子程序则可以做成通用的和商品化的程序。实际上,这里的存储子程序就是后来的数据库管理系统的数据存储子系统。概念文件只是"概念上"的,它实际上并不存在,可以把它看作存储文件的抽象。也可以假设概念文件只包含用户有用的数据,像指针那些辅助字段被屏蔽掉了。或者说,概念文件是用户存取存储文件的结构或框架。
        通过概念文件只需要关心文件中有哪些数据,至于数据是怎么存储的、还有哪些指针和索引都不用关心。显然这种两级方案给用户程序带来了存储数据独立性,即不管存储文件的存储方法和存储结构怎么改变,用户程序都能继续正确执行。
        存储数据独立性的最大好处是可以大大节省程序的维护代价。一般在一个大的系统中,会有很多用户程序操作存储文件,如果所有这些程序都通过存储子程序和概念文件完成它们的操作,那么当要改变存储文件的存储方法时,所有这些程序都不会受到影响。
        (2)概念数据独立性。每个用户程序并不一定使用概念文件中的全部数据字段,不同的用户程序只是从概念文件中抽取部分字段为自己所用。把从概念文件抽取的部分字段称为外部文件,这也为获得概念数据独立性奠定了基础。
        概念数据独立性也称为逻辑数据独立性,它是指当用户程序操作的概念文件有插入或删除字段的情况发生时(当然是通过存储文件),用户程序仍能正确执行的性质。当然,插入或删除的字段与这个用户程序是无关的,也就是说,它们不是这个用户程序使用的字段。
        (3)数据库的三层模式结构。不管是概念文件还是外部文件,它们都不真正含有数据,只是存取存储文件的结构或框架;概念文件是存储文件的抽象,而外部文件是概念文件的部分抽取。使用这种三层结构不仅可以使数据具有独立性,使数据和程序的代价大大降低,而且还可以使数据达到共享,使同一数据满足更多用户的不同需求。
        5)关系数据库
        (1)关系模型的基本概念。设D1,D2,…,Dn为任意集合,定义D1,D2, …,Dn的笛卡儿积为
        D1×D2×…×Dn={(d1,d2, …,dn)|diDii=1, 2, …,n}
        笛卡儿积D1×D2×…×Dn的任意一个子集称为D1,D2,…,Dn上的一个n元关系。
        可以把二元关系看成二维表,给表的每一列取个名字,称为属性,n元关系就有n个属性,属性的名字要唯一,其取值范围Dii=1, 2, …,n)称为值域。
        如果一个属性集的值能唯一标识一个关系的元组而又不含有多余的属性,则称该属性集为候选关键字。有时一个关系中有多个候选关键字,这时可以选择其中一个作为主关键字,简称关键字。每一个关系都有一个并且只有一个主关键字。
        如果一个属性集不是所在关系的关键字,但是是其他关系的关键字,则该属性集称为外部关键字。
        关系模式就是二维表的表框架或结构,它相当于文件结构或记录结构。
        关系模型是所有的关系模式、属性名和关键字的汇集,是模式描述的对象。
        对应于一个关系模型的所有关系的集合称为关系数据库。
        关系模型下的术语列举如下。
        ①属性:数据项(字段)。
        ②元组:记录(值)。
        ③关系:文件(值)。
        ④关系模式:记录类型(文件格式)。
        ⑤关系名:文件名(记录名)。
        ⑥数据库模式:概念模式。
        最后概括一下关系的性质。
        ①列是同质的,即每一列中的分量是同类型的数据,来自同一个值域。
        ②不同的列可以出自同一个值域,每一列称为属性,要给予不同的属性名。
        ③列的顺序是无关紧要的,即列的次序可以任意交换。
        ④元组不可以重复,即任意两个元组不能完全相同。
        ⑤行的顺序是无关紧要的,即行的次序可以任意交换。
        ⑥每一分量必须是不可分的最小数据项。
        ⑦每个关系都有一个主关键字唯一标识它的各个元组。
        (2)关系模式。关系数据库同样具有3层模式,即概念模式、存储模式和外部模式。关系概念模式主要包括对出现在数据库中的每个关系的说明,包括对关系名、属性名和属性的取值范围(类型)的说明。在关系数据模型中可以不说明关系与关系之间的联系(关系与关系之间的联系是通过连接字段实现的)。比如有以下的关系:
        花名册(学号,姓名,年龄)
        成绩单(学号,姓名,成绩)
        关系存储模式从原理上讲与其他类型数据库系统的存储模式没有什么不同,每个概念文件都对应一个存储文件。一般基于主关键字进行直接存取需要建立一个主索引(唯一索引),通过辅助关键字进行存取需要建立一个辅助索引(一般索引)。在关系存储模式中不用说明存储文件,存储文件的说明由关系数据库管理系统根据基本表(概念文件)的定义自动映射产生。所以,在关系存储模式中要说明的主要内容就是索引。
        关系外部模式的定义和其他类型数据库系统的外部模式一样,在关系数据库中外部文件被称为视图(View)。
        (3)关系代数。关系代数是对关系运算的总和。关系运算分为以下两类。
        ①传统的集合运算,这种运算将关系看作元组的集合。
        ②专门的关系运算。
        传统的集合运算是二目运算,设关系RS均是n元关系,且相应的属性值取自同一个值域,则可以定义并运算(∪)、交运算(∩)、差运算(-)以及前面讲的笛卡儿乘积。
        ①RS的并是集合,记为RS, RS={x|xRxS}。
        ②RS的交是集合,记为RS, RS={x|xRxS}。
        ③RS的差,或S关于R的相对补是集合,记为R-SR-S={x|xRx?S}。
        在关系代数中,有4种基本的专门关系运算,即选择(Select)、投影(Project)、自然连接(Join)和除法运算(Division)。
        ④选择运算是最简单的运算,它从指定的关系中选择某些元组形成一个新的关系,被选择的元组是用满足某个逻辑条件来指定,表示为σFR),其中σ是选择运算符,R是关系名,F是逻辑表达式。
        比如,对下表所示的订购单关系,选择职工号为E3的元组构成新的关系,可以有如下的选择运算:
        
        
        订购单关系表
        结果如下表所示。
        
        运算结果表
        ⑤投影运算是对指定的关系进行投影操作,根据该关系分两步产生一个新关系。首先选择指定的属性,形成一个可能含有重复行的表格,然后删除重复行形成新的关系,表示为πAR),其中π是投影运算符,A是被投影的属性或属性集。
        比如:对订购单关系选取职工号和供应商号两列组成新的关系,可以有以下投影运算:
        
        结果如下表所示。
        
        π运算结果表
        ⑥自然连接运算定义如下:当两个关系RS的某些列具有相同的属性名时,可利用这些同名属性列的相同值作为连接条件将两个关系连接起来,构成自然连接。在连接后的关系中,不仅含有RS不同的属性列,而且含有相同的属性列,其元组的数目由公共属性列中的相同值决定。
        设R是属性名为(A1,A2, …,Am, …,Ak1)的k1元关系,S是属性名为(A1,A2,…,Am, …,Bk2)的k2元关系,其中A1,A2, …,Am是同名属性列,进行自然连接的步骤如下:选出关系RS中属性A1,A2,…,Am完全相同的所有元组;对这些元组进行笛卡儿乘积;最后去掉重复属性。
        ⑦除法运算是指用一个m+n度的关系R除以一个n度关系S,运算结果生成一个m元的新关系。这里R的第m+i个属性和S的第i个属性(i=1, 2, …,n)必须是在相同的域上定义。如果把R的前m个属性看作一个组合属性x,后n个属性看成一个组合属性y,则S也可类似地看成一个组合属性y。这样以S中的y值来对R进行分组,当组中含有y值时,则组中的x值便构成了R除以S的一个元组。R除以S的数学表达式为
        R÷S=πaR)-πaaR×S-R]
        式中,a为关系R中除去与S关系相同的其余属性。
        6)关系数据库标准数据语言SQL
        查询是SQL(Structured Query Language,结构化查询语言)的重要组成部分但不是全部,其主要特点如下。
        ①SQL是一种一体化的语言,包括数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成数据库活动中的全部工作。
        ②SQL是一种高度非过程化的语言,它没有必要一步步地告诉计算机"如何"去做,而只需要描述清楚用户要"做什么",SQL就可以将要求交给系统,自动完成全部工作。
        ③SQL非常简洁。虽然SQL功能很强,但它只有为数不多的几条命令。另外,SQL的语法也非常简单,它很接近自然语言(英语),因此容易学习、掌握。
        ④SQL可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。现在很多数据库应用开发工具,都将SQL直接融入自身的语言之中,使用起来更方便。这些使用方式为用户提供了灵活的选择余地。此外,尽管SQL的使用方式不同,但SQL的语法基本是一致的。
        (1)SQL的数据定义功能。SQL的数据定义功能包括数据库的定义、基本表的定义、视图的定义、存储过程的定义、规则的定义和索引的定义等。
        创建表的命令如下:
        
        修改表的命令如下:
        
        在SQL中,只允许以增加新的属性(ADD)和修改属性类型的长度(MODIFY)这两种方式修改表结构,不允许诸如更改属性名、删除属性等修改,这是从数据完整性的角度加以限制的。
        删除表的命令如下:
        
        建立索引的命令如下:
        
        索引分为两类,即唯一(UNIQUE)索引和普通索引。默认是以升序(ASC)方式建立索引,如果需要也可以按降序(DESC)方式建立索引。
        删除索引的命令如下:
        
        建立视图的命令如下:
        
        其中可以是任意的SELECT查询,它说明和限定了视图中的数据。删除视图的命令格式如下:
        
        (2)SQL的数据查询功能。SQL的核心是查询。SQL的查询命令也称为SELECT命令,其基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行。SELECT命令的语法如下:
        
        具体解释如下。
        .SELECT说明要查询的数据,"*"表示要指定表中的全部数据,DISTINCT说明要去掉重复元组。
        .FROM说明要查询的数据来自哪个(些)表,可以基于单个表或多个表进行查询。
        .WHERE说明查询条件,即选择元组的条件。
        .GROUP BY短语用于对查询结果进行分组,可以利用它进行分组汇总。
        .HAVING短语必须跟随GROUP BY使用,它用来限定分组必须满足的条件。
        .ORDER BY短语用来对查询的结果进行排序。
        .COMPUTE短语可以进行带明细的分组汇总。
        查询中有以下几个特殊运算符。
        .BETWEEN…AND:表示在……和……之间。
        .LIKE:字符串匹配运算符,可用通配符"*"表示0个或多个字符,"?"表示一个字符。
        .NOT:否定运算符。另外SQL中"不等于"用"!="表示。
        .ANY和SOME:在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而ALL则要求子查询行中所有行都使结果为真时,结果才为真。
        .EXISTS或NOT EXISTS:用来检查在子查询中是否有结果返回。
        SQL不仅具有一般的检索能力,而且还有计算方式的检索。用于计算检索的函数有以下几种。
        .COUNT:计数。
        .SUM:求和。
        .AVG:计算平均值。
        .MAX:求最大值。
        .MIN:求最小值。
        (3)SQL的数据操作功能。SQL的操作功能是指对数据库中数据的操作,主要包括数据的插入、更新和删除。
        插入的命令如下:
        
        更新的命令如下:
        
        删除的命令如下:
        
        (4)SQL的数据控制功能。SQL的数据控制功能主要是指对数据库中数据的安全控制和管理,即对数据的安全提供保护,这主要表现在对数据使用的授权(GRANT)和收回授权(REVOKE)。每个用户对自己拥有的资源可以有任意的操作权限,同时也可以把其中的一部分权限授予他人。
        SQL的授权命令如下:
        
        权限可以是SELECT、INSERT、DELETE、UPDATE(<列名>[;<列名>]、ALTER和INDEX等,也可用ALL表示所有权限。
        收回权限的命令如下:
        
   题号导航      2018年上半年 数据库系统工程师 上午试卷 综合知识   本试卷我的完整做题情况  
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 /
 
第69题    在手机中做本题