数据库系统(2):数据库环境

1. ANSI-SPARC三层体系结构

        三层体系结构 ( $Three\ \ Level\ \ Architecture$ ),包括外部层 ( $External$ )、概念层 ( $Conceptual$ ) 和内部层 ( $Internal$ )。用户从外部层观察数据,DBMS和操作系统从内部层观察数据。在内部层,数据使用定义的数据结构和文件组织方法进行存储。概念层则提供内部层和外部层的映射 ( $Mapping$ ) 以及必要的独立性 ( $Independence$ )。三层体系结构的目的是将用户的数据库视图与数据库的物理描述分离。

1.1 外部层

        外部层是数据库的用户视图,这一层描述数据库中与用户相关的部分。对于每一个用户,数据库中都存储着其对用的视图。并且对于同一个数据,在不同的视图中可能有着不同的表达方式。

1.2 概念层

        概念层是数据库的整体视图,这一层描述哪些数据存储在数据库中,以及这些数据之间的联系。概念层描述:

  1. 所有的实体、实体的属性和实体间的联系
  2. 数据的约束
  3. 数据的语义信息
  4. 安全性和完整性信息

        概念层支持每一个外部视图,凡是用户可访问的数据必定包含在概念层或者由概念层导出。

1.3 内部层

        内部层是数据库在计算机上的物理表示,这一层描述数据是如何存储在数据库中的。内部层与如下工作相关:

  1. 数据和索引的存储空间分配
  2. 存储记录的描述
  3. 存储记录
  4. 数据压缩和加密

        在内部层之下是物理层 ( $Physical\ \ Level$ ) ,物理层可能在DBMS的指导下受操作系统的控制。

1.4 模式、映射和实例

        对数据库的整体描述称为数据库模式 ( $Database\ \ Schema$ ) 。在数据库中存在三种不同类型的,在外部层有若干外部模式 ( $External\ \ Schema$ ) /子模式 ( $Subschema$ ),与不同的数据视图对应。在概念层有概念模式 ( $Conceptual\ \ Schema$ ),描述所有实体、属性和联系及其之间的完整性约束。在内部层,有内部模式 ( $Internal\ \ Schema$ ),是内部模型的完整描述,包括存储记录的定义、表示方法、数据域,必要时还有所使用的索引和散列方案。一个数据库可以有多个外部模式,但只能有一个概念模式和内部模式。
        例如,对于一个数据库,其内部存储两张表 $A$, $B$ ,这是其概念模式;而 $A$, $B$ 内部行列的定义以及约束等是其内部模式;查询 $A$, $B$ 所使用的视图 $V1$, $V2…$ 是其外部模式。
        DBMS负责着三类模式之间的映射。概念模式通过概念层到内部层的映射与内部模式关联,每一个外部模式通过外部层到概念层的映射与概念模式关联。
        数据库模式是在数据库设计过程中定义的,不会轻易改变。数据库中的数据是一个数据库实例 ( $Database\ \ Instance$ ),许多数据库实例可以与相同的数据库模式对应。模式有时称为数据库的内含 ( $Intension$ ),实例称为数据库的外延 ( $Extension$ ) /状态 ( $State$ )。

1.5 数据库独立性

        三层体系结构的一个主要目的是保证数据独立性,即低层的修改不会影响高层。数据独立性分为逻辑数据独立性 ( $Logical\ \ Data\ \ Independence$ ) 和物理数据独立性 ( $Physical\ \ Data\ \ Independence$ )。逻辑数据独立性指的是外部模式不受概念模式的变化的影响。物理数据独立性指的是概念模式不受内部模式的变化的影响。
        虽然两段映射可能降低效率,但提高了数据独立性。为了高效地映射,ANSI-SPARC模式也允许外部模式直接映射到内部模式,忽略概念模式。当然这降低了数据独立性。

