数据库系统概论
数据库是数据管理的有效技术,是计算机科学的重要分支。今天,信息资源已成为各个部门的重要财富和资源。建立一个满足各级部门信息处理要求的行,之有效的信息系统也成为一个企业或组织生存和发展的重要条件。因此,作为信息系统核心和基础的数据库技术得到越来越广泛的应用,从小型单项事务处理系统到大型信息系统,从联机事务处理(On-Line Transaction Processing,OLTP)到联机分析处理(On-Line Analysis Processing,OLAP),从一般企业管理到计算机辅助设计与制造(CAD/CAM)、计算机集成制造系统(CIMS)、电子政务(e-Government)、电子商务(e-Commerce)、地理信息系统(GIS)等,越来越多的应用领域采用数据库技术来存储和处理信息资源。特别是随着互联网的发展,广大用户可以直接访问并使用数据库,例如通过网上订购图书、日用品、机票、火车票,通过网上银行转账存款取款、检索和管理赈户,等等。数据库已经成为每个人生活中不可缺少的部分。
数据库系统概述
在系统地介绍数据库的基本概念之前,这里首先介绍一些数据库最常用的术语和基本概念。
数据库的四个基本概念
数据、数据库、数据库管理系统和数据库系统是与数据库技术密切相关的4个基本概念。
数据(Data)
数据是数据库中存储的基本对象。数据在大多数人头脑中的第一个反应就是数字,例如93、1000、99.5、-330.86、¥6880、$726等。其实数字只是最简单的一种数据,是数据的一种传统和狭义的理解。广义的理解认为数据的种类很多,例如文本(text)、图形(graph)、图像(image)、音频(audio)、视频(video)、学生的档案记录、货物的运输情况等,这些都是数据。
可以对数据做如下定义:描述事物的符号记录称为数据。描述事物的符号可以是数字,也可以是文字、图形、图像、音频、视频等。数据有多种表现形式,它们都可以经过数字化后存入计算机。
在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是数值型数据,如整数、实数、浮点数等。现在计算机存储和处理的对象十分广泛,表示这些对象的数据也随之变得越来越复杂。
数据的表现形式还不能完全表达其内容,需要经过解释,数据和关于数据的解释是不可分的。例如,93是一个数据,可以是一个同学某门课的成绩,也可以是某个人的体重,还可以是计算机系2013级的学生人数。数据的解释是指对数据含义的说明,数据的含义称为数据的语义,数据与其语义是不可分的。
在日常生活中,人们可以直接用自然语言(如汉语)来描述事物。例如,可以这样来描述某校计算机系一位同学的基本情况:李明同学,男,1995年5月生,江苏省南京市人,2013年入学。在计算机中常常这样来描述:
(李明,男,199505,江苏省南京市,计算机系,2013)
即把学生的姓名、性别、出生年月、出生地、所在院系、入学时间等组织在一起,构成一个记录。这里的学生记录就是描述学生的数据。这样的数据是有结构的。记录是计算机中表示和存储数据的一种格式或一种方法。
数据库(DataBase,DB)
数据库,顾名思义,是存放数据的仓库。只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的。
人们收集并抽取出一个应用所需要的大量数据之后,应将其保存起来,以供进一步加工处理,抽取有用信息。在科学技术飞速发展的今天,人们的视野越来越广,数据量急剧增加。过去人们把数据存放在文件柜里,现在人们借助计算机和数据库技术科学地保存和管理大量复杂的数据,以便能方便而充分地利用这些宝贵的信息资源。
严格地讲,数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度(redundancy)、较高的数据独立性(data independency)和易扩展性(scalability),并可为各种用户共享。
概括地讲,数据库数据具有永久存储、有组织和可共享三个基本特点。
数据库管理系统(DataBase Management System,DBMS)
了解了数据和数据库的概念,下一个问题就是如何科学地组织和存储数据,如何高效地获取和维护数据。完成这个任务的是一个系统软件——数据库管理系统。数据库管理系统是位于用户与操作系统之间的一层数据管理软件。数据库管理系统和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统。它的主要功能包括以下几个方面:
1. 数据定义功能
数据库管理系统提供数据定义语言(Data Definition Language,DDL),用户通过它可以方便地对数据库中的数据对象的组成与结构进行定义。
2. 数据组织、存储和管理
数据库管理系统要分类组织、存储和管理各种数据,包括数据字典、用户数据、数据的存取路径等。要确定以何种文件结构和存取方式在存储级上组织这些数据,如何实现数据之间的联系。数据组织和存储的基本目标是提高存储空间利用率和方便存取,提供多种存取方法(如索引查找、hash查找、顺序查找等)来提高存取效率。
3. 数据操纵功能
数据库管理系统还提供数据操纵语言(Data Manipulation Language,DML),用户可以使用它操纵数据,实现对数据库的基本操作,如查询、插入、删除和修改等。
4. 数据库的事务管理和运行管理
数据库在建立、运用和维护时由数据库管理系统统一管理和控制,以保证事务的正确运行,保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复。
5. 数据库的建立和维护功能
数据库的建立和维护功能包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重组织功能和性能监视、分析功能等。这些功能通常是由一些实用程序或管理工具完成的。
6. 其他功能
其他功能包括数据库管理系统与网络中其他软件系统的通信功能,一个数据库管理系统与另一个数据库管理系统或文件系统的数据转换功能,异构数据库之间的互访和互操作功能等。
数据库系统
数据库系统是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DataBase Administrator,DBA)组成的存储、管理、处理和维护数据的系统。应当指出的是,数据库的建立、使用和维护等工作只靠一个数据库管理系统远远不够,还要有专门的人员来完成,这些人被称为数据库管理员。
数据库系统可以用图1表示。其中数据库提供数据的存储功能,数据库管理系统提供数据的组织、存取、管理和维护等基础功能,数据库应用系统根据应用需求使用数据库,数据库管理员负责全面管理数据库系统。图2是引入数据库后计算机系统的层次结构。
在一般不引起混淆的情况下,人们常常把数据库系统简称为数据库。
图1 数据库系统
图2 引入数据库后计算机系统的层次结构
数据管理技术的产生和发展
数据库技术是应数据管理任务的需要而产生的。数据管理是指对数据进行分类、组织、编码、存储、检索和维护,它是数据处理的中心问题。而数据的处理是指对各种数据进行收集、存储、加工和传播的一系列活动的总和。
在应用需求的推动下,在计算机硬件、软件发展的基础上,数据管理技术经历了人工管理、文件系统、数据库系统三个阶段。这三个阶段的特点及其比较如下表所示。
人工管理阶段 | 文件系统阶段 | 数据库系统阶段 | ||
---|---|---|---|---|
背景 | 应用背景 | 科学计算 | 科学计算、数据管理 | 大规模数据管理 |
硬件背景 | 无直接存储设备 | 磁盘、磁鼓 | 大容量磁盘、磁盘阵列 | |
软件背景 | 没有操作系统 | 有文件系统 | 有数据库管理系统 | |
处理方式 | 批处理 | 联机实时处理、批处理 | 联机实时处理、分布处理、批处理 | |
特点 | 数据的管理者 | 用户(程序员) | 文件系统 | 数据库管理系统 |
数据面向的对象 | 某一应用程序 | 某一应用 | 现实世界(一个部门、企业、跨国组织等) | |
数据的共享程度 | 无共享,冗余度极大 | 共享性差,冗余度大 | 共享性高,冗余度小 | |
数据的独立性 | 不独立,完全依赖于程序 | 独立性差 | 具有高度的物理独立性和一定的逻辑独立性 | |
数据的结构化 | 无结构 | 记录内有结构,整体无结构 | 整体结构化,用数据模型描述 | |
数据控制能力 | 应用程序自己控制 | 应用程序自己控制 | 由数据库管理系统提供数据安全性、完整性,并发控制和恢复能力 |
表1 数据管理三个阶段的比较
人工管理阶段
20世纪50年代中期以前,计算机主要用于科学计算。当时的硬件状况是,外存只有纸带、卡片、磁带,没有磁盘等直接存取的存储设备;软件状况是,没有操作系统,没有管理数据的专门软件;数据处理方式是批处理。人工管理数据具有如下特点:
1. 数据不保存
由于当时计算机主要用于科学计算,一般不需要将数据长期保存,只是在计算某一课题时将数据输入,用完就撤走。不仅对用户数据如此处置,对系统软件有时也是这样。
2. 应用程序管理数据
数据需要由应用程序自己设计、说明(定义)和管理,没有相应的软件系统负责数据的管理工作。应用程序中不仅要规定数据的逻辑结构,而且要设计物理结构,包括存储结构、存取方法、输入方式等。因此程序员负担很重。
3. 数据不共享
数据是面向应用程序的,一组数据只能对应一个程序。当多个应用程序涉及某些相同的数据时必须各自定义,无法互相利用、互相参照,因此程序与程序之间有大量的冗余数据。
4. 数据不具有独立性
数据的逻辑结构或物理结构发生变化后,必须对应用程序做相应的修改,数据完全依赖于应用程序,称之为数据缺乏独立性,这就加重了程序员的负担。
在人工管理阶段,应用程序与数据之间的一一对应关系可用下图表示。
图3 人工管理阶段应用程序与数据之间的一一对应关系
文件系统阶段
20世纪50年代后期到60年代中期,这时硬件方面已有了磁盘、磁鼓等直接存取存储设备:软件方面,操作系统中已经有了专门的数据管理软件,一般称为文件系统;处理方式上不仅有了批处理,而且能够联机实时处理。
用文件系统管理数据具有如下特点:
1. 数据可以长期保存
由于计算机大量用于数据处理,数据需要长期保留在外存上反复进行查询、修改、插入和删除等操作。
2. 由文件系统管理数据
由专门的软件即文件系统进行数据管理,文件系统把数据组织成相互独立的数据文件,利用“按文件名访问,按记录进行存取”的管理技术,提供了对文件进行打开与关闭、对记录读取和写入等存取方式。文件系统实现了记录内的结构性。但是,文件系统仍存在以下缺点:
(1) 数据共享性差,冗余度大。在文件系统中,一个(或一组)文件基本上对应于一个应用程序,即文件仍然是面向应用的。当不同的应用程序具有部分相同的数据时,也必须建立各自的文件,而不能共享相同的数据,因此数据的冗余度大,浪费存储空间。同时由于相同数据的重复存储、各自管理,容易造成数据的不一致性,给数据的修改和维护带来了困难。
(2) 数据独立性差。文件系统中的文件是为某一特定应用服务的,文件的逻辑结构是针对具体的应用来设计和优化的,因此要想对文件中的数据再增加一些新的应用会很困难。而且,当数据的逻辑结构改变时,应用程序中文件结构的定义必须修改,应用程序中对数据的使用也要改变,因此数据依赖于应用程序,缺乏独立性。可见,文件系统仍然是一个不具有弹性的无整体结构的数据集合,即文件之间是孤立的,不能反映现实世界事物之间的内在联系。
文件系统阶段应用程序与数据之间的关系如下图所示。
图4 文件系统阶段应用程序与数据之间的对应关系
数据库系统阶段
20世纪60年代后期以来,计算机管理的对象规模越来越大,应用范围越来越广泛,数据量急剧增长,同时多种应用、多种语言互相覆盖地共享数据集合的要求越来越强烈。
这时硬件已有大容量磁盘,硬件价格下降;软件则价格上升,为编制和维护系统软件及应用程序所需的成本相对增加;在处理方式上,联机实时处理要求更多,并开始提出和考虑分布处理。在这种背景下,以文件系统作为数据管理手段已经不能满足应用的需求,于是为解决多用户、多应用共享数据的需求,使数据为尽可能多的应用服务,数据库技术便应运而生,出现了统一管理数据的专门软件系统——数据库管理系统。
用数据库系统来管理数据比文件系统具有明显的优点,从文件系统到数据库系统标志着数据管理技术的飞跃。
数据库系统的特点
下面首先通过一个简单的例子—–学生学籍管理系统来比较文件系统和数据库系统的差异,从而阐述数据库系统的特点。
例1:设一个学生的信息包括学号、姓名、性别、年龄、专业和奖励。部分学生的情况如表2所示。假设该学籍管理系统具有录入学生信息、根据学号可以找到一个学生信息等功能。
学号 | 姓名 | 性别 | 年龄 | 专业 | 奖励 |
---|---|---|---|---|---|
20100001 | 史玉明 | 女 | 20 | 计算机 | 2011校奖学金,2012国家奖学金 |
20100100 | 李明虎 | 男 | 21 | 机械 | 2012校优秀学生 |
20100234 | 张翔 | 男 | 21 | 化工 | |
··· | ··· | ··· | ··· | ··· | ··· |
表2 学生一览表
1. 采用文件系统实现学籍管理
首先是如何存储学生数据。计算机操作系统实现了文件系统,可以把每个学生都具备的信息采用定长记录方式存放在一个“学生基本信息”文件中。有关奖励的数据有的学生较多,有的学生没有,因此采用变长记录方式把它存放在另外一个“奖励”文件中。“学生基本信息”文件的记录包括学号、姓名、性别、年龄、专业、位置和长度等字段,如表3所示。其中位置和长度描述的是另一个奖励文件(表4所示)中记录的开始位置和长度。文件系统管理的文件是流式文件,或者说只是一些字节流。因此,表3和表4是为了方便程序员理解的结构。程序员必须把它们在应用程序中加以说明和描述。
学号 | 姓名 | 性别 | 年龄 | 专业 | 位置 | 长度 |
---|---|---|---|---|---|---|
20100001 | 史玉明 | 女 | 20 | 计算机 | 0 | 30 |
20100100 | 李明虎 | 男 | 21 | 机械 | 30 | 15 |
20100234 | 张翔 | 男 | 21 | 化工 | 45 | 0 |
··· | ··· | ··· | ··· | ··· | ··· | ··· |
表3 “学生基本信息”文件的结构和内容
奖励 |
---|
2011 校奖学金,2012 国家奖学金 |
2012 校优秀学生 |
··· |
表4 “奖励”文件的结构内容
确定了学生数据的存储方式后,需要编写程序来实现数据的录入功能和查询功能。录入功能的基本过程包括从键盘读入学生信息,把基本信息写到"学生基本信息”文件中,把奖励情况写到“奖励”文件中。特别要注意的是,为了能正确地表达“学生基本信息”文件中一条记录和“奖励”文件中记录的对应关系,在程序中要把奖励情况在文件中的开始位置和长度再写回"学生基本信息”文件中。
查询功能采用顺序查找方法。首先从“学生基本信息”文件中读入第1条记录,然后比较学号字段的值是否和要查找的学号相同。如果相同,读出该学生的信息,并根据位置字段和长度字段的值到“奖励”文件中读出该学生的奖励信息,查找过程结束;如果不相同,则从“学生基本信息”文件中读入下一条记录,直到找到该学号的记录,或者读到文件末尾也没有该学号的学生为止。
2. 采用数据库系统实现学籍管理
首先在数据库中建立两张表:STUDENT
存放学生的基本信息,AWARD
存放学生的奖励情况。这可以用数据库管理系统的两条CREATE
语句来实现:
|
|
建立好表结构后,向数据库管理系统提交下面的两条插入命令就可以把学生的基本信 息和奖励情况保存到STUDENT
和AWARD
表中,完成录入功能。
|
|
查询功能可用一条查询语句实现:
|
|
可以看出,无论采用文件系统还是数据库系统都可以实现本例中学籍管理的功能。但是,使用文件系统时,程序员要关注记录的结构和不同文件中记录之间的联系,使用文件系统提供的fopen
(打开)、fread
(读)、fwrite
(写)、fseek
(移动读写位置)、fclose
(关闭)等操作来编程,工作量大、编程复杂,且开发速度慢;而数据库系统提供了功能强大的操作,如查询操作只需要写一条语句就可以实现,程序员的开发效率大大提高。
与人工管理和文件系统相比,数据库系统的特点主要有一下几个方面。
数据结构化
数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。
在文件系统中,文件中的记录内部具有结构,但是记录的结构和记录之间的联系被固化在程序中,需要由程序员加以维护。这种工作模式既加重了程序员的负担,又不利于结构的变动。
所谓“整体”结构化是指数据库中的数据不再仅仅针对某一个应用,而是面向整个组织或企业:不仅数据内部是结构化的,而且整体是结构化的,数据之间是具有联系的。也就是说,不仅要考虑某个应用的数据结构,还要考虑整个组织的数据结构。例如,一个学校的信息系统中不仅要考虑教务处的课程管理、学生选课管理、成绩管理,还要考虑学生处的学生学籍管理,同时还要考虑研究生院的研究生管理、人事处的教员人事管理、科研处的科研管理等。因此,学校信息系统中的学生数据就要面向各个处室的应用,而不仅仅是教务处的一个学生选课应用。可以参照下图为该校的信息系统组织其中的学生数据。
图5 某学校信息系统中的学生数据
图5的数据组织方式为各部门的应用提供了必要的记录,使整体数据结构化了。这就要求在描述数据时不仅要描述数据本身,还要描述数据之间的联系。在数据库系统中,记录的结构和记录之间的联系由数据库管理系统维护,从而减轻了程序员的工作量,提高了工作效率。
在数据库系统中,不仅数据是整体结构化的,而且存取数据的方式也很灵活,可以存取数据库中的某一个或一组数据项、一个记录或一组记录;而在文件系统中,数据的存取单位是记录,粒度不能细到数据项。
数据的共享性高、冗余度低且易扩充
数据库系统从整体角度看待和描述数据,数据不再面向某个应用而是面向整个系统,因此数据可以被多个用户、多个应用共享使用。数据共享可以大大减少数据冗余,节约存储空间。数据共享还能够避免数据之间的不相容性与不一致性。
所谓数据的不一致性是指同一数据不同副本的值不一样。采用人工管理或文件系统管理时,由于数据被重复存储,当不同的应用使用和修改不同的副本时就很容易造成数据的不一致。在数据库中数据共享减少了由于数据冗余造成的不一致现象。
由于数据面向整个系统,是有结构的数据,不仅可以被多个应用共享使用,而且容易增加新的应用,这就使得数据库系统弹性大,易于扩充,可以适应各种用户的要求。可以选取整体数据的各种子集用于不同的应用系统,当应用需求改变或增加时,只要重新选取不同的子集或加上一部分数据便可以满足新的需求。
数据独立性高
数据独立性是借助数据库管理数据的一个显著优点,它已成为数据库领域中一个常用术语和重要概念,包括数据的物理独立性和逻辑独立性。
物理独立性是指用户的应用程序与数据库中数据的物理存储是相互独立的。也就是说,数据在数据库中怎样存储是由数据库管理系统管理的,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变时应用程序不用改变。
逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的。也就是说,数据的逻辑结构改变时用户程序也可以不变。
数据独立性是由数据库管理系统提供的二级映像功能来保证的,将在后面的内容中进行讨论。
数据与程序的独立把数据的定义从程序中分离出去,加上存取数据的方法又由数据库管理系统负责提供,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。
数据由数据库管理系统统一管理和控制
数据库的共享将会带来数据库的安全隐患,而数据库的共享是并发的(concurrency)共享,即多个用户可以同时存取数据库中的数据,甚至可以同时存取数据库中同一个数据,这又会带来不同用户间相互干扰的隐患。另外,数据库中数据的正确与一致也必须得到保障。为此,数据库管理系统还必须提供以下几方面的数据控制功能。
(1) 数据的安全性(security)保护。数据的安全性是指保护数据以防止不合法使用造成的数据泄密和破坏。每个用户只能按规定对某些数据以某些方式进行使用和处理。
(2) 数据的完整性(integrity)检查。数据的完整性指数据的正确性、有效性和相容性。完整性检查将数据控制在有效的范围内,并保证数据之间满足一定的关系。
(3) 并发(concurrency)控制。当多个用户的并发进程同时存取、修改数据库时,可能会发生相互干扰而得到错误的结果或使得数据库的完整性遭到破坏,因此必须对多用户的并发操作加以控制和协调。
(4) 数据库恢复(recovery)。计算机系统的硬件故障、软件故障、操作员的失误以及故意破坏也会影响数据库中数据的正确性,甚至造成数据库部分或全部数据的丢失。数据库管理系统必须具有将数据库从错误状态恢复到某一己知的正确状态(亦称为完整状态或一致状态)的功能,这就是数据库的恢复功能。
数据库系统阶段应用程序与数据之间的对应关系可用图6表示。
图6 数据库系统阶段应用程序与数据之间的对应关系
综上所述,数据库是长期存储在计算机内有组织、大量、共享的数据集合。它可以供各种用户共享,具有最小冗余度和较高的数据独立性。数据库管理系统在数据库建立、运用和维护时对数据库进行统一控制,以保证数据的完整性和安全性,并在多用户同时使用数据库时进行并发控制,在发生故障后对数据库进行恢复。
数据库系统的出现使信息系统从以加工数据的程序为中心转向围绕共享的数据库为中心的新阶段。这样既便于数据的集中管理,又能简化应用程序的研制和维护,提高了数据的利用率和相容性,提高了决策的可靠性。
目前,数据库已经成为现代信息系统的重要组成部分。具有数百G、数百T、甚至数百P字节的数据库已经普遍存在于科学技术、工业、农业、商业、服务业和政府部门的信息系统中。
数据模型
数据库技术是计算机领域中发展最快的技术之一。数据库技术的发展是沿着数据模型的主线推进的。模型,特别是具体模型对人们来说并不陌生。一张地图、一组建筑设计沙盘、一架精致的航模飞机都是具体的模型,一眼望去就会使人联想到真实生活中的事物。模型是对现实世界中某个对象特征的模拟和抽象。例如,航模飞机是对生活中飞机的一种模拟和抽象,它可以模拟飞机的起飞、飞行和降落,它抽象了飞机的基本特征——机头、机身、机翼、机尾。
数据模型(data model)也是一种模型,它是对现实世界数据特征的抽象。也就是说数据模型是用来描述数据、组织数据和对数据进行操作的。由于计算机不可能直接处理现实世界中的具体事物,所以人们必须事先把具体事物转换成计算机能够处理的数据,也就是首先要数字化,把现实世界中具体的人、物、活动、概念用数据模型这个工具来抽象、表示和处理。通俗地讲,数据模型就是现实世界的模拟。
现有的数据库系统均是基于某种数据模型的。数据模型是数据库系统的核心和基础。因此,了解数据模型的基本概念是学习数据库的基础。
两类数据模型
数据模型应满足三方面要求:一是能比较真实地模拟现实世界,二是容易为人所理解,三是便于在计算机上实现。一种数据模型要很好地、全面地满足这三方面的要求在目前尚很困难。因此,在数据库系统中针对不同的使用对象和应用目的,采用不同的数据模型。
如同在建筑设计和施工的不同阶段需要不同的图纸一样,在开发实施数据库应用系统中也需要使用不同的数据模型:概念模型、逻辑模型和物理模型。
根据模型应用的不同目的,可以将这些模型划分为两大类,它们分别属于两个不同的层次。第一类是概念模型,第二类是逻辑模型和物理模型。
第一类概念模型(conceptual model),也称信息模型,它是按用户的观点来对数据和信息建模,主要用于数据库设计。
第二类中的逻辑模型主要包括层次模型(hierarchical model)、网状模型(network model)、关系模型(relational model)、面向对象数据模型(object oriented data model)和对象关系数据模型(object relational data model)、半结构化数据模型(semistructured data model)等。它是按计算机系统的观点对数据建模,主要用于数据库管理系统的实现。
第二类中的物理模型是对数据最底层的抽象,它描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。物理模型的具体实现是数据库管理系统的任务,数据库设计人员要了解和选择物理模型,最终用户则不必考虑物理级的细节。
数据模型是数据库系统的核心和基础。各种机器上实现的数据库管理系统软件都是基于某种数据模型或者说是支持某种数据模型的。
为了把现实世界中的具体事物抽象、组织为某一数据库管理系统支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统,不是某一个数据库管理系统支持的数据模型,而是概念级的模型;然后再把概念模型转换为计算机上某一数据库管理系统支持的数据模型,这一过程如图7所示。
图7 现实世界中客观对象的抽象过程
从现实世界到概念模型的转换是由数据库设计人员完成的;从概念模型到逻辑模型的转换可以由数据库设计人员完成,也可以用数据库设计工具协助设计人员完成;从逻辑模型到物理模型的转换主要是由数据库管理系统完成的。
下面首先介绍概念模型,数据模型的组成要素,然后介绍三个常用的数据模型。
概念模型
由图7可以看出,概念模型实际上是现实世界到机器世界的一个中间层次。
概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言,因此概念模型一方面应该具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识,另一方面它还应该简单、清晰、易于用户理解。
信息世界中的基本概念
信息世界主要涉及以下一些概念。
(1) 实体(entity)。客观存在并可相互区别的事物称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或联系,例如,一个职工、一个学生、一个部门、一门课、学生的一次选课、部门的一次订货、教师与院系的工作关系(即某位教师在某院系工作)等都是实体。
(2) 属性(attribute)。实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。例如,学生实体可以由学号、姓名、性别、出生年月、所在院系、入学时间等属性组成,属性组合(201315121,张山,男,199505,计算机系,2013)即表征了一个学生。
(3) 码(key)。唯一标识实体的属性集称为码。例如学号是学生实体的码。
(4) 实体型(entitytype)。具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。例如,学生(学号,姓名,性别,出生年月,所在院系,入学时间)就是一个实体型。
(5) 实体集(entityset)。同一类型实体的集合称为实体集。例如,全体学生就是一个实体集。
(6) 联系(relationship)。在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。实体内部的联系通常是指组成实体的各属性之间的联系,实体之间的联系通常是指不同实体集之间的联系。
实体之间的联系有一对一、一对多和多对多等多种类型。
如果对于实体集 \(A\) 中的每一个实体,实体集 \(B\) 中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集 \(A\) 与实体集 \(B\) 具有一对一联系。
如果对于实体集 \(A\) 中的每一个实体,实体集 \(B\) 中有 \(n\) 个实体( \(n \ge 0\) )与之联系,反之,对于实体集 \(B\) 中的每一个实体,实体集 \(A\) 中至多只有一个实体与之联系,则称实体集 \(A\) 与实体集 \(B\) 有一对多联系。
如果对于实体集 \(A\) 中的每一个实体,实体集 \(B\) 中有 \(n\) 个实体( \(n \ge 0\) )与之联系,反之,对于实体集 \(B\) 中的每一个实体,实体集 \(A\) 中也有 \(m\) 个实体( \(m \ge 0\) )与之联系,则称实体集 \(A\) 与实体集 \(B\) 具有多对多联系。例如一门课程可以同时有若干名学生选修,而一个学生可以同时选修多门课程,则课程实体与学生实体具有多对多联系。
概念模型的一种表示方法:实体-联系方法
概念模型是对信息世界建模,所以概念模型应该能够方便、准确地表示出上述信息世界中的常用概念。概念模型的表示方法很多,其中最为常用的是P.P.S.Chen于1976年提出的实体-联系方法(Entity-Relationship approach)。该方法用E-R图(E-R diagram)来描述现实世界的概念模型,E-R方法也称为E-R模型。
数据模型的组成要素
一般地讲,数据模型是严格定义的一组概念的集合。这些概念精确地描述了系统的静态特性、动态特性和完整性约束条件(integrity constraints)。因此数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成。
数据结构
数据结构描述数据库的组成对象以及对象之间的联系。也就是说,数据结构描述的内容有两类:一类是与对象的类型、内容、性质有关的,如网状模型中的数据项、记录,关系模型中的域、属性、关系等;一类是与数据之间联系有关的对象,如网状模型中的系型(set type)。
数据结构是刻画一个数据模型性质最重要的方面。因此在数据库系统中,人们通常按照其数据结构的类型来命名数据模型。例如层次结构、网状结构和关系结构的数据模型分别命名为层次模型、网状模型和关系模型。
总之,数据结构是所描述的对象类型的集合,是对系统静态特性的描述。
数据操作
数据操作是指对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括(操作及有关的操作规则。
数据库主要有查询和更新(包括插入、删除、修改)两大类操作。数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言。数据操作是对系统动态特性的描述。
数据的完整性约束条件
数据的完整性约束条件是一组完整性规则。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。
数据模型应该反映和规定其必须遵守的基本的和通用的完整性约束条件。例如,在关系模型中,任何关系必须满足实体完整性和参照完整性两个条件。
此外,数据模型还应该提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。例如,在某大学的数据库中规定学生成绩如果有6门以上不及格将不能授予学士学位,教授的退休年龄是65周岁,男职工的退休年龄是60周岁,女职工的退休年龄是55周岁等。
常用数据模型
数据库领域中主要的逻辑数据模型有:
◦层次模型(hierarchical model)
◦网状模型(network model)
◦关系模型(relational model)
◦面向对象数据模型(object oriented data model)
◦对象关系数据模型(object relational data model)
◦半结构化数据模型(semistructure data model)
其中层次模型和网状模型统称为格式化模型。
格式化模型的数据库系统在20世纪70年代至80年代初非常流行,在数据库系统产品中占据了主导地位。层次数据库系统和网状数据库系统在使用和实现上都要涉及数据库物理层的复杂结构,现在已逐渐被关系模型的数据库系统取代。但在美国及欧洲的一些国家里,由于早期开发的应用系统都是基于层次数据库或网状数据库系统的,因此目前仍有一些层次数据库系统或网状数据库系统在继续使用。
20世纪80年代以来,面向对象的方法和技术在计算机各个领域,包括程序设计语言、软件工程、信息系统设计、计算机硬件设计等方面都产生了深远的影响,也促进数据库中面向对象数据模型的研究和发展。许多关系数据库厂商为了支持面向对象模型,对关系模型做了扩展,从而产生了对象关系数据模型。
随着Internet的迅速发展,Web上各种半结构化、非结构化数据源已经成为重要的信息来源,产生了以XML为代表的半结构化数据模型和非结构化数据模型。
本篇简要介绍层次模型、网状模型和关系模型。其他新型的数据模型将在后续介绍。
数据结构、数据操作和数据完整性约束条件这三个方面的内容完整地描述了一个数据模型,其中数据结构是刻画模型性质的最基本的方面。为了使读者对数据模型有一个基本认识,下面着重介绍三种模型的数据结构。
注:这里讲的数据模型都是逻辑上的,也就是说是用户眼中看到的数据范围。同时它们又都是能用某种语言描述,使计算机系统能够理解,被数据库管理系统支持的数据视图。这些数据模型将以一定的方式存储于数据库系统中,这是数据库管理系统的功能,是数据库管理系统中的物理存储模型。
在格式化模型中实体用记录表示,实体的属性对应记录的数据项(或字段)。实体之间的联系在格式化模型中转换成记录之间的两两联系。在格式化模型中数据结构的单位是基本层次联系。所谓基本层次联系是指两个记录以及它们之间的一对多(包括一对一)的联系,如图8所示。图中 \(R_i\) 位于联系 \(L_{ij}\) 的始点,称为双亲结点(parent), \(R_j\) 位于联系 \(L_{ij}\) 的终点,称为子女结点(child)。
图8 基本层次联系
层次模型
层次模型是数据库系统中最早出现的数据模型,层次数据库系统采用层次模型作为数据的组织方式。层次数据库系统的典型代表是IBM公司的IMS(Information Management System),这是1968年IBM公司推出的第一个大型商用数据库管理系统,曾经得到广泛的使用。
层次模型用树形结构来表示各类实体以及实体间的联系。现实世界中许多实体之间的联系本来就呈现出一种很自然的层次关系,如行政机构、家族关系等。
1. 层次模型的数据结构
在数据库中定义满足下面两个条件的基本层次联系的集合为层次模型:
(1) 有且只有一个结点没有双亲结点,这个结点称为根结点。
(2) 根以外的其他结点有且只有一个双亲结点。
在层次模型中,每个结点表示一个记录类型,记录类型之间的联系用结点之间的连线(有向边)表示,这种联系是父子之间的一对多的联系。这就使得层次数据库系统只能处理一对多的实体联系。
每个记录类型可包含若干个字段,这里记录类型描述的是实体,字段描述实体的属性。各个记录类型及其字段都必须命名。各个记录类型、同一记录类型中各个字段不能同名。每个记录类型可以定义一个排序字段,也称为码字段,如果定义该排序字段的值是唯一的,则它能唯一地标识一个记录值。
一个层次模型在理论上可以包含任意有限个记录类型和字段,但任何实际的系统都会因为存储容量或实现复杂度而限制层次模型中包含的记录类型个数和字段的个数。
在层次模型中,同一双亲的子女结点称为兄弟结点(twin或sibling),没有子女结点的结点称为叶结点。图9给出了一个层次模型的例子。其中, \(R_1\) 为根结点; \(R_2\) 和 \(R_3\) 为兄弟结点,是 \(R_1\) 的子女结点; \(R_4\) 和 \(R_5\) 为兄弟结点,是 \(R_2\) 的子女结点; \(R_3\) 、 \(R_4\) 和 \(R_5\) 为叶结点。
图9 一个层次模型的示例
从图9上可以看出层次模型像一棵倒立的树,结点的双亲是唯一的。
层次模型的一个基本的特点是,任何一个给定的记录值只能按其层次路径查看,没有一个子女记录值能够脱离双亲记录值而独立存在。
图10是一个教员学生层次模型。该层次模型有4个记录类型。记录类型系是根结点,由系编号、系名、办公地点三个字段组成。它有两个子女结点教研室和学生。记录类型教研室是系的子女结点,同时又是教员的双亲结点,它由教研室编号、教研室名两个字段组成。记录类型学生由学号、姓名、成绩三个字段组成。记录类型教员由职工号、姓名、研究方向三个字段组成。学生与教员是叶结点,它们没有子女结点。由系到教研室、由教研室到教员、由系到学生均是一对多的联系。
图10 教员学生层次数据库模型
图11是图10数据模型对应的一个值。该值是D02系(计算机科学系)记录值及其所有后代记录值组成的一棵树。D02系有三个教研室子女记录值R01、R02、R03和三个学生记录值S63871、S63874,S63876。教研室R01有三个教员记录值E2101、E1709,E3501;教研室R03有两个教员记录值E1101、E3102。
图11 教员学生层次数据库的一个值
2. 层次模型的数据操纵和完整性约束
层次模型的数据操纵主要有查询、插入、删除和更新。进行插入、删除、更新操作时要满足层次模型的完整性约束条件。
进行插入操作时,如果没有相应的双亲结点值就不能插入它的子女结点值。例如在图11的层次数据库中,若新调入一名教员,但尚未分配到某个教研室,这时就不能将新教员插入到数据库中。
进行删除操作时,如果删除双亲结点值,则相应的子女结点值也将被同时删除。例如在图10的层次数据库中,若删除网络教研室,则该教研室所有教员的数据将全部丢失。
3. 层次模型的优缺点
层次模型的优点主要有:
(1) 层次模型的数据结构比较简单清晰。
(2) 层次数据库的查询效率高。因为层次模型中记录之间的联系用有向边表示,这种联系在DBMS中常常用指针来实现。因此这种联系也就是记录之间的存取路径。当要存取某个结点的记录值,DBMS就沿着这一条路径很快找到该记录值,所以层次数据库的性能优于关系数据库,不低于网状数据库。
(3) 层次数据模型提供了良好的完整性支持。
层次模型的缺点主要有:
(1) 现实世界中很多联系是非层次性的,如结点之间具有多对多联系,不适合用层次模型表示。
(2) 如果一个结点具有多个双亲结点等,用层次模型表示这类联系就很笨拙,只能通过引入冗余数据(易产生不一致性)或创建非自然的数据结构(引入虚拟结点)来解决。对插入和删除操作的限制比较多,因此应用程序的编写比较复杂。
(3) 查询子女结点必须通过双亲结点。
(4) 由于结构严密,层次命令趋于程序化。
可见,用层次模型对具有一对多的层次联系的部门描述非常自然、直观,容易理解。这是层次数据库的突出优点。
网状模型
在现实世界中事物之间的联系更多的是非层次关系的,用层次模型表示非树形结构是很不直接的,网状模型则可以克服这一弊病。
网状数据库系统采用网状模型作为数据的组织方式。网状数据模型的典型代表是DBTG系统,亦称CODASYL系统。这是20世纪70年代数据系统语言研究会(Conference On Data System Language,CODASYL)下属的数据库任务组(Data Base Task Group,DBTG)提出的一个系统方案。DBTG系统虽然不是实际的数据库系统软件,但是它的基本概念、方法和技术具有普遍意义,对于网状数据库系统的研制和发展起了重大的影响。后来不少系统都采用DBTG模型或者简化的DBTG模型,如Cullinet Software公司的IDMS、Univac公司的DMS1100、Honeywell公司的IDS/2、HP公司的IMAGE等。
1. 网状模型的数据结构
在数据库中,把满足以下两个条件的基本层次联系集合称为网状模型:
(1) 允许一个以上的结点无双亲。
(2) 一个结点可以有多于一个的双亲。
网状模型是一种比层次模型更具普遍性的结构。它去掉了层次模型的两个限制,允许多个结点没有双亲结点,允许结点有多个双亲结点;此外它还允许两个结点之间有多种联系(称之为复合联系)。因此,网状模型可以更直接地去描述现实世界。而层次模型实际上是网状模型的一个特例。
与层次模型一样,网状模型中每个结点表示一个记录类型(实体),每个记录类型可包含若干个字段(实体的属性),结点间的连线表示记录类型(实体)之间一对多的父子联系。
从定义可以看出,层次模型中子女结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一。因此要为每个联系命名,并指出与该联系有关的双亲记录和子女记录。例如图12(a)中 \(R_3\) 有两个双亲记录 \(R_1\) 和 \(R_2\) ,因此把 \(R_1\) 与 \(R_3\) 之间的联系命名为 \(L_1\) , \(R_2\) 与 \(R_3\) 之间的联系命名为 \(L_2\) 。图12(a)、(b)、(c)都是网状模型的例子。
图12 网状模型的例子
下面以学生选课为例,看一看网状数据库是怎样来组织数据的。
按照常规语义,一个学生可以选修若干门课程,某一课程可以被多个学生选修,因此学生与课程之间是多对多联系。因为DBTG模型中不能表示记录之间多对多的联系,为此引进一个学生选课的连接记录,它由三个数据项组成,即学号、课程号、成绩,表示某个学生选修某一门课程及其成绩。这样,学生选课数据库包括三个记录:学生、课程和选课。
每个学生可以选修多门课程,显然对学生记录中的一个值,选课记录中可以有多个值与之联系,而选课记录中的一个值,只能与学生记录中的一个值联系。学生与选课之间的联系是一对多的联系,联系名为S-SC。同样,课程与选课之间的联系也是一对多的联系,联系名为C-SC。图13所示为学生选课数据库的网状数据模型。
图13 学生选课数据库的网状数据模型
2. 网状模型的数据操纵与完整性约束
网状模型一般来说没有层次模型那样严格的完整性约束条件,但具体的网状数据库系统对数据操纵都加了一些限制,提供了一定的完整性约束。
例如,DBTG在模式数据定义语言中提供了定义DBTG数据库完整性的若干概念和语句,主要有:
(1) 支持记录码的概念,码即唯一标识记录的数据项的集合。例如,学生记录(如图13)中学号是码,因此数据库中不允许学生记录中学号出现重复值。
(2) 保证一个联系中双亲记录和子女记录之间是一对多的联系。
(3) 可以支持双亲记录和子女记录之间的某些约束条件。例如,有些子女记录要求双亲记录存在才能插入,双亲记录删除时也连同删除。例如图13中选课记录就应该满足这种约束条件,学生选课记录值必须是数据库中存在的某一学生选修存在的某一门课的记录。DBTG提供了"属籍类别”的概念来描述这类约束条件。
3. 网状模型的主要优点
网状模型的优点主要有:
(1) 能够更为直接地描述现实世界,如一个结点可以有多个双亲,结点之间可以有多
种联系。
(2) 具有良好的性能,存取效率较高。
网状模型的缺点主要有:
(1) 结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不 利于最终用户掌握。
(2) 网状模型的DDL、DML复杂,并且要嵌入某一种高级语言(如COBOL、C)中。用户不容易掌握,不容易使用。
(3) 由于记录之间的联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此用户必须了解系统结构的细节,加重了编写应用程序的负担。
关系模型
关系模型是最重要的一种数据模型。关系数据库系统采用关系模型作为数据的组织方式。
1970年,美国IBM公司SanJose研究室的研究员E.F.Codd首次提出了数据库系统的关系模型,开创了数据库关系方法和关系数据理论的研究,为数据库技术奠定了理论基础。由于E.F.Codd的杰出工作,他于1981年获得ACM图灵奖。
20世纪80年代以来,计算机厂商新推出的数据库管理系统几乎都支持关系模型,非关系系统的产品也大都加上了关系接口。数据库领域当前的研究工作也都是以关系方法为基础。因此本书的重点也将放在关系数据库上,后面各篇将详细介绍关系数据库。
1. 关系模型的数据结构
关系模型与以往的模型不同,它是建立在严格的数学概念的基础上的。严格的定义将在第二篇“关系数据库”中给出。这里只简单勾画一下关系模型。从用户观点看,关系模型由一组关系组成。每个关系的数据结构是一张规范化的二维表。下面以学生登记表(如表5所示)为例,介绍关系模型中的一些术语。
学生登记表
学号 | 姓名 | 年龄 | 性别 | 系名 | 年级 |
---|---|---|---|---|---|
2013004 | 王小明 | 19 | 女 | 社会学 | 2013 |
2013006 | 黄大鹏 | 20 | 男 | 商品学 | 2013 |
2013008 | 张文斌 | 18 | 女 | 法律 | 2013 |
… | … | … | … | … | … |
表5 关系模型的数据结构
◦ 关系(relation): 一个关系对应通常说的一张表,例如表5中的这张学生登记表。
◦ 元组(tuple):表中的一行即为一个元组。
◦属性(attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名。 如表5所示的表有6列,对应6个属性(学号,姓名,年龄,性别,系名和年级)。
◦码(key):也称为码键。表中的某个属性组,它可以唯一确定一个元组,如表5中的学号可以唯一确定一个学生,也就成为本关系的码。
◦域(domain):域是一组具有相同数据类型的值的集合。属性的取值范围来自某个域。 如人的年龄一般在1〜120岁之间,大学生年龄属性的域是(15〜45岁),性别的域是(男,女),系名的域是一个学校所有系名的集合。
◦分量:元组中的一个属性值。
◦关系模式:对关系的描述,一般表示为
\[
关系名(属性1、属性2、···、属性n)
\tag{1}
\]
例如,上面的关系可描述为
\[
学生(堂号,姓名,年龄,性别,系名,年级)
\tag{2}
\]
关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。例如,表6中工资和扣除是可分的数据项,工资又分为基本工资、岗位津贴和业绩津贴,扣除又分为三险和个人所得税。因此,表6的表就不符合关系模型要求。
职工号 | 姓名 | 职称 | 工资 | 扣除 | 实发 | |||
---|---|---|---|---|---|---|---|---|
基本工资 | 岗位津贴 | 业绩津贴 | 三险 | 个人所得税 | ||||
86051 | 陈平 | 讲师 | 1305 | 1200 | 2850 | 160 | 112 | 4083 |
表6 一个工资表(表中有表)示例
可以把关系和现实生活中的表格所使用的术语做一个粗略的对比,如表L5所示。
关系术语 | 一般表格的术语 |
---|---|
关系名 | 表名 |
关系模式 | 表头(表格的描述) |
关系 | (一张)二维表 |
元组 | 记录或行 |
属性 | 列 |
属性名 | 列名 |
属性值 | 列值 |
分量 | 一条记录中的一个列值 |
非规范关系 | 表中有表(大表中嵌有小表) |
表7 术语对比
2. 关系模型的数据操纵与完整性约束
关系模型的数据操纵主要包括查询、插入、删除和更新数据。这些操作必须满足关系的完整性约束条件。关系的完整性约束条件包括三大类:实体完整性、参照完整性和用户定义的完整性。其具体含义将在后续内容中介绍。
关系模型中的数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集 合,而不像格式化模型中那样是单记录的操作方式。另一方面,关系模型把存取路径向用 户隐蔽起来,用户只要指出“干什么”或"找什么”,不必详细说明"怎么干”或"怎么找”, 从而大大地提高了数据的独立性,提高了用户生产率。
3. 关系模型的优缺点
关系模型具有下列优点:
(1) 关系模型与格式化模型不同,它是建立在严格的数学概念的基础上的。
(2) 关系模型的概念单一。无论实体还是实体之间的联系都用关系来表示。对数据的检索和更新结果也是关系(即表)。所以其数据结构简单、清晰,用户易懂易用。
(3) 关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
所以关系模型诞生以后发展迅速,深受用户的喜爱。
当然,关系模型也有缺点,例如,由于存取路径对用户是隐蔽的,查询效率往往不如 格式化数据模型。为了提高性能,数据库管理系统必须对用户的查询请求进行优化,因此增加了开发数据库管理系统的难度。不过用户不必考虑这些系统内部的优化技术细节。
数据库系统的结构
考察数据库系统的结构可以有多种不同的层次或不同的角度。从数据库应用开发人员角度看,数据库系统通常采用三级模式结构,这是数据库系统内部的系统结构。从数据库 最终用户角度看,数据库系统的结构分为单用户结构、主从式结构、分布式结构、客户—服务器、浏览器—应用服务器/数据库服务器多层结构等。这是数据库系统外部的体系结构。
本篇介绍数据库系统的模式结构。
数据库模式的概念
在数据模型中有“型”(type)和“值”(value)的概念。型是指对某一类数据的结构和属性的说明,值是型的一个具体赋值。例如,学生记录定义为(学号,姓名,性别,系别,年龄,籍贯)这样的记录型,而(201315130,李明,男,计算机系,19,江苏南京市)则是该记录型的一个记录值。
模式(schema)是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及型的描述,不涉及具体的值。模式的一个具体值称为模式的一个实例(instance)。同一个模式可以有很多实例。
例如,在学生选课数据库模式中包含学生记录、课程记录和学生选课记录,现有一个具体的学生选课数据库实例,该实例包含了2013年学校中所有学生的记录(如果某校有10000个学生,则有10000个学生记录)、学校开设的所有课程的记录和所有学生选课的记录。2012年度学生选课数据库模式对应的实例与2013年度学生选课数据库模式对应的实例是不同的。实际上2013年度学生选课数据库的实例也会随时间变化,因为在该年度有的学生可能退学,有的学生可能转系。各个时刻学生选课数据库的实例是不同的、在变化的,不变的是学生选课数据库模式。
模式是相对稳定的,而实例是相对变动的,因为数据库中的数据是在不断更新的。模式反映的是数据的结构及其联系,而实例反映的是数据库某一时刻的状态。
虽然实际的数据库管理系统产品种类很多,它们支持不同的数据模型,使用不同的数据库语言,建立在不同的操作系统之上,数据的存储结构也各不相同,但它们在体系结构上通常都具有相同的特征,即采用三级模式结构(早期微机上的小型数据库系统除外)并提供两级映像功能。
数据库的三级模式模式结构
数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级构成,如图14所示。
图14 数据库系统的三级模式结构
模式(shema)
模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。它是数据库系统模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,又与具体的应用程序、所使用的应用开发工具及高级程序设计语言无关。
模式实际上是数据库数据在逻辑级上的视图。一个数据库只有一个模式。数据库模式以某一种数据模型为基础,统一综合地考虑了所有用户的需求,并将这些需求有机地结合成一个逻辑整体。定义模式时不仅要定义数据的逻辑结构,例如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等;而且要定义数据之间的联系,定义与数据有关的安全性、完整性要求。
外模式(external schema)
外模式也称子模式(subschema)或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
外模式通常是模式的子集。一个数据库可以有多个外模式。由于它是各个用户的数据视图,如果不同的用户在应用需求、看待数据的方式、对数据保密的要求等方面存在差异,则其外模式描述就是不同的。即使对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同。另一方面,同一外模式也可以为某一用户的多个应用系统所使用,但一个应用程序只能使用一个外模式。
外模式是保证数据库安全性的一个有力措施。每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。
数据库管理系统提供外模式数据定义语言(外模式DDL)来严格地定义外模式。
内模式(internal schema)
内模式也称存储模式(storageschema),一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。例如,记录的存储方式是堆存储还是按照某个(些)属性值的升(降)序存储,或按照属性值聚簇(cluster)存储:索引按照什么方式组织,是B+树索引还是hash索引;数据是否压缩存储,是否加密;数据的存储记录结构有何规定,如定长结构或变长结构,一个记录不能跨物理页存储;等等。
数据库的二级映像功能与数据独立性
数据库系统的三级模式是数据的三个抽象级别,它把数据的具体组织留给数据库管理系统管理,使用户能逻辑地、抽象地处理数据,而不必关心数据在计算机中的具体表示方式与存储方式。为了能够在系统内部实现这三个抽象层次的联系和转换,数据库管理系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
外模式/模式映像
模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。对应于同一个模式可以有任意多个外模式。对于每一个外模式,数据库系统都有一个外模式/模式映像,它定义了该外模式与模式之间的对应关系。这些映像定义通常包含在各自外模式的描述中。
当模式改变时(例如增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
模式/内模式映像
数据库中只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系。例如,说明逻辑记录和字段在内部是如何表示的。该映像定义通常包含在模式描述中。当数据库的存储结构改变时(例如选用了另一种存储结构),由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据与程序的物理独立性,简称数据的物理独立性。
在数据库的三级模式结构中,数据库模式即全局逻辑结构是数据库的中心与关键,它独立于数据库的其他层次。因此设计数据库模式结构时应首先确定数据库的逻辑模式。
数据库的内模式依赖于它的全局逻辑结构,但独立于数据库的用户视图,即外模式,也独立于具体的存储设备。它是将全局逻辑结构中所定义的数据结构及其联系按照一定的物理存储策略进行组织,以达到较好的时间与空间效率。
数据库的外模式面向具体的应用程序,它定义在逻辑模式之上,但独立于存储模式和存储设备。当应用需求发生较大变化,相应的外模式不能满足其视图要求时,该外模式就得做相应改动,所以设计外模式时应充分考虑到应用的扩充性。
特定的应用程序是在外模式描述的数据结构上编制的,它依赖于特定的外模式,与数据库的模式和存储结构独立。不同的应用程序有时可以共用同一个外模式。数据库的二级映像保证了数据库外模式的稳定性,从而从底层保证了应用程序的稳定性,除非应用需求本身发生变化,否则应用程序一般不需要修改。
数据与程序之间的独立性使得数据的定义和描述可以从应用程序中分离出去。另外,由于数据的存取由数据库管理系统管理,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。
数据库系统的组成
在本章一开始介绍了数据库系统一般由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员构成。下面分别介绍这几个部分的内容。
硬件平台数据库
由于数据库系统的数据量都很大,加之数据库管理系统丰富的功能使得其自身的规模也很大,因此整个数据库系统对硬件资源提出了较高的要求,这些要求是:
(1) 要有足够大的内存,存放操作系统、数据库管理系统的核心模块、数据缓冲区和应用程序。
(2) 有足够大的磁盘或磁盘阵列等设备存放数据库,有足够大的磁带(或光盘)作数据备份。
(3) 要求系统有较高的通道能力,以提高数据传送率。
软件
数据库系统的软件主要包括:
(1) 数据库管理系统。数据库管理系统是为数据库的建立、使用和维护配置的系统软件。
(2) 支持数据库管理系统运行的操作系统。
(3) 具有与数据库接口的高级语言及其编译系统,便于开发应用程序。
(4) 以数据库管理系统为核心的应用开发工具。应用开发工具是系统为应用开发人员和最终用户提供的高效率、多功能的应用生成器、第四代语言等各种软件工具。它们为数据库系统的开发和应用提供了良好的环境。
(5) 为特定应用环境开发的数据库应用系统。
人员
开发、管理和使用数据库系统的人员主要包括数据库管理员、系统分析员和数据库设计人员、应用程序员和最终用户。不同的人员涉及不同的数据抽象级别,具有不同的数据视图,如图15所示。这些人员分别包括如下职责。
图15 各种人员的数据视图
1. 数据库管理员(Database Administrator,DBA)
在数据库系统环境下有两类共享资源,一类是数据库,另一类是数据库管理系统软件。因此需要有专门的管理机构来监督和管理数据库系统。数据库管理员则是这个机构的一个(组)人员,负责全面管理和控制数据库系统。具体包括如下职责。
(1) 决定数据库中的信息内容和结构。数据库中要存放哪些信息,数据库管理员要参与决策。因此,数据库管理员必须参加数据库设计的全过程,并与用户、应用程序员、系统分析员密切合作、共同协商,做好数据库设计。
(2) 决定数据库的存储结构和存取策略。数据库管理员要综合各用户的应用要求,和数据库设计人员共同决定数据的存储结构和存取策略,以求获得较高的存取效率和存储空间利用率。
(3) 定义数据的安全性要求和完整性约束条件。数据库管理员的重要职责是保证数据库的安全性和完整性。因此,数据库管理员负责确定各个用户对数据库的存取权限、数据的保密级别和完整性约束条件。
(4) 监控数据库的使用和运行。数据库管理员还有一个重要职责就是监视数据库系统的运行情况,及时处理运行过程中出现的问题。比如系统发生各种故障时,数据库会因此遭到不同程度的破坏,数据库管理员必须在最短时间内将数据库恢复到正确状态,并尽可能不影响或少影响计算机系统其他部分的正常运行。为此,数据库管理员要定义和实施适当的后备和恢复策略,如周期性的转储数据、维护日志文件等。
(5) 数据库的改进和重组、重构。数据库管理员还负责在系统运行期间监视系统的空间利用率、处理效率等性能指标,对运行情况进行记录、统计分析,依靠工作实践并根据实际应用环境不断改进数据库设计。不少数据库产品都提供了对数据库运行状况进行监视和分析的工具,数据库管理员可以使用这些软件完成这项工作。
另外,在数据运行过程中,大量数据不断插入、删除、修改,时间一长,数据的组织结构会受到严重影响,从而降低系统性能。因此,数据库管理员要定期对数据库进行重组织,以改善系统性能。当用户的需求增加和改变时,数据库管理员还要对数据库进行较大的改造,包括修改部分设计,即数据库的重构。
2. 系统分析员和数据库设计人员
系统分析员负责应用系统的需求分析和规范说明,要和用户及数据库管理员相结合,确定系统的硬件软件配置,并参与数据库系统的概要设计。
数据库设计人员负责数据库中数据的确定及数据库各级模式的设计。数据库设计人员必须参加用户需求调查和系统分析,然后进行数据库设计。在很多情况下,数据库设计人员就由数据库管理员担任。
3. 应用程序员
应用程序员负责设计和编写应用系统的程序模块,并进行调试和安装。
4. 用户
这里用户是指最终用户(end user)。最终用户通过应用系统的用户接口使用数据库。常用的接口方式有浏览器、菜单驱动、表格操作、图形显示、报表书写等。
最终用户可以分为如下三类。
(1) 偶然用户。这类用户不经常访问数据库,但每次访问数据库时往往需要不同的数据库信息,这类用户一般是企业或组织机构的高中级管理人员。
(2) 简单用户。数据库的多数最终用户都是简单用户,其主要工作是查询和更新数据库,一般都是通过应用程序员精心设计并具有友好界面的应用程序存取数据库。银行的职员、航空公司的机票预订工作人员、宾馆总台服务员等都属于这类用户。
(3) 复杂用户。复杂用户包括工程师、科学家、经济学家、科学技术工作者等具有较高科学技术背景的人员。这类用户一般都比较熟悉数据库管理系统的各种功能,能够直接使用数据库语言访问数据库,甚至能够基于数据库管理系统的应用程序接口编制自己的应用程序。
我们都是阴沟里的虫子,但总还是得有人仰望星空。― 刘慈欣, 《三体Ⅰ:地球往事》