1.2 数据库技术的产生、发展
通过前面的学习可知,数据处理的中心问题是数据管理。随着计算机硬件和软件的发展,数据管理经历了人工管理、文件系统和数据库系统三个发展阶段。数据库技术正是应数据管理任务的需要而产生、发展的。
1.人工管理阶段
在20世纪50年代中期以前,计算机主要用于科学计算,当时只有卡片、纸带和磁带,没有磁盘等直接存取设备,机器通过指定位置是否存在空洞确定该位置的二进制数值,如图1-1所示。软件只有汇编语言,没有操作系统和管理数据的软件。所以,为了给程序提供科学计算和数据处理的数据,必须手工制作穿孔纸带。因此,称这样的数据管理方式为人工管理数据。
图1-1 人工管理阶段管理数据的穿孔纸带
人工管理数据有如下几个特点。
(1)数据没有专门的存取设备。由于当时的计算机主要用于科学计算,对于数据保存的需求尚不迫切。只有在计算某一课题时才将原始数据随程序一起输入内存,运算结束后将结果数据输出。随着计算任务的完成,数据和程序一起从内存中被释放;若再计算同一课题时,还需要再次输入原始数据和程序。可见,由于缺少磁盘这样的可直接存取数据的存储设备,不仅参加运算的原始数据不保存,运算的结果也不保存。
(2)数据没有专门的管理软件。数据需要由应用程序自己管理,没有相应的软件系统负责数据的管理工作。每个应用程序不仅要规定数据的逻辑结构,而且要设计数据的物理结构,包括输入数据的物理结构、对应物理结构的计算方法和输出数据的物理结构等,因此,程序员的负担也很重。
(3)数据不共享。数据是面向程序的,一组数据只能对应一个程序。即使多个应用程序涉及某些相同的数据时,也必须各自定义,无法互相利用、互相参照,因此,程序之间有大量的冗余数据。
(4)数据不具有独立性。由于以上几个特点,以及没有专门对数据进行管理的软件系统,所以,这个时期的每个程序都要包括数据存取方法、输入/输出方式和数据组织方法等。因为程序是直接面向存储结构的,所以,如果数据的类型、格式或输入/输出方式等逻辑结构或物理结构发生变化,必须对应用程序做出相应的修改,因而,数据与程序不具有独立性,这也进一步加重了程序员的负担。
在人工管理阶段,程序与数据之间是一一对应的关系,其特点可用图1-2表示。
图1-2 人工管理阶段应用程序与数据之间的对应关系
2.文件系统阶段
在20世纪50年代后期至60年代中期,计算机应用范围逐步扩大,不仅用于科学计算,还大量用于信息管理。随着数据量的增加,数据的存储、检索和维护成为紧迫的需要。
此时,在硬件方面,已有了磁盘、磁鼓等数据存取设备;在软件方面,出现了高级语言和操作系统,操作系统中有了专门管理数据的软件。
文件系统阶段数据管理有如下特点。
(1)数据以文件形式长期保存。数据以文件的组织方式,长期保存在计算机的磁盘上,可以被多次反复使用。应用程序可对文件进行查询、修改和增删等处理。
(2)由文件系统管理数据。文件系统提供了文件管理功能和文件的存取方法。文件系统把数据组织成具有一定结构的记录,并以文件的形式存储在存储设备上,这样,程序只与存储设备上的文件名打交道,不必关心数据的物理存储(存储位置、物理结构等),而由文件系统提供的存取方法实现数据的存取,从而实现了“按文件名访问,按记录进行存取”的数据管理技术。
(3)程序与数据间有一定独立性。由于文件系统在程序与数据文件之间的存取转换作用,使得程序和数据之间具有“设备独立性”,即当改变存储设备时,不必改变应用程序。程序员也不必过多地考虑数据存储的物理细节,而将精力集中于算法设计上,从而大大减少了维护程序的工作量。
(4)文件的形式已经多样化。由于有了磁盘这样的数据存取设备,文件也就不再局限于顺序文件,有了索引文件、链表文件等。因此,对文件的访问方式既可以是顺序访问,也可以是直接访问。但文件之间是独立的,它们之间的联系需要通过程序去构造,文件的共享性也比较差。
(5)数据具有一定的共享性。有了文件以后,数据就不再仅仅属于某个特定的程序,而可以由多个程序反复使用。但文件结构仍然是基于特定用途的,程序仍然是基于特定的物理结构和存取方法编制的。因此,数据的存储结构和程序之间的依赖关系并未根本改变。
在文件系统阶段,程序与数据之间的对应关系如图1-3所示。
与人工管理阶段相比,文件系统阶段对数据的管理有了很大的进步,但一些根本性问题仍没有彻底解决,主要表现在以下几个方面。
(1)数据共享性差、冗余度大。一个文件基本上对应于一个应用程序,即文件仍然是面向应用的。当不同的应用程序所使用的数据具有共同部分时,也必须分别建立自己的数据文件,数据不能共享。
(2)数据不一致性。这通常是由数据冗余造成的。由于相同数据在不同文件中的重复存储、各自管理,在对数据进行更新操作时,不但浪费磁盘空间,同时也容易造成数据的不一致性。
(3)数据独立性差。在文件系统阶段,尽管程序与数据之间有一定的独立性,但是这种独立性主要是指设备独立性,还未能彻底体现用户观点下的数据逻辑结构独立于数据在外部存储器的物理结构要求。因此,在文件系统中,一旦改变数据的逻辑结构,必须修改相应的应用程序,修改文件结构的定义。而应用程序发生变化,如改用另一种程序设计语言来编写程序,也将引起文件的数据结构的改变。
(4)数据间的联系弱。文件与文件之间是独立的,文件间的联系必须通过程序来构造。因此,文件系统只是一个没有弹性的、无结构的数据集合,不能反映现实世界事物之间的内在联系。
图1-3 文件系统阶段应用程序与数据间的对应关系
3.数据库系统阶段
从20世纪60年代后期开始,计算机用于管理的规模更加庞大,应用越来越广泛,数据量急剧增加,同时,多种应用、多种语言互相覆盖地共享数据集合的要求也越来越强烈。
在这种情况下,为了提高数据管理的效率,人们开始对文件系统进行扩充,但这样做没能解决问题。而此时,硬件方面出现了大容量、存取快速的磁盘,使计算机联机存取大量数据成为可能,也为数据库技术的产生和发展提供了物质条件。同时,硬件价格下降和软件价格上升,使开发和维护系统软件的成本相对增加。因此,文件系统的数据管理方法已无法适应各种应用的需要。于是为解决多用户、多个应用程序共享数据的需求,数据库技术应运而生,出现了统一管理数据的专门软件系统,即数据库管理系统(Data Base Management System,DBMS)。
可见,计算机技术的发展、数据管理的需求迫切性共同促进了数据库技术的诞生。
20世纪60年代末期出现的对数据管理技术有着奠基作用的三件大事,标志着以数据库管理系统为基本手段的数据管理新阶段的开始。
(1)1968年,美国IBM公司推出了商品化的信息管理系统(Information Management System, IMS)。
(2)1969年,美国数据系统语言协会(Conference On Data System Language,CODASYL)下属的数据库任务组(Data Base Task Group,DBTG)发布了一系列研究数据库方法的DBTG报告。该报告建立了数据库技术的很多概念、方法和技术。
(3)1970年起,美国IBM公司的研究员E. F. Codd连续发表文章,开创了数据库关系方法和关系数据理论的研究,为关系数据库的发展和理论研究奠定了基础,该模型一直沿用至今。
20世纪70年代以来,数据库技术得到迅速发展,开发出了许多产品,并投入运行。数据库系统克服了文件系统的缺陷,提供了对数据更高级、更有效的管理,与人工管理和文件系统相比,数据库系统阶段管理数据的特点有如下几个方面。
(1)结构化的数据及其联系的集合。在数据库系统中,将各种应用的数据按一定的结构形式(即数据模型)组织到一个结构化的数据库中,不仅考虑了某个应用的数据结构,而且考虑了整个组织(即多个应用)的数据结构,也就是说,数据库中的数据不再仅仅针对某个应用,而是面向全组织,不仅数据内部是结构化的,整体也是结构化的;不仅描述了数据本身,也描述了数据间的有机联系,从而较好地反映了现实世界事物间的自然联系。
例如:要建立学生成绩管理系统,系统包含学生(学号、姓名、性别、系别、年龄)、课程(课程号、课程名)、成绩(学号、课程号、成绩)等数据,分别对应三个文件。对比文件系统的数据存储方式,因为文件系统只表示记录内部的联系,而不涉及不同文件记录之间的联系,要想查找某个学生的学号、姓名、所选课程的名称和成绩,必须编写一段比较复杂的程序来实现,即不同文件记录间的联系只能写在程序中。而采用数据库方式,由于数据库系统不仅描述数据本身,还描述数据之间的联系,上述查询可以非常容易地联机查到。
此外,在数据库系统中,不仅数据是结构化的,而且存取数据的方式也很灵活,可以存取数据库中的某一个数据项、一组数据项、一个记录或一组记录。而在文件系统中,数据的最小存取单位是记录,不能细化到数据项。
(2)数据共享性高、冗余度低。所谓数据共享是指数据库中的一组数据集合可为多个应用和多个用户共同使用。
由于数据库系统从整体角度看待和描述数据,数据不再面向某个或某些应用,而是全盘考虑所有用户的数据需求,面向整个应用系统,所有用户的数据都包含在数据库中。因此,不同用户、不同应用可同时存取数据库中的数据,每个用户或应用只使用数据库中的一部分数据,同一数据可供多个用户或应用共享,从而减少了不必要的数据冗余,节约了存储空间,同时也避免了数据之间的不相容性与不一致性,即避免了同一数据在数据库中重复出现且具有不同值的现象。
同时,在数据库系统中,用户和程序不像在文件系统中那样各自建立自己对应的数据文件,而是从数据库中存取其中的数据子集。该数据子集是通过数据库管理系统从数据库中经过映射而形成的逻辑文件。同一个数据可能在物理存储上只存一次,但可以把它映射到不同的逻辑文件里,这就是数据库系统提高数据共享、减少数据冗余的根本所在,如图1-4所示。
图1-4 数据库系统中的数据共享机制示意图
(3)数据独立性高。所谓数据的独立性是指数据库中的数据与应用程序间相互独立,即数据的逻辑结构、存储结构以及存取方式的改变不影响应用程序。
在数据库系统中,整个数据库的结构可分成三级:用户逻辑结构、数据库逻辑结构和物理结构。数据独立性分为两级:物理独立性和逻辑独立性,如图1-5所示。
数据的物理独立性是指当数据库物理结构(如存储结构、存取方式、外部存储设备等)改变时,通过修改映射,使数据库逻辑结构不受影响,进而用户逻辑结构以及应用程序不用改变。例如,在更换程序运行的硬盘时,数据库管理系统会根据不同硬件,调整数据库逻辑结构到数据库物理结构的映射,保持数据库逻辑结构不发生改变,因此用户逻辑结构无需改变。
图1-5 数据库的三级结构及其映射关系示意图
数据的逻辑独立性是指当数据库逻辑结构(如修改数据定义、增加新的数据类型、改变数据间的关系等)发生改变时,通过修改映射,用户逻辑结构以及应用程序不用改变。例如,在修改数据库中数据的内容时,数据库管理系统会根据调整后的数据库逻辑结构,调整用户逻辑结构到数据库逻辑结构的映射,保持用户逻辑结构访问的数据逻辑不改变,因此用户逻辑结构无需改变。
数据独立性把数据的定义从程序中分离出去,加上数据的存取是由DBMS负责,从而简化了应用程序的编写,大大减轻了应用程序的维护和修改的代价。
(4)有统一的数据管理和控制功能。在数据库系统中,数据由数据库管理系统进行统一管理和控制。数据库可为多个用户和应用程序所共享,不同的应用需求可以从整个数据库中选取所需要的数据子集。另外,对数据库中数据的存取往往是并发的,即多个用户可以同时存取数据库中的数据,甚至可以同时存取数据库中的同一个数据。为确保数据库数据的正确、有效和数据库系统的有效运行,数据库管理系统提供下述4个方面的数据控制功能。
①数据的安全性(Security)控制:防止不合法使用数据库造成数据的泄露和破坏,使每个用户只能按规定对某些数据进行某种或某些操作和处理,保证数据的安全。例如,系统提供口令检查用户身份或用其他手段来验证用户身份,以防止非法用户使用系统。也可以对数据的存取权限进行限制,用户只能按所具有的权限对指定的数据进行相应的操作。
② 数据的完整性(Integrity)控制:系统通过设置一些完整性规则等约束条件,确保数据的正确性、有效性和相容性。
正确性是指数据的合法性,如年龄属于数值型数据,只能含有0,1,…,9,不能含有字母或特殊符号。
有效性是指数据是否在其定义的有效范围,如月份只能用1~12的正整数表示。
相容性是指表示同一事实的两个数据应相同,否则就不相容,如一个人不能有两个性别。
③并发(Concurrency)控制:多个用户同时存取或修改数据库时,系统可防止由于相互干扰而提供给用户不正确的数据,并防止数据库受到破坏。
④数据恢复(Recovery):由于计算机系统的硬件故障、软件故障、操作员的误操作及其他故意的破坏等原因,造成数据库中的数据不正确或数据丢失时,系统有能力将数据库从错误状态恢复到最近某一时刻的正确状态。
在数据库系统阶段,程序与数据之间的关系,如图1-6所示。
图1-6 数据库系统阶段程序与数据之间的关系
从文件系统管理发展到数据库系统管理是信息处理领域的一个重大变化。在文件系统阶段,人们关注的是系统功能的设计,因此,程序设计处于主导地位,数据服从于程序设计;而在数据库系统阶段,数据占据了中心位置,数据的结构设计成为信息系统首先关心的问题。