在数据处理的众多环节中,数据管理是基本环节。数据管理是指对数据的组织、编目、定位、存储、检索和维护等,是数据库系统的核心研究内容。自从1946年电子计算机诞生至今,计算机硬件在不断发展,同时也推动了数据管理技术的不断发展。数据管理技术依次经历了以下三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。
在20世纪50年代中期以前,计算机的软硬件均不完善。在硬件方面,没有外存或只有磁带外存等顺序存储设备,输入输出设备简单;在软件方面,只有汇编语言等非常低级的计算机语言,还没有操作系统和可管理数据的软件系统。计算机主要充当科学计算器的角色。数据的组织是面向应用的,如图1.8所示,各个应用使用独立的程序,且数据是程序的组成部分。修改数据会导致程序也需要修改。由于数据是经常会变化的,因此程序员编写和维护程序的工作任务非常繁重。
图1.8 人工管理阶段面向应用的数据组织
思考 :当我们计算3+4×5-6的时候,编写了一个求解程序,接着计算4+5×6-7的时候,又得编写一个求解程序,再计算5+6×7-8时还得编写一个求解程序。有什么办法可以减少编写程序的工作量?
在人工管理阶段进行数据处理时,数据随程序一起送入内存,任务完成后全部撤出计算机,不能长期保留。数据的管理由程序员个人负责,应用程序与计算机物理地址直接关联,数据管理低效且缺乏安全性。不同应用之间存在大量重复数据,无法共享数据。
在20世纪50年代后期至20世纪60年代中期,计算机的存储技术得到了很大的发展,大容量存储设备——硬盘等直接存取设备的出现,使得数据可以长期保存在磁盘上。这不仅提高了计算机的输入输出能力,也大大推动了软件技术的发展。操作系统和高级程序语言的出现使数据处理迈上了一个新的台阶。操作系统中的文件系统以文件的形式对数据进行统一的管理。数据被组织成文件存储在外存,且文件格式多样。操作系统为用户使用文件提供了友好的界面。如图1.9所示,文件的逻辑结构与物理结构分离开了,用户只需要通过文件名——由文件系统负责找到该文件名对应的物理地址——就可以实现对数据的存储、检索、插入、删除和修改。数据可以以文件为单位被多个应用程序共享,数据和应用程序之间有了一定的独立性。有了文件系统,计算机的数据管理就得到了极大的改善,这使得计算机的应用领域从科学计算扩展到企业信息管理。
图1.9 文件系统的文件访问原理
然而,这种数据管理技术也存在不足之处。以校园信息管理系统为例,学校各个部门职能不同,需要对学生的部分相关信息进行存储和管理。教务处主管教务,建立了“教务”文件,以存储与教务相关的信息,如学生的学号、姓名、性别、班级、电话、课程号、课程名、成绩等信息;保卫处负责校园门禁管理和人员的户籍管理,建立了“户籍”文件,以存储学生的学号、姓名、性别、班级、籍贯、户口所在地、电话等信息;校医院则建立了“健康”文件来记录学生的健康状况,如学生的学号、姓名、性别、班级、身高、体重、药物过敏、电话等信息。“教务”文件、“户籍”文件和“健康”文件既存在部分相同的数据,如学生的学号、姓名、性别、班级、电话等,也各自存储着一些特有的数据,如图1.10所示。
图1.10 采用文件系统进行校园信息管理
每一个职能部门针对一个特定的应用独自建立一个文件时,数据缺乏统一的规范化标准,同一个数据,如学号,在“户籍”中可能是字符型的,在其他文件中却是数值型的;这些文件的格式可能是多种多样的。虽然文件内数据间的关联被记录了,但不同文件之间的数据关联却缺乏记录。因此,要实现一些复杂问题的查询,就要编写程序。
文件系统中应用程序与数据分离(见图1.11)。由于一个文件对应一个应用,尽管不同部门所需数据有部分是相同的,仍需建立各自的文件,数据不能共享,这就导致了大量数据重复存储,如学生的基本信息(学生的学号、姓名、性别、班级、电话等)要记录三次,浪费存储空间。我们把这种在一个以上位置不必要地重复存储数据的现象称为数据冗余(Data Redundancy)。数据冗余问题会随着学生人数的增加而变得越发严重。
数据冗余不仅浪费存储空间,而且会导致数据不一致(Data Inconsistency)和数据异常(Data Abnormally)。所谓数据不一致,是指本应相同的数据在不同的位置上出现不同且相互冲突的版本。数据异常则可简单地理解为数据的不正常。例如,学生张怡在大二时转专业了,教务处在“教务”文件中对其班级进行了更新,但保卫处和校医院不知情,因此“户籍”和“健康”文件中记录的张怡依旧属于原班级。这是由于数据更新没有在这三个文件中统一执行而导致的数据不正常。我们把这种数据更新所引发的数据异常称为更新异常。在某新生入学时,教务处在“教务”文件中增加了一条记录,若“户籍”和“健康”文件中没有同时增加该学生的信息,就会导致该学生的信息缺失。我们把这种数据插入所引发的数据异常称为插入异常。同理,由于没有统一执行数据删除而导致的数据异常称为删除异常。由此可见,数据冗余会导致数据不一致和数据异常,进而增加数据修改和维护的难度。此外,文件系统以文件为基本单位存储数据,在数据安全保密方面无法做到更细的粒度,可采取的安全保密措施十分有限。
图1.11 文件系统中应用程序与数据分离
思考 :既然数据冗余会带来这么多问题,有没有方法可以降低数据冗余?全校众多部门共同保存一份学生基本信息是否可行?
在前述校园信息管理系统的例子中,如果全校统筹考虑,各职能部门抽取共同的数据需求(例如学生的基本信息),共同存储一个数据备份并共享该备份,则可以降低数据冗余,避免数据不一致和数据异常的发生。到了20世纪60年代中后期,随着计算机在数据管理领域得到普遍应用,要处理的数据量急剧膨胀,要联机实时处理的业务不断增多,人们对数据共享提出了更迫切的要求。计算机硬件技术的飞速发展使得硬件价格大幅下降,软件研发及维护成本占系统开发成本的比重相对增加。要降低软件研发和维护的费用,在数据经常发生变化的情况下,必须减少修改程序代码的工作量。在此类需求推动下,以及随着大容量磁盘和网络技术的出现,数据库技术问世。
数据库是存储在计算机里的关联数据的集合。这些数据是结构化的,不存在有害的或不必要的冗余,并为多种应用服务。数据存储独立于使用它的程序。对数据库插入新数据,修改和检索原有数据,均能按一种公用的和可控制的方式进行。
数据库技术研究如何组织和存储数据,如何高效地获取数据并处理数据。数据库技术的根本目标是降低数据冗余,实现数据共享。在管理数据时,从整体关联用户出发而不再只针对某种特定的应用来考虑数据的组织和存储。以前述校园信息管理系统为例,可统一分析教务处、保卫处、校医院等部门的数据管理需求,从数据共享的角度出发,将各部门关心的学生基本信息抽取出来构建一个独立的数据表,各部门共享学生基本信息表里面的数据。此外,还可根据各个部门职能相关的业务单独构建数据表,而且这些职能相关的业务数据表只对相关的业务人员开放访问权限,如图1.12所示。例如,校医院的医生具有访问健康表的权限,而无权查看户籍表与教务表的数据;当校医院的医生需要联系某学生时,可以通过学号在学生基本信息表里找到该学生的电话号码。
事实上,图1.12中的学生基本信息表、户籍表、健康表与教务表的数据是相关联的。我们把这些相关联的数据集合称为 数据库 (Database,DB)。数据库是为了解决数据管理问题而构建的,存储了反映真实世界某些方面的数据,具有特定的用户群体。数据库系统(Database System,DBS)采用数据库技术有组织地、动态地存储大量关联数据,方便多用户(或应用程序)访问。如图1.13所示,数据库系统中有一个重要的组成部分——数据库管理系统(Database Management System,DBMS),它帮助用户创建和管理数据库。用户对数据库的一切操作,包括定义、构造、更新、查询等,都是通过DBMS进行的。此外,DBMS还能解决数据存储过程中的一系列问题,保证数据库正常运作。
图1.12 采用数据库系统进行校园信息管理
图1.13 数据库系统
思考 :对比数据库系统阶段与文件系统阶段数据管理思路的根本区别。
早期的数据库系统是从文件系统发展而来的。这些数据库系统使用不同的数据模型来描述数据库中的信息结构,如1968年IBM公司研制的基于层次模型的数据库管理系统IMS(Information Management System)。20世纪60年代末70年代初美国数据库系统语言协会CODASYL(Conference on Data System Language)下属的数据库任务组DBTG(Database Task Group)提出了著名的DBTG报告,对网状数据模型和语言进行了定义。早期的模型和系统存在一个问题,即它们不支持高级查询语言。在使用这些系统时,即便只完成一个简单的查询,用户也得花费很大的力气去编写查询程序。
1970年,IBM公司的研究员E.F.Codd发表了一篇题为“A Relational Model of Data for Large Shared Data Banks”的论文。该论文提出了数据库系统应以表格的形式将数据组织给用户看,这种形式被称作关系。尽管在关系的背后可能隐藏着极其复杂的数据结构,但用户无须关心数据的存储结构就可以实现对数据的快速查询,从而大大提高了数据库程序员的工作效率。关系数据库模型和方法为关系数据库技术奠定了理论基础,并开创了数据库技术领域的新纪元。1981年美国计算机协会(Association for Computing Machinery,ACM)给E.F.Codd颁发了图灵奖以表彰他所做出的杰出贡献。
20世纪70年代后期,关系数据库从实验室走向了社会。之后几乎所有新研发的数据库系统都是关系型的,数据库技术得到了迅猛发展。许多数据库供应商开发了各种针对不同应用的数据库管理系统,使数据库技术日益渗透到企业管理、商业决策、情报检索等领域,微机的普及进一步推动了数据库技术走向更广大的用户群,使其成为实现和优化信息管理的有效工具。
进入21世纪,随着计算机网络技术的发展,人们对数据的联机处理提出了进一步的要求。互联网使数据库技术的重要性得到了充分的提升。一些新的领域如计算机集成制造、计算机辅助设计、地理信息系统等对数据库提出了新的需求,它们为数据库的应用开辟了新的天地,同时也直接推动了数据库技术的革新和发展。
如今,数据库技术的应用已经从最初某个特定领域的数据管理渗透到各行各业,无论是在超市购物,还是在图书馆检索馆藏书目,无论是在银行存取款,还是在网上预订火车票或飞机票,我们都或多或少会和数据库发生某些联系。这些应用都具有以下共同特点:①涉及的数据量大;②数据需要被长期保存;③数据需要被多个应用程序(或多用户)所共享。数据库技术已经成为信息系统的一个核心技术。没有数据库技术,人们在浩瀚的信息世界中将手足无措。
思考 :你的日常生活中,有哪些场景会应用到数据库技术?