
1.1 数据库基础知识
数据库技术产生于20世纪60年代末,是数据管理的最新技术,也是计算机科学的重要分支。数据库技术广泛应用于社会生活的各个方面,在以大批量数据的存储、组织和使用为基本特征的仓库管理、销售管理、财务管理、人力资源管理,以及生产经营管理等事务处理活动中,都要使用数据库管理系统来构建专门的数据库应用系统,并在数据库管理系统的控制下组织和使用数据,执行管理任务。不仅如此,在情报检索、专家系统、人工智能、计算机辅助设计等各种非数值计算领域,以及基于计算机网络的信息检索、远程信息服务、分布式数据处理、复杂市场的多维度跟踪监测等方面,数据库技术也都得到了广泛应用。
1.1.1 数据管理技术发展过程
数据管理技术的发展,与计算机硬件(主要是外部存储器)、系统软件及计算机应用的范围有着密切的联系。数据管理技术的发展经历了人工管理、文件系统、数据库系统和高级数据库系统等几个阶段。
1.人工管理阶段
20世纪50年代中期前,计算机主要用于科学计算。当时,由于计算机技术还很落后,没有磁盘等直接存取的存储设备,而且缺少必要的操作系统和数据库管理系统等相应软件的支持,对数据的管理是由应用程序设计者即程序员考虑和安排,由应用程序来管理。这种应用程序自带数据的设计方法,必然导致一组数据对应一个应用程序,两个应用程序之间不能共享数据,即数据是面向应用程序的,如图1-1所示。
这一时期的数据管理技术具有如下特点。

图1-1 数据的人工管理
(1)数据管理由应用程序完成
数据的组织、存储结构、存取方法、输入输出及修改等操作均由应用程序控制。在程序设计阶段,程序员除编制程序代码外,还要考虑数据的逻辑结构定义和物理组织等内容。
(2)数据不能共享
由于数据是依赖于具体的应用程序而存在的,即使两个应用程序使用的是完全相同的一组数据,这组数据也必须在各自的应用程序中分别定义、分别输入,无法共享,导致应用程序之间同一组数据的重复存放,造成数据冗余。
(3)数据缺乏独立性
由于数据和应用程序组织在一起,当数据的逻辑结构或物理结构发生改变时,对应的应用程序必须做相应的改变;同理,当应用程序改变时,数据的逻辑结构或物理结构也要发生相应的改变。
(4)数据不能保存
由于计算机硬件只有磁带、卡片及纸带等存储设备,加上这一时期计算机主要用于科学计算,一般无需将数据长期保存,即在程序运行过程中输入所需的数据,程序运行结束后,释放程序和数据所占有的存储空间,将来若需要再进行同一运算操作时,必须再次输入原数据。
2.文件系统阶段
20世纪50年代后期到60年代中期,计算机开始应用于信息管理。在计算机硬件方面,出现了磁鼓、磁盘等直接存取数据的外部存储设备。在软件方面,已经有了高级语言和操作系统。操作系统中的文件系统可以帮助用户将所需数据以文件的形式存储并对其进行各种处理。
在文件系统阶段,一个应用程序可以处理多个数据文件,文件系统在程序与数据之间起到接口作用。程序与数据有一定的独立性,程序和数据分开存储,有了程序文件和数据文件的区别。数据文件可以长期保存在外存储器上被多次存取。但是,文件系统也有很大的局限性,如一个数据文件基本对应于一个具体应用程序,不同的应用程序不能共享相同的数据,同一数据项可能出现在多个数据文件中,因而数据的重复存储等问题仍然存在,如图1-2所示。

