数据库是一种按照某种类型结构形式来组织、存储和管理数据的存储空间,数据库中存在大量的数据集合体,数据集合体可以长期存储在计算机内以实现信息共享、高效存取等操作,同时数据集合体之间受数据库系统机制的相关约束。
数据库经过半个多世纪的发展,从概念的提出到早期的数据库模型,再到流行至今的关系型数据库,发展速度非常迅速,各类新技术层出不穷,规模与使用量也越来越大,在信息技术领域占据核心位置。总的来说数据库的发展可分为人工管理阶段、文件系统阶段、数据库系统阶段。
1.1.1 数据库发展历程
在现代意义的数据库出现之前,人们通过人工和文件系统的方式来存储、管理数据。在人工管理阶段,人们常使用穿孔纸带来管理数据,虽然穿孔纸带不具备电子化特征,不能被称为数据库,但其代表着人们在数据存储结构上思考和实践的结果,是数据库发展的预备阶段。
随着数据量的增多以及计算机技术、存储技术的快速发展,穿孔纸带这一纸质存储媒介很快就被磁盘、磁鼓等磁性存储设备所取代。在软件方面,操作系统中也出现了专门管理数据的软件,被称为文件系统。
文件系统可以说是最早的数据库了,操作系统提供的文件管理方法使得程序可以通过文件名来访问文件中的数据,不必再寻找数据的物理位置。相较于手工处理的方式,文件系统使管理数据变得简单一些,不需要再翻来覆去地查找文件的位置,但是文件内的数据仍然没有组织起来,程序员需要尝试构造出数据与数据的关系,再编写代码才能从文件中提取关键数据。除数据结构和数据关系不完整的问题外,此时的数据只面向某个应用或者某个程序,数据的共享性也有一定的问题。
虽然文件系统的出现,使得数据可以长期保存,但仍然存在共享能力差、数据不具独立性等缺点。随着数据量的增长以及企业对数据共享的要求越来越高,人们开始提出数据库管理系统(Database Management System,DBMS)的概念,对数据模型展开了更深层次的思考。
20世纪60年代后期以来,随着计算机管理的对象规模越来越大,应用范围也越来越广泛,数据量急剧增长,同时多种应用、多种语言互相覆盖共享数据集合的要求越来越强烈,数据库技术便应运而生,出现了统一管理数据的专门软件系统——数据库管理系统。
在最近的几十年里,数据库的发展更是突飞猛进,并衍生出了各种各样的类型,适用于不同业务场景的数据库系统,例如:关系型数据库、图形数据库、对象数据库、文档数据库等。
数据库系统(Database System,DBS)一般由4部分组成,分别是数据、硬件、软件、人员,各个部分之间相互协作,共同支撑起整个数据库管理系统各种复合功能,其组成结构如图1-1所示。
图1-1 数据库系统组成结构
数据是指长期存储在计算机内的、有组织、可共享的数据集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为不同用户共享。数据作为一种资源是数据库系统中最稳定的部分,即使在硬件更新,甚至在软件更新的情况下,只要存储介质有效,数据也将是长期存在的。
数据库系统的硬件包括计算机的主机、键盘、显示器和外围设备,例如打印机、硬盘、光盘机、磁带机等。由于一般数据库系统所存放和处理的数据量很大,加之DBMS丰富的功能软件,使得自身所占用的存储空间很大,因此整个数据库系统对硬件资源提出了很高的要求。
软件包括数据库管理系统及应用程序,DBMS是数据库系统的核心软件,它在操作系统的支持下工作,解决如何科学地组织和存储数据,如何高效获取和维护数据的系统软件,其主要功能包括数据定义功能、数据操纵功能、数据库的运行管理和数据库的建立与维护等。
数据库系统的相关人员,主要有4类。
第一类为数据库设计人员,负责数据库中数据的确定、数据库各级模式的设计。
第二类为应用程序员,负责编写使用数据库的应用程序,这些应用程序可对数据进行检索、建立、删除或修改。
第三类为最终用户,他们利用系统的接口或查询语言访问数据库。
第四类为数据库管理员(Database Administrator,DBA),负责数据库的总体信息控制。数据库管理员的职责通常包括以下几点:维护数据库中的信息内容和结构,制定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,负责数据库的性能改进、数据库的重组和重构,以提高系统的性能。
数据集是数据库中最核心的要素,也是基本的操作对象,在数据库中以数据表的形式来组织和管理数据,以各种数据类型来定义数据在计算机中的存储格式,以主外键的方式来标识数据表中信息的唯一性及关联性,以SQL语言来检索、存取数据集。
SQL语言是结构化查询语言(Structured Query Language)的简称,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL是一种综合的、通用的、功能极强的关系数据库语言。
1974年,Boyce和Chamberlin提出SQL语言的实现思想,并随后在IBM公司研制的关系数据库系统上实现。由于它具有功能丰富、使用方便灵活、语言简洁易学等突出的优点,深受计算机业界和计算机用户的欢迎。
SQL语言核心部分的原理是关系代数学,具有数据定义、数据操纵和数据控制的功能,包含6大语言模块。
数据查询语言用于从表中获得数据,确定数据怎样在应用程序给出。SELECT命令是所有SQL操作中使用最频繁的命令,除此外还包含WHERE、ORDER BY、GROUP BY、HAVING等操作命令。
数据操作语言规定了对数据表的写操作语句,包括动词INSERT、UPDATE、DELETE,分别用于对数据表中记录的添加、修改和删除操作。数据操作语言只能操作表中的数据记录,不能变更表的列字段结构。
事务控制语言规定了对数据表的事务控制操作语句,可确保数据表中记录更新的实时性与准确性,通过COMMIT、SAVEPOINT、ROLLBACK等操作命令来保证数据表中数据的完整性。
数据控制语言规定了对表的权限控制操作语句,包括动词GRANT、REVOKE,以控制外部用户以及用户组对数据库对象的访问,在某些关系型数据库管理系统中可实现对数据表中单个列的访问控制。
数据定义语言规定了对表的构建操作语句,包括动词CREATE、ALTER、DROP,以实现在数据库环境中创建数据表、修改表结构、删除表结构等,添加索引等与数据表相关的构建操作。
指针控制语言规定了SQL语句在宿主语言程序中的使用规则,是SQL语言的分类之一。指针控制语言包含了DECLARE CURSOR、FETCH INTO、UPDATE WHERE CURRENT等语句,用于对一个或多个表中单独行的操作。
数据表是数据库中主要的数据存储容器,表中的数据被组织成行和列。表中的每一列代表一种属性数据,称为字段,表中每列均有一个名称为数据表的字段名称,每列都具有一个指定的数据类型和容量大小。表中的一行代表一条信息数据,与Excel表格中的一行数据类似。如果从用户的角度来看,数据表的逻辑结构就是一张平面的二维表,包含纵向坐标(列)与横向坐标(行)两部分。
如图1-2所示,在数据表结构形式中,最上面的一行是数据表的字段名称,从第二行开始即为数据表中相关记录,每一行代表一条完整的数据记录,数据表中的每一列,除最上面的字段名称外,均为表中的一个数据列,代表这个字段在每一行记录中的数据值。
图1-2 数据表的结构形式
数据类型是数据表中数据种类的定义,代表了不同的信息类型,数据类型决定了数据在磁盘中的存储格式。一般来说,数据库中的数据类型有数值类型(INTEGER、FLOAT、DOUBLE等)、日期类型(YEAR、DATE、DATETIME、TIMESTAMP等)、字符类型(CHAR、VARCHAR、TEXT等)。
图1-3描述了一个数据表的各字段的相关数据类型,可以看到每个字段均需要声明一个数据类型属性,如“user_id”字段声明为“INTEGER”类型数据,“user_name”“pass_word”“email”“phone”等字段则声明为“VARCHAR”类型数据。
图1-3 数据表中字段的数据类型