2. 数据库语言

        数据库语言包括数据定义语言 ( $DDL$ ) 和数据操作语言 ( $DML$ )。DDL用于说明数据库模式,DML用于读取和更新数据库。这些语言称为数据子语言 ( $Data\ \ Sublanguages$ ),因为它们不包括所有计算所需的成分。

2.1 数据定义语言/DDL

        DDL是一种供DBA或用户描述和命名应用所需实体、属性和联系及其相关的完整性约束和安全约束的语言。数据库模式是DDL表达的一组定义。虽然DDL可以用于定义或修改模式,但不能用于操作数据。
        DDL的编译结果是一组表格,存储在称为系统目录/数据字典/数据目录的特殊文件中。元数据存储在系统目录中,用于描述数据库中的对象。
        理论上,DDL可以分为外部模式DDL、概念模式DDL和内部模式DDL,区分用于不同层中的DDL。但实际上只需提供一个足以说明外部模式和概念模式的DDL即可。

2.2 数据操作语言/DML

        DML提供了一组基本操作,支持对数据库中存储数据进行各种处理操作,通常是增删改查,其中涉及数据检索的部分称为查询语言。查询语言被定义为一个高级的、具有特殊用途的语言,用于满足检索需要。
        根据检索机制,可以将DML分为过程化 ( $Procedural$ ) 的和非过程化 ( $Nonprocedural$ ) 的。过程化DML要求用于既告诉系统需要什么数据又要说明如何检索这些数据,通常用于网状 ( $Network$ ) /层次 ( $Hierarchical$ ) 数据库。而非过程化语言只需要用户告诉系统需要哪些数据,不需要说明如何检索它们,也称为说明性语言 ( $Declarative\ \ Languages$ ),通常用于关系 ( $Relational$ ) 数据库。典型的例子是,过程化语言单个处理记录,非过程化语言成组处理记录。

2.3 第四代语言

        第四代语言 ( $4GL$ ) 的组成目前并没有统一的认识,它实际上是一种快捷的编程语言,可以极大程度上减少操作。与过程化3GL相比,4GL一般是非过程化的。

3. 数据模型

        模式一般用某种DDL描述,实际上它一定是使用某个具体DBMSDDL编写的。但是,这种方式不能被用户广泛理解,因此我们需要更高层次的模式描述,即数据模型 ( $Data\ \ Model$ )。
        数据模型是一组集成概念,用于描述和操作数据、数据间的联系以及对数据的约束。数据模型包含下列三个组件:

  1. 结构部分,由创建数据库的规则组成;
  2. 操纵部分,定义允许对数据进行的操作的种类;
  3. 一组完整性约束,确保数据的准确性。

        数据模型的目的是表示数据,并让其更容易理解。结合ANSI-SPARC体系结构,可以发现三种数据模型:

  1. 外部数据模型,表示每一个用户的视图,有时称为论域 ( $Universe\ \ of\ \ Discoures,\ \ UoD$ );
  2. 概念数据模型,表示独立于DBMS的逻辑/整体视图;
  3. 内部数据模型,表示DBMS能理解的概念模式。

        可以将数据模型划分为三类:基于对象的 ( $Object-based$ ) 、基于记录的 ( $Record-based$ ) 和物理的 ( $Physical$ ) ,前两者用于在概念层和外部层描述数据,最后一个在内部层描述数据。

3.1 基于对象的数据模型

        基于对象的数据模型用到实体、属性和联系等概念。实体是可区分的对象,在数据库中被描述;属性是对象的性质,描述对象的某个方面;联系是实体之间的关联。常见的基于对象的数据模型有:

        ER模型已经是数据库设计的重要技术之一。面向对象的数据模型扩展了实体的定义,不仅包含了描述对象状态的属性,还包含了对象相关的动作/行为 ( $behavior$ )。对象被认为同时包含状态和行为。