图1-2 数据的文件系统
这一时期的数据管理技术具有如下特点。
(1)数据管理由文件管理系统完成
应用程序和数据文件可以从物理上分开,两者之间及数据文件的逻辑结构和存储结构之间均可以通过文件系统所提供的功能进行相互转换。
(2)数据共享性差、冗余度大
文件管理系统中,数据文件基本上是为特定的应用程序设计的,数据的格式没有统一的规定,只有当一组应用程序所使用的数据在内容或格式上完全相同时,数据才可以被共享。也就是说,数据文件仍然是面向具体应用的,因此数据的冗余度仍然很大。另外,由于数据文件是应用程序各自管理的,因此当需要对存储的具有部分重叠的数据进行维护时,操作处理流程不仅复杂,也容易出现数据的不一致性。
(3)数据独立性差
文件管理系统的产生使数据具有“设备独立性”,即数据的存储设备发生改变时不影响应用程序。但是,文件管理系统中的数据文件是为某一特定的应用程序服务的,当数据的存储结构或逻辑结构发生变化时,应用程序也要做相应的改变,即数据不具备“物理结构独立性”和“逻辑结构独立性”。
(4)数据可长期保存
数据以独立数据文件的形式长期保存在磁鼓或磁盘等外部存储介质上,数据文件可以被应用程序重复使用。
3.数据库系统阶段
从20世纪60年代后期开始,计算机性能得到很大提高,特别是出现了大容量磁盘,而且价格便宜。同时,计算机应用于管理的规模更加庞大,需要计算机管理的数据量急剧增长,并且对数据共享的需求日益增强。文件系统的数据管理方法已无法适应开发应用系统的需要。为了解决数据的独立性问题,实现数据的统一管理,达到数据共享的目的,发展了数据库技术。
数据库技术的主要目的是有效管理和存取大量的数据资源,包括提高数据的共享性,使多个用户能够同时访问数据库中的数据;减少数据的冗余度,提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。
为了让多种应用程序并发地使用数据库中的数据,必须使数据与程序具有较高的独立性。这就需要一个软件系统对数据实行专门管理,提供安全性和完备性等统一控制机制,方便用户以交互式和程序方式对数据库进行操作。这个软件系统就是数据库管理系统。
图 1-3 所示为数据的数据库系统管理示意图。

