免费智能真题库 > 历年试卷 > 程序员 > 2021年下半年 程序员 上午试卷 综合知识
  第58题      
  知识点:   数据模型的三要素   库管理   数据结构   数据库   数据库管理   数据库管理系统   数据模型
  关键词:   关系型数据库管理系统   数据结构   数据模型   关系型数据库   管理系统   数据   数据库   数据库管理系统        章/节:   数据库基础知识       

 
在关系型数据库管理系统中,数据模型通常由数据结构、 () 三要素构成。
 
 
  A.  网状模型、关系模型
 
  B.  网状模型、面向对象模型
 
  C.  数据操纵、关系模型
 
  D.  数据操纵、完整性约束
 
 
 

 
  第15题    2015年下半年  
   30%
通常所说的“ 媒体”有两重含义, 一是指(15)等存储信息的实体;二是指图像、 声音等表达与传递信息的载体。
  第57题    2015年上半年  
   56%
在关系模型中用(57)来表达实体集,其结构是由关系模式定义的。
  第57题    2015年上半年  
   56%
在关系模型中用(57)来表达实体集,其结构是由关系模式定义的。
   知识点讲解    
   · 数据模型的三要素    · 库管理    · 数据结构    · 数据库    · 数据库管理    · 数据库管理系统    · 数据模型
 
       数据模型的三要素
        数据库的数据模型的三要素是:数据结构、数据操作和数据的约束条件。
        .数据结构:是所研究的对象类型的集合。
        .数据操作:是指对数据库中的各种对象的实例(值)允许执行的操作的集合。其主要用于描述系统的动态特性。
        .数据的约束条件:是一组完整性规则的集合。它给出数据及其联系所具有的制约和依赖规则。这些规则用于限定数据库的状态及状态的变化,以保证数据库中数据的正确性、有效性和相容性。
        目前常用的数据模型有两种类型:概念数据模型和基本数据模型。
 
       库管理
        Cadence公司的PCB系统设计的库管理提供3个工具,分别是PCB库专家、PCB库、库浏览。
 
       数据结构
        根据数据元素之间关系的不同特性,通常有下列4类基本的逻辑结构,即集合结构、线性结构、树形结构、图形结构。
        1)线性结构
        线性表是最常用且最简单的一种数据结构。线性表中除第一个元素外,每个元素均只有一个直接前驱;除最后一个元素外,每个元素都只有一个直接后继。
        栈是限定仅在表尾进行插入或删除操作的线性表,是只能通过访问它的一端来实现数据存储和检索的一种线性数据结构。
        队列是一种先进先出(FIFO)的线性表,它只允许在表的一端进行插入,而在另一端删除元素。
        2)树
        树是nn≥0)个互不相交的有限集,当n=0时称为空树。在一棵非空树中,有且仅有一个节点称为根节点;当n>1时,其余的节点可分为若干个不相交的集合,其中每一个集合本身又是一棵树,这些集合称为根节点的子树。
        3)图
        图是由两个集合VE组成的二元组,记为G=(V, E),其中V是顶点的非空有限集合,E是图中边的有限集合。
 
       数据库
        数据库(DataBase,DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
        系统使用的所有数据存储在一个或几个数据库中。
 
       数据库管理
        数据库的日常管理、性能分析、数据库表空间碎块的清除等工作都非常重要,需要对异构的数据库环境提供较完整的系统管理解决方案,使数据库管理自动化、最优化。
 
       数据库管理系统
               数据库管理系统概述
                      DBMS的目标
                      从计算机软件系统的构成来看,DBMS是介于用户和操作系统之间的一组软件,它实现对共享数据的有效组织、管理和存取。由于DBMS实现的硬件资源和软件环境不同,所以DBMS的功能和性能就会有差异。但所有的DBMS都应该尽量满足以下系统目标:用户界面友好、功能完备、效率高、结构清晰和开放性。
                      DBMS的基本功能和特征
                      围绕数据,DBMS应有如下几方面的基本功能:
                      (1)数据库定义:数据库定义包括对数据库的结构进行描述(包括外模式、模式、内模式的定义)、数据库完整性的定义、安全保密定义(例如用户密码、级别、存取权限)、存取路径(如索引)的定义,这些定义存储在数据字典中,是DBMS运行的基本依据。
                      (2)数据存取:提供用户对数据的操作功能,如对数据库数据的检索、插入、修改和删除,这部分内容已经在前面讲述过。
                      (3)数据库运行管理:数据库运行管理是指DBMS运行控制和管理功能。包括了多用户环境下的事务管理和自动恢复、并发控制和死锁检测(或死锁防止)、安全性检查和存取控制、完整性检查和执行、运行日志的组织管理等。这些功能可以保证数据库系统的正常运行,将在后面的小节里讲述。
                      (4)数据组织、存储和管理:DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等。要确定以何种文件结构和存取方式在存储级上组织这些数据,如何实现数据之间的联系,其基本目标是提高存储空间利用率和方便存取,提供多种存取方法(如索引查找、HASH查找、顺序查找等)提高存取效率。
                      (5)数据库的建立和维护:包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组织和重构造以及性能监测分析等功能。
                      (6)其他功能:包括DBMS与网络中其他软件系统的通信功能。
                      几种常用Web数据库
                      在Web服务器中,信息以文本或图像文件的形式进行存储,单纯的www查询速度慢,检索机制弱,而专用的数据库系统能够对大批量数据进行有序的、有规则的组织与管理,给出查询条件后很快就能得到查询结果,所以要将Web技术与数据库技术有机结合。Web数据库利用浏览器作为用户输入接口来输入所需要的数据,浏览器将这些数据传送给网站,网站再对数据进行处理(例如,将数据写入后台数据库,或者查询后台数据库),然后网站将操作结果传回给浏览器。网站的后台数据库就是Web数据库。通过Web访问数据库的优点是:借用现成的浏览器软件,无需开发数据库前端;标准统一,开发过程简单;交叉平台支持。
                      Web数据库的环境由硬件元素和软件元素组成。硬件元素包括:Web服务器、客户机、数据库服务器、通信网络(Internet)。软件元素包括:①客户端必须有能够解释执行HTML代码的浏览器(例如IE,Netscape等);②Web服务器中必须具有能自动生成HTML代码的程序(例如ASP,CGI等);③具有能自动完成数据操作指令的数据库系统(例如Access,SQL Server等)。
                      常见的Web数据库产品有:Microsoft SQL Server、 Oracle Universal Server、 Informix Universal Server和IBM DB2通用数据库。下面介绍其中的几种:
                      SQL Server开发不同类型的应用程序,其中包括:分布式数据库应用程序、数据仓库、Internet和Intranet应用、管理工具、SQL Server数据库系统。SQL Server的优点是:管理方便、并发控制能力强、编程接口丰富、伸缩性强、充分利用BackOffice资源、多线程体系结构。
                      Oracle Universal Server的优点是:①支持任何的数据类型;②支持广泛的平台;③支持广泛的网络协议;④稳固及可靠的资料存储与管理;⑤支持大量的数据存取;⑥内建Web服务器。
                      使用IBM的DB2的Universal Database所建立的基于www的数据库具有以下特性:①支持多种平台;②支持多CPU以及并行处理;③支持多媒体类型的数据;④使用DB2的连接,DB2UniversalDatabase可以作为Web和网站后台服务器的网关,然后在www网上传送数据;⑤支持JAVA以及JDBC,因此可以在Web与数据库之间,提供安全的资料传输,而不怕被别人利用网络监控程序窃取资料。
               数据库系统的控制功能
               数据库恢复技术和并发控制都是事务处理技术,所以在这里首先介绍一下事务的概念。事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,是数据库应用程序的基本逻辑单元。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序,但事务和程序是两个概念,一般来说,一个程序中可以包括多个事务。事务的开始和结束可以由用户显式控制或由DBMS按默认规定自动划分事务。
               在SQL语言中,事务通常以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。COMMIT表示提交,即提交事务的所有操作,将事务中所有对数据库的更新写回到磁盘上的物理数据库中,事务正常结束。ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行下去,系统将事务中对数据库的所有已完成的操作全部撤销,滚回到事务开始时的状态。
               事务具有四个特性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持续性(durability),这四个特性简称ACID特性。原子性是指事务是数据库的逻辑工作单位,事务中的所有操作要么都做要么都不做。事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态,当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生了故障,有些尚未完成的事务被迫中断,若这些未完成事务对数据库所做的修改有一部分已经写入物理数据库,则这时数据库就处于一种不一致的状态。隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。持续性也称永久性,指一个事务一旦提交,它对数据库中的改变就应该是永久性的,接下来的其他操作或者故障不应该对其执行结果产生任何影响。
                      数据库恢复技术
                      尽管数据库系统采取了各种保护措施来防止数据库的安全性和完整性被破坏,保证并发事务正确执行,但计算机系统的硬件故障、软件错误、操作员失误和恶意破坏等仍然不可避免,所以数据库管理系统还必须具有把数据库从错误状态恢复到某一已知的正确状态的功能,这就是数据库的恢复。
                      数据库系统中可能发生的故障可以大致分为如下几类:事物内部的故障、系统故障、介质故障和计算机病毒。
                      (1)恢复的实现技术。
                      恢复机制涉及两个关键问题:如何建立冗余数据;如何利用冗余数据实施数据库的恢复。建立冗余数据最常用的技术是数据转储和登录日志文件。
                      转储即DBA定期将整个数据库复制到磁带或另一个磁盘上保存起来的过程,这些备用的数据文本称为后备副本或后援副本。当数据库遭到破坏时,将后备副本装入,将系统恢复到转储时的状态,若要恢复到故障发生时的状态则需要重新运行转储后的所有更新事务。
                      日志文件是用来记录事务对数据库的更新操作的文件,有两种格式供数据库系统采用:以记录为单位的日志文件和以数据块为单位的日志文件。以记录为单位的日志文件包括各个事务的开始标记、结束标记和所有更新操作,每个日志记录的内容主要包括事务标识、操作的类型、操作对象、更新前数据的旧值和更新后数据的新值。以数据块为单位的日志文件记录的内容包括事务标识和被更新的数据块,由于已将更新前的整个块和更新后的整个块都放入日志文件中,所以操作的类型和操作对象等信息就不用放入日志记录中了。登记日志文件时必须严格按照并发事务执行的时间次序来登记,且要先写日志文件后写数据库。
                      在一个数据库系统中,数据转储和登录日志文件这两种方法是一起使用的。
                      (2)恢复策略。
                      当系统运行过程中发生故障,利用数据库后备副本和日志文件可以将数据库恢复到故障前的某个一致性状态。不同故障的恢复方法也不同。
                      ①事务故障的恢复。
                      事务故障是指事务在运行至正常终点前被终止,此时数据库可能出于不正确的状态,恢复程序要在不影响其他事务运行的情况下强行回滚(ROLLBACK)改事务,即撤销该事务已经做出的任何对数据库的修改,使得事务好像完全没有启动一样。事务故障的恢复由系统自动完成。恢复的步骤是:
                      .反向(从后向前)扫描日志文件,查找该事务的更新操作。
                      .对该事务的更新操作执行逆操作,也就是将日志记录更新前的值写入数据库。如果记录中是插入操作,则相当于作删除操作,如果记录中是删除操作则做插入操作,若是修改操作则相当于用修改前的值代替修改后的值。
                      .继续反向扫描日志文件,查找该事务的其他更新操作,并作同样处理。
                      .如此处理下去,直到读到了此事务的开始标记,事务故障恢复就完成了。
                      ②系统故障的恢复。
                      系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。例如,特定类型的硬件错误、操作系统故障、DBMS代码错误、突然停电等。这类故障影响正在运行的所有事务,但不破坏数据库。此时主存内容(尤其是缓冲区中的内容)都被丢失,所有运行事务都非正常终止,有些已完成的事务可能有部分甚至全部留在缓冲区中尚未写入磁盘,为了保证一致性,应将这些事务已提交的结果重新写入数据库;此外,一些尚未完成的事务结果可能已经送入物理数据库,为了保证一致性,需要清除这些事务对数据库的所有修改。系统故障的恢复是由系统在重新启动时自动完成的,此时恢复子系统撤销所有未完成的事务并重做(redo)所有已提交的事务。具体的步骤是:
                      .正向(从头到尾)扫描日志文件,找出故障发生前已经提交的事务(这些事务既有BEGIN TRANSACTION记录,也有COMMIT记录),将其事务标识记入重做(REDO)队列。同时找出故障发生时尚未完成的事务(这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录),将其事务标识记入撤销(UNDO)队列。
                      .反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,也就是将日志记录中更新前的值写入数据库。
                      .正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作,也就是将日志记录中更新后的值写入数据库。
                      ③介质故障的恢复。
                      系统故障常称为软故障,介质故障称为硬故障。硬故障是指外存故障,例如磁盘损坏、磁头碰撞,瞬时强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务,日志文件也被破坏。这类故障比前两类故障发生的可能性要小,但是破坏性最大。恢复方法是重装数据库,然后重做已完成的事务,具体的步骤是:
                      .装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。
                      .装入相应的日志文件副本,重做已完成的事务。
                      介质故障的恢复需要DBA的介入,DBA只需重装最近转储的数据库副本和有关的各日志文件副本,然后执行系统提供的恢复命令,具体的恢复操作仍由DBMS完成。
                      并发控制
                      数据库是一个共享资源,可供多个用户使用,允许多个用户同时使用的数据库系统称为多用户数据库系统。在单处理机系统中,事务的并行执行实际上是这些并行事务的并行操作轮流交叉运行;在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。本节讨论的是以单处理机系统为基础的,这些理论可以推广到多处理机的情况。
                      当多个用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况,若并发操作不加控制,就可能会存取和存储不正确的数据,破坏数据库的一致性。并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏”数据。丢失修改是指两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果,具体来讲还包括三种情况:①事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时得到与前一次不同的值;②事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同的条件读取数据时发现某些记录已经消失了;③事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按照相同条件读取数据时发现多了一些记录。读“脏”数据是指事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,即T2读到了“脏”数据。
                      (1)封锁。
                      并发控制的主要技术是封锁,所谓封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求对其加锁,加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。
                      基本的封锁类型有两种:排它锁(简称X锁)和共享锁(简称S锁)。排它锁又称写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁,这就保证了其他事务在T释放A上的锁之前就不能再读取和修改A。共享锁又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能在对A加S锁,而不能加X锁,直到T释放A上的S锁,这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
                      (2)封锁协议。
                      运用X锁和S锁这两种基本封锁时,还需要约定一些规则(例如何时申请X锁或者S锁、持锁时间、何时释放等),这些规则称为封锁协议。下面介绍的封锁协议对封锁方式规定不同的封锁规则,在不同程度上解决了对并发操作的不正确调度所带来的问题。
                      一级封锁协议是:事务T在修改数据R之前必须先对其加上X锁,直到事务结束(包括正常结束和非正常结束)时才释放。一级封锁协议可防止丢失修改,并保证事务T是可恢复的。在这一级的封锁协议中,如果仅仅是读数据而不对其修改的话,是不需要加锁的,所以他不能保证可重复读和不读“脏”数据。
                      二级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加上S锁,读完后即可释放S锁。这就防止了丢失修改,还可以进一步防止读“脏”数据,但它不能保证可重复读。
                      三级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。这就防止了丢失修改和不读“脏数据”,还进一步防止了不可重复读。
                      两段锁协议是:对任何数据进行读写之前必须对该数据加锁,在释放了一个封锁之后,事务不再申请和获得任何其他封锁。这就缩短了持锁时间,提高了并发性,同时解决了数据的不一致性。
                      (3)活锁和死锁。
                      举个例子来说明活锁的概念,如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。若T3也请求封锁R,当T1释放了R上的锁之后系统首先批准了T3的请求,而T2仍等待。之后T4又请求封锁R,当T3释放了R上的封锁后系统批准了T4的请求,如此继续下去,T2有可能永远等待,这就形成了活锁。避免活锁的简单方法是采用先来先服务的策略。
                      举例来说明死锁的概念,如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因为T2已经封锁了R2,所以T1等待T2释放R2。接着T2又申请封锁R1,而T1已经封锁了R1, T2则只能等待T1释放R1上的锁。这样就出现了这样的情况,即T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,这就形成了死锁。目前在数据库中解决死锁问题主要有两种方法,一个是采取一定的措施来预防死锁的发生,另一个是允许发生死锁,并采用一定手段定期诊断系统中是否有死锁,如果发现了死锁则立即解除掉。
                      ①死锁的预防。
                      死锁的预防通常有两种方法:一次封锁法和顺序封锁法。
                      一次封锁法要求每个事务必须一次把所有要使用的数据全部加锁,否则就不能继续执行。这个方法虽然能够有效地防止死锁的发生,但是将全部要用到的数据加锁扩大了封锁的范围,降低了系统的并发度。此外,数据库中的数据不断变化,难以精确地确定每个事务要封锁的数据对象,为此只能扩大封锁范围并将所有可能要封锁的数据对象加锁,这就进一步降低了并发度。
                      顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。例如在B树结构的索引中,可规定封锁的顺序必须是从根结点开始,然后是下一级的子女结点,逐级封锁。顺序封锁法可以有效地防止死锁,但也同样存在问题。第一,数据库系统中封锁的数据对象极多,并且随着数据的插入、删除等操作不断变化,维护这样的资源的封锁顺序非常困难;第二,事务很事先确定每个事务要封锁的全部对象,因此也就很难按规定的顺序施加封锁。
                      因此在数据库中广为采用的预防死锁的策略并不很适合数据库的特点,而DBMS在解决死锁问题上普遍采用的是诊断并解除死锁的方法。
                      ②死锁的诊断与解除。
                      数据库系统中死锁的诊断与解除的方法与操作系统类似,一般使用超时法或事务等待图法。
                      超时法是指如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现起来很简单,但它的不足之处是:①可能会误判死锁,事务可能是因为其他原因而使等待时间超过时限,系统会误认为发生了死锁;②如果时限设得太长,死锁发生后就不能及时发现。
                      事务等待图是一个有向图G=(T,U)。T为结点的集合,每个结点表示正在运行的事务,U为边的集合,每条边表示事务等待的情况。若T1等待T2,则T1和T2之间划一条从T1指向T2的有向边。事务等待图动态地反映了所有事务的等待情况。并发控制子系统周期地检测事务等待图,若发现图中存在回路,则表示系统中出现了死锁。
                      DBMS的并发子系统一旦检测到系统中存在着死锁,就要设法解除。通常的办法是选择一个代价最小的事务将其撤销(恢复该事务所执行的数据修改操作),释放此事务持有的所有的锁,这样其他的事务就可以运行下去。
                      数据库安全性
                      数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。所有的计算机系统都有安全性问题,而在数据库系统中数据集中存放并且被许多最终用户直接共享,从而使安全性问题更为突出。
                      在一般的计算机系统中,安全措施是一级一级地设置的。用户要求进入计算机系统时,系统首先根据输入用户标识进行用户身份鉴定,对已进入系统的用户,DBMS还要进行存取控制,只允许用户执行合法操作。操作系统一级也有自己的保护措施。数据最后还可以以密码形式存储到数据库中。
                      在这里主要讲述DBMS的存取控制机制。数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据。存取控制机制主要包括两部分:①定义用户权限并将用户权限登记到数据字典中,称为安全规则或授权规则;②合法权限检查:每当用户发出存取数据库的操作请求(一般应包括操作类型、操作对象和操作用户信息等信息)后,DBMS查找数据字典,根据安全性规则进行合法权限检查。
                      进行存取权限控制时可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内,即通过视图把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
                      由于任何系统的安全保护措施都不完美,蓄意盗窃、破坏数据的人总是想方设法打破控制。审计功能把用户对数据库的所有操作自动记录下来放入审计日志中,DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。对于高敏感性数据还以采用数据加密技术,即根据一定的算法将原始数据变换为不可直接识别的格式,不知道解密算法的人就无法获知数据的内容。
                      数据库完整性
                      数据库的完整性是指数据的正确性和相容性。例如学生的性别只能是男或女,百分制的成绩必须取值在0到100之间。为了维护数据库的完整性,DBMS必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件。
                      完整性约束条件的作用对象可以是行、列和关系。行约束主要是记录字段值之间联系的约束条件,例如银行账户的余额应该等于存入金额减去支出金额的值。列约束主要是对列的类型、取值范围、精度、排序、非空值以及不可重复等约束条件。关系约束是表的主码约束、表间的参照完整性约束以及表中记录间的联系约束,例如学生所选的课程必须是课程列表中已经存在的课程。
                      列级约束、主码约束和参照完整性约束是在数据库定义过程中定义的,对数据库进行修改时,DBMS提供的完整性约束机制要对数据库定义的约束进行检查,拒绝不符合约束条件的修改动作。
 
       数据模型
        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表示所有权限。
        收回权限的命令如下:
        
   题号导航      2021年下半年 程序员 上午试卷 综合知识   本试卷我的完整做题情况  
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 /
 
第58题    在手机中做本题