3.2 基于记录的数据模型

        在基于记录的数据模型中,数据库由若干不同类型的固定格式记录组成。每个记录类型有固定数量的字段,每个字段字段有固定的长度。基于记录的逻辑数据模型基本有三类:关系/网状/层次数据模型。现代商业系统大多数是基于关系模型的,早期的数据库系统是基于网状或者层次数据模型的。前者提供了较好的数据独立性,后两者要求用户了解物理数据库。因此关系系统采用说明性 ( $declarative$ ) 方法,即只需说明要检索的数据。网状和层次系统采用导航 ( $Navigational$ ) 方法,即要说明如何检索数据。

3.2.1 关系数据模型

        关系数据模型基于数学上关系的概念。在关系模型中数据和联系均以表格的形式表示,每个表格有若干具有唯一名称的列。关系数据模型要求用户将数据库只看做表格,然而这种方式只适用于外部层和概念层,不适用于内部层。

3.2.2 网状数据模型

        在网状数据模型中,数据被表示成一组记录,联系被表示成 ( $Set$ )。与关系数据模型相比更能体现联系,一般使用指针实现。记录被组织成图结构,记录是图的节点 ( $Node$ ) /段 ( $Segment$ ),络是图的 ( $Edge$ )。

网状模式实例

3.2.3 层次数据模型

        层次数据模型是网状数据模型的一种受限形式。数据被表示成一组记录,联系被表示成络。层次数据模型被表示为树形结构。记录作为节点,络作为边。

层次模式实例

3.3 物理数据模型

        物理数据模型描述数据如何存储在计算机中,涉及记录结构、记录顺序和访问路径等。最常见的是统一模型 ( $Unifying\ \ Model$ ) 和帧存储 ( $Frame\ \ Memory$ )。

4. DBMS的功能

  1. 数据存储、检索和更新
  2. 用户访问目录
    ANSI-SPARC体系结构提供了一个集成的系统目录,存储元数据,对于用户和DBMS都是可访问的。通常情况下,系统目录存储的元数据包括:
    • 数据项的名字、类型和大小
    • 联系的名字
    • 数据的完整性约束
    • 授权访问的用户
    • 用户能访问的数据以及课执行的操作
    • 外部、概念和内部模式及模式间映射
    • 统计量,如访问频率和次数等
      DBMS系统目录是系统的基本组件,使用系统目录的优点有:
    • 集中存放数据的信息,有助于控制数据资源
    • 帮助用户了解数据的用途
    • 简化信息通信,还可以确定用户权限
    • 数据集成,减少冗余和不一致性
    • 记录修改
    • 可以在修改进行前确定其可能的影响
    • 提高安全性
    • 保证完整性
    • 提供审计信息
  3. 事务支持
    事务是由用户或者应用程序进行的一系列动作,这些动作将访问或者修改数据。DBMS提供了一个机制,用于确保事务内的所有操作全部进行或者不进行。
  4. 并发控制服务
    并发是使用DBMS的一个目的。DBMS必须保证多用户并行更新数据库时的同步。
  5. 恢复服务
  6. 授权服务
  7. 数据通信
    大多数用户是通过工作站访问数据库的。DBMS需要提供与通信软件集成的功能,能够以通信消息的方式接受和回复请求。对于用户远程访问数据库的行为,一般称为分布式处理结构 ( $distributed\ \ processing$ )。
  8. 完整性服务
    完整性即存储数据的正确性和一致性,通常以约束的形式实现。
  9. 提高数据独立性
  10. 实用服务程序
    使用程序能帮助DBA更加高效地管理数据库。DBMS应该提供一组实用服务程序,例如输入机制、监控机制、统计分析程序等。

5. 多用户DBMS结构

        多用户DBMS常见结构包括远程处理 ( $teleprocessing$ ) 、文件-服务器 ( $file-server$ ) 和客户-服务器 ( $client-server$ ) 结构。

5.1 远程处理

        远程处理是传统的多用户系统结构。在该类系统中有一台由单个CPU和若干终端组成的计算机。所有的处理都交由该计算机进行,用户终端无处理能力,通过线缆连接,轮流使用DBMS服务。显然在这种结构下中央计算机将会有很大压力。