图1-3 数据的数据库系统管理示意图
这一时期的数据管理技术具有如下特点。
(1)数据结构化
采用数据模型表示复杂的数据结构,数据模型不仅描述数据本身的特征,还可以描述数据之间的相互关系。这样的数据不再面向特定的某个或多个应用,而是面向整个应用系统。
(2)数据共享程度高
数据库系统是从整体角度看待和描述数据,数据不再面向某个具体的应用,而是面向整个系统,即允许多个应用程序同时访问数据库中的数据,甚至可以同时访问数据库中的同一数据,达到数据的共享。
(3)数据独立性强
数据库独立性包括物理独立性和逻辑独立性两个方面。物理独立性是指用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的。逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,也就是说,数据的逻辑结构的改变不影响用户应用程序。
(4)数据冗余度小
数据冗余度是指同一数据重复存储程度。由于数据库系统的数据面向整个应用系统,所以数据冗余明显减少。
(5)加强对数据的保护
数据库系统采用数据的安全控制、数据的完整性控制、并发控制和数据恢复来保护数据。
4.高级数据库系统阶段
从20世纪70年代开始,数据库技术又有了很大的发展,表现如下。
(1)数据库方法。美国数据系统语言协会下属的数据库任务组对数据库方法进行了系统的讨论、研究,最终形成DBTG(DataBase Task Group)报告。DBTG方法和思想应用于各种计算机系统,出现了许多商品化数据库系统,它们大都是基于网状模型和层次模型的。
(2)商用数据库系统的运行,使数据库技术日益广泛地应用到企业管理、事务处理、交通运输、信息检索、军事指挥、政府管理和辅助决策等各个方面,深入到生产、生活的各个领域。数据库技术成为实现和优化信息系统的基本技术。
(3)关系方法的理论研究和软件系统的研制取得了很大的成果。
这一阶段的主要标志是 20 世纪 80 年代出现的分布式数据库系统(Distributed DataBase System,DDBS),90年代出现的面向对象数据库系统(Object-Oriented DataBase System, OODBS)。
1.1.2 数据库系统
数据库系统(DataBase System,DBS)是由数据库及其管理软件组成的系统。它可以实现有组织地、动态地存储大量相关数据,提供数据处理和信息资源共享服务。数据库系统由计算机系统(硬件和基本软件)、数据库、数据库管理系统、数据库应用系统和有关人员(数据库管理员、应用设计人员、最终用户)组成。
1.数据
数据(Data)是数据库中存储的基本对象。数据在大多数人头脑中的第一反应就是数字,如68、22.5、−1.5、$150等。其实数字只是最简单的一种数据,是对数据的一种传统和狭义的理解。广义上来说,数据的种类很多,文字、图形、图像、动画、影像、声音等都是数据。
可以对数据做如下定义:描述事物的物理符号序列称为数据。描述事物的物理符号可以是用来表示长度、体积、质量之类的数字数值,也可以是人名或地名、图形、图像、动画、影像、声音等非数值数据。
2.数据库
数据库(DataBase,DB),顾名思义,是存放数据的仓库。只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的。
人们收集并抽取出一个应用所需要的大量数据之后,应将其保存起来以供进一步查询,进一步加工处理,以获得有用的信息。过去人们把数据存放在文件柜里,当数据越来越多时,从大量的文件中查找数据就十分困难。现在借助计算机和数据库技术科学地保存和管理大量复杂的数据,可方便而充分地利用这些宝贵的信息资源。
严格地讲,数据库是长期存放在计算机内,有组织的、大量的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为多个用户、多个应用程序共享。
3.数据库管理系统
既然数据库能存放数据,那么数据库是如何科学地组织和存储数据,如何高效地获取和维护数据呢?完成这个任务的是一个系统软件—数据库管理系统(DataBase Management System, DBMS)。
数据库管理系统是位于用户与操作系统(OS)之间的数据管理软件。数据库管理系统与操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统。其主要功能包括以下几个方面。
(1)数据定义功能
DBMS提供了数据定义语言(Data Definition Language,DDL),通过它可以方便地对数据库中的相关内容进行定义。例如,对数据库、表、索引进行定义。
(2)数据操纵功能
DBMS提供了数据操纵语言(Data Manipulation Language,DML),通过它可以实现对数据库的基本操作。例如,对表中数据进行查询、插入、删除和修改等操作。
(3)数据库的运行管理
数据库在建立、运行和维护时由数据库管理系统统一管理、统一控制,这是DBMS的核心部分。它包括并发控制(即处理多个用户同时使用某些数据时可能产生的问题)、安全性检查、完整性约束条件的检查和执行、数据库内部维护(如索引的自动维护)等。所有的数据库操作都要在这些控制程序的统一管理下进行,以保证数据的安全性、完整性,以及多个用户对数据库的并发使用。
(4)数据库的建立和维护功能
数据库的建立和维护功能包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重新组织功能和性能监视、分析功能等。这些功能通常由一些实用程序来完成。
4.数据库应用系统
数据库应用系统是为特定应用开发的数据库应用软件。数据库管理系统为数据的定义、存储、查询和修改提供支持,而数据库应用系统是对数据库中的数据进行处理和加工的软件,它面向特定应用。例如,以数据库为基础的财务管理系统、人力资源管理系统、教学管理系统和生产管理系统等都属于数据库应用系统。
一般在不引起混淆的情况下常常把数据库系统简称为数据库。
1.1.3 数据模型
模型,特别是具体的实物模型,人们并不陌生。例如,一组建筑设计沙盘、一架精致的航模飞机,都是具体的实物模型。模型是现实世界特征的模拟和抽象。要将现实世界转变为机器能够识别的形式,必须经过两次抽象,即使用某种概念模型为客观事物建立概念级的模型,将现实世界抽象为信息世界,然后再把概念模型转变为计算机上某一DBMS支持的数据模型,将信息世界转变为机器世界。
1.实体的概念
概念模型是现实世界到信息世界的第一层抽象,是现实世界到计算机的一个中间层次。概念模型是数据库设计的有力工具,是数据库设计人员与用户之间进行交流的语言。它必须具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识,且简单、清晰、易于用户理解。
(1)实体(Entity)
客观存在并可相互区别的事物称为实体。实体可以是实际事物,也可以是抽象事件。例如,一个学生、一个院系等属于实际事物;一次订货、选修若干门课程、一场比赛等活动是抽象的事件。
同一类型的实体的集合称为实体集(Entity Set),即具有同一类属性的事物的集合。例如,全体教师的集合、所有选课的情况等。
(2)属性(Attribute)
实体所具有的某一特性称为属性。实体可具有若干个属性,如教师实体用若干属性(教师编号、姓名、性别、出生日期、职称)来描述。属性的具体取值称为属性值,用以刻画一个具体的实体。例如,属性值的组合(95010,张乐,女,11/10/69,助教)在教师名册中就表征了一个具体人。
(3)关键字(Keyword)
如果某个属性或属性组合能够唯一地标识出实体集中的各个实体,可以选作关键字,也称为码。例如,学生的编号可以作为学生实体的关键字,学生的姓名则不能作为学生实体的关键字,因为姓名可能重复;而选课成绩实体则应将学生编号和课程编号的组合作为关键字。
(4)联系(Relationship)
实体集之间的对应关系称为联系,它反映现实世界事物之间的相互关联。联系分为两种,一种是实体内部各属性之间的联系,另一种是实体之间的联系。
2.E-R模型
概念模型是对信息世界建模的,因此应该能完整、准确地表示实体及实体之间的联系。概念模型的表示方法有很多,其中以P.P.S.Chen于1976年提出的实体—联系方法(E-R方法)最为著名。该方法用E-R图来描述现实世界的概念模型,也称为E-R模型(Entity Relationship Model)。
E-R模型有3个要素:实体、属性和实体间的联系。
(1)实体:用矩形表示,框内标注实体名称。
(2)属性:用椭圆表示,并用连线与实体或联系连接起来。
(3)实体间的联系:用菱形框表示,框内标注联系名称,并用连线将菱形框分别与有关实体相连。
实体间的联系按联系方式可分为以下3种类型。
① 一对一联系
如果实体集A中的每一个实体至多和实体集B中的一个实体有联系,反过来,B中的每个实体至多和A中的一个实体有联系,则称实体集A与实体集B具有一对一联系,记为1 : 1。例如,电影院中的观众与座位之间、乘车旅客与车票之间、学校与校长之间都是一对一联系,如图 1-4所示。

