1.2.2 文件系统阶段
在20世纪50年代后期至20世纪60年代中期,计算机的存储技术得到了很大的发展,大容量存储设备——硬盘等直接存取设备的出现,使得数据可以长期保存在磁盘上。这不仅提高了计算机的输入输出能力,也大大推动了软件技术的发展。操作系统和高级程序语言的出现使数据处理迈上了一个新的台阶。操作系统中的文件系统以文件的形式对数据进行统一的管理。数据被组织成文件存储在外存,且文件格式多样。操作系统为用户使用文件提供了友好的界面。如图1.9所示,文件的逻辑结构与物理结构分离开了,用户只需要通过文件名——由文件系统负责找到该文件名对应的物理地址——就可以实现对数据的存储、检索、插入、删除和修改。数据可以以文件为单位被多个应用程序共享,数据和应用程序之间有了一定的独立性。有了文件系统,计算机的数据管理就得到了极大的改善,这使得计算机的应用领域从科学计算扩展到企业信息管理。
图1.9 文件系统的文件访问原理
然而,这种数据管理技术也存在不足之处。以校园信息管理系统为例,学校各个部门职能不同,需要对学生的部分相关信息进行存储和管理。教务处主管教务,建立了“教务”文件,以存储与教务相关的信息,如学生的学号、姓名、性别、班级、电话、课程号、课程名、成绩等信息;保卫处负责校园门禁管理和人员的户籍管理,建立了“户籍”文件,以存储学生的学号、姓名、性别、班级、籍贯、户口所在地、电话等信息;校医院则建立了“健康”文件来记录学生的健康状况,如学生的学号、姓名、性别、班级、身高、体重、药物过敏、电话等信息。“教务”文件、“户籍”文件和“健康”文件既存在部分相同的数据,如学生的学号、姓名、性别、班级、电话等,也各自存储着一些特有的数据,如图1.10所示。
图1.10 采用文件系统进行校园信息管理
每一个职能部门针对一个特定的应用独自建立一个文件时,数据缺乏统一的规范化标准,同一个数据,如学号,在“户籍”中可能是字符型的,在其他文件中却是数值型的;这些文件的格式可能是多种多样的。虽然文件内数据间的关联被记录了,但不同文件之间的数据关联却缺乏记录。因此,要实现一些复杂问题的查询,就要编写程序。
文件系统中应用程序与数据分离(见图1.11)。由于一个文件对应一个应用,尽管不同部门所需数据有部分是相同的,仍需建立各自的文件,数据不能共享,这就导致了大量数据重复存储,如学生的基本信息(学生的学号、姓名、性别、班级、电话等)要记录三次,浪费存储空间。我们把这种在一个以上位置不必要地重复存储数据的现象称为数据冗余(Data Redundancy)。数据冗余问题会随着学生人数的增加而变得越发严重。
数据冗余不仅浪费存储空间,而且会导致数据不一致(Data Inconsistency)和数据异常(Data Abnormally)。所谓数据不一致,是指本应相同的数据在不同的位置上出现不同且相互冲突的版本。数据异常则可简单地理解为数据的不正常。例如,学生张怡在大二时转专业了,教务处在“教务”文件中对其班级进行了更新,但保卫处和校医院不知情,因此“户籍”和“健康”文件中记录的张怡依旧属于原班级。这是由于数据更新没有在这三个文件中统一执行而导致的数据不正常。我们把这种数据更新所引发的数据异常称为更新异常。在某新生入学时,教务处在“教务”文件中增加了一条记录,若“户籍”和“健康”文件中没有同时增加该学生的信息,就会导致该学生的信息缺失。我们把这种数据插入所引发的数据异常称为插入异常。同理,由于没有统一执行数据删除而导致的数据异常称为删除异常。由此可见,数据冗余会导致数据不一致和数据异常,进而增加数据修改和维护的难度。此外,文件系统以文件为基本单位存储数据,在数据安全保密方面无法做到更细的粒度,可采取的安全保密措施十分有限。
图1.11 文件系统中应用程序与数据分离
思考:既然数据冗余会带来这么多问题,有没有方法可以降低数据冗余?全校众多部门共同保存一份学生基本信息是否可行?