远程处理的拓扑结构

5.2 文件服务器结构

        文件服务器是一台在网络上的计算机,主要用于提供共享存储服务。在文件服务器环境中,数据处理通常在局域网 ( $LAN$ ) 上分布进行,文件服务器负责保管应用程序和DBMS所需的文件。应用程序和DBMS运行在各个工作站点上,必要时向文件服务器请求文件。文件服务器指示扮演了一个共享硬盘驱动器的角色。

文件服务器结构

        文件服务器结构的缺点:

  1. 造成网络拥塞 ( $traffic$ )
  2. 每台工作站上都要求有一个DBMS的副本
  3. 并发、恢复和完整性控制变得复杂,因为多个DBMS可以访问同一个文件

5.3 传统的两层客户-服务器结构

        客户-服务器指的是软组件相互作用形成系统的一种方式。客户是一个请求资源的进程,服务器提供资源。通常,服务器位于LAN的一个站点,而客户位于另外一些站点。

客户-服务器结构

        数据密集型的业务应用程序一般由四个主要部分组成:数据库、事务逻辑、业务及数据应用逻辑和用户界面。在传统的两层客户-服务器结构中,客户端(第一层)主要负责针对用户的数据表示,服务器端(第二层)主要负责为客户端提供数据服务。表示服务负责处理用户交互活动和主要的业务及数据应用逻辑。数据服务负责提供优先的业务应用逻辑。
        客户端和服务器之间交互的典型过程是,客户端接收用户的请求,产生数据库请求,然后将其传递给服务器。服务器接收和处理数据库请求,并将结果回传给客户端。客户端将响应格式化并传递给终端用户。

客户端 服务器
管理用户界面 接受和处理来自客户端的数据库请求
接受和检查用户输入的语法 检查授权
处理应用逻辑 确保不违反完整性约束
产生数据库请求并传递给服务器 执行查询/更新操作并将结果返回给客户端
将结果返回给用户 维护系统目录
提供并发的数据库访问
提供恢复控制

        这种结构具有许多优点:

  1. 广泛支持对现存数据库的访问
  2. 增强性能,CPU可以并行处理应用程序
  3. 降低硬件费用,服务器只需要提供一定的存储空间和处理能力来管理数据库
  4. 降低通信费用,只有数据库访问请求需要传递
  5. 增强一致性,服务器可以处理完整性检查,无需在每个客户端进行
  6. 能自然地映射到开放系统结构上

5.4 三层客户-服务器结构

        随着应用程序越来越复杂,传统的两层客户-服务器结构已经不能满足需求。因此三层客户-服务器结构出现了。三层分别是:

  1. 用户界面层,运行在终端用户的计算机上(客户端)
  2. 业务逻辑和数据处理层,运行在服务器上,通常称之为应用服务器
  3. DBMS层,存储中间层所需的数据,通常运行在数据库服务器

        在三层结构中,客户端仅仅负责应用程序的用户界面和一些简单的业务逻辑。应用程序的核心业务逻辑分离出来,处于一个单独的层上,通过LAN或者WAN (广域网) 物理连接到客户端和数据库服务器。一个应用服务器可以为多个客户端提供服务。
        与传统的两层和单层相比,三层的优点有:

  1. 降低对硬件设备的需求
  2. 业务逻辑转移到专门的服务器上使得维护可以集中进行
  3. 修改一层并不会影响其他层
  4. 核心业务逻辑和数据库功能的分离使得负载均衡更容易进行

5.5 N层客户-服务器结构

        通过扩展,三层结构可以升级为 $N$ 层结构,进一步提高灵活性和可伸缩性。扩展主要是在中间层上,可以将原来的应用服务器扩展为Web服务器和应用服务器。在高流量的环境下,单个Web服务器可以进一步扩展为一组Web服务器,提供更加高效的负载均衡。

数据库系统(2):数据库环境