图1-4 一对一联系
② 一对多联系
如果实体集A中的每个实体可以和实体集B中的n个实体(n≥0)有联系,而实体集B中的每个实体至多和实体集A中的一个实体有联系,则称实体集A与实体集B具有一对多的联系,记为1:n。例如,省对县、城市对街道、院系对学生等都是一对多联系,如图1-5所示。

图1-5 一对多联系
③ 多对多联系
如果实体集A中的每个实体可以和实体集B中的n个实体(n≥0)有联系,反过来,实体集B中的每个实体也可以和实体集A中的m个实体(m≥0)有联系,则称实体集A与实体集B具有多对多的联系,记为m:n。例如,商品与顾客、学生与课程等都是多对多联系,如图1-6所示。

图1-6 多对多联系
3.数据模型
数据模型是对客观事物及其联系的数据描述,是对数据库中数据逻辑结构的描述,把信息世界数据抽象为机器世界数据。每个数据库管理系统都是基于某种数据模型的。在目前数据库领域中,常用的数据模型有3种:层次模型、网状模型和关系模型。
(1)层次模型
层次模型是以树状结构来表示实体及实体之间联系的模型,由父节点、子节点和连线组成。网中的每一个节点代表一个实体集,节点间连线表示实体间的联系。所有的连线均由父节点指向子节点,具有同一父节点的节点称为兄弟节点。父节点与子节点之间为一对多的联系。
层次模型具有如下两个特点:
① 有且仅有一个节点,无父节点,这个节点即称为根节点;
② 其他节点有且仅有一个父节点。
图1-7所示为一个层次模型示例。
层次模型实际上是由若干代表实体之间一对多联系的基本层次组成的一棵树,树的每一个节点代表一个实体集。该模型的实际存储数据由链接指针来体现联系。

图1-7 层次模型示例
层次模型的优点是简单、直观、处理方便、算法规范,缺点是不能表达复杂的数据结构。
(2)网状模型
用网状结构来表示实体及实体之间联系的数学模型称为网状模型。它的特点是:
① 一个节点可以有多个父节点;
② 多个节点可以无父节点。
图1-8所示为一个网状模型示例。

图1-8 网状模型示例
网状模型的父节点与子节点之间为一对多的联系,系统用单向或双向环行链接指针体现这种联系。
网状模型的优点是可以表示复杂的数据结构,存取数据的效率比较高;缺点是结构复杂,每个问题都有其相对的特殊性,实现的算法难以规范化。
(3)关系模型
用二维表结构表示实体及实体之间联系的模型称为关系模型。在关系模型中,数据的逻辑结构是满足一定条件的二维表,一个二维表就是一个关系。描述问题的所有二维表的集合构成了一个关系模型。
在关系模型中,无论实体本身还是实体间的联系均可用称为“关系”的二维表表示,使得描述实体的数据本身能够自然地反映它们之间的联系。而传统的层次模型和网状模型是使用链接指针来存储和体现联系的。