1.1 数据库系统的相关概念
数据库系统是对应用了数据库技术的计算机系统的一种概称,因此数据库技术基本都包含在数据库系统的范畴中。数据库系统的相关概念在现实应用中很容易混淆,也是人们学习数据库技术必须首先要了解和区分的对象。
1.1.1 数据
第一个基本概念是数据。数据是数据库中存储和管理的基本对象。在现实生活中,我们对数据这个名词并不陌生,例如“财务数据”和“采购数据”等都是我们经常会听到或接触到的。那么,什么是数据?下面给出数据的定义。
定义1.1(数据):数据是人们用来反映客观世界而记录下来的可以鉴别的符号。
这个定义的核心意思是“数据是符号”。之所以强调这一点,是因为数据库系统除了存储和管理数据之外,还同时管理另一些内容(例如后面马上要介绍的模式)。
由于现实世界中存在不同类型的符号,因此数据也可分为两种基本类型:数值数据和非数值数据。数值数据记录了由0到9这几个阿拉伯数字所构成的数值,例如职工张三的年龄是一个数值数据,学生李四的英语成绩也是数值数据。非数值数据则包括像字符、文字、图像、图形、声音等特殊格式的数据。在实际应用中,非数值数据也很常见,例如人的姓名(字符)、照片(图像)等。现有的数据库技术可以同时支持数值数据和非数值数据的存储和管理。
在实际应用中,如果仅存储数据一般来说是没有什么意义的。这是因为数据本身只是符号而已,而同样的符号在不同的应用环境中可能会出现完全不同的解释。例如,“65”这一数据在教学管理系统中可能代表了某名学生某门课程的成绩,在职工管理系统中可能表示的是某个职工的体重,而在学生管理系统中还可能是计算机系2011级的学生人数。因此,数据与其代表的语义是不可分的,在存储数据的同时必须说明数据所代表的语义。
除了“93”和“张三”这类表示单一值的简单数据外,现实生活中还存在复合数据。复合数据是由若干简单数据组合而成的。例如,学生记录(李明,197205,中国科学技术大学,1990)就是由简单数据“李明”“197205”“中国科学技术大学”和“1990”构成的一个复合数据。复合数据同样也和其语义是不可分的。像上面的学生记录,其语义在不同应用环境下可能完全不同,例如在高校毕业生管理系统中它可能表示学生姓名、出生年月、所在学校和毕业年份这样的语义,而在另一个系统中它则可能表示学生姓名、出生年月、录取大学和入学时间另一种语义。
1.1.2 数据库
简单来讲,数据库是一个数据的仓库,它存储着数据的集合。但是,这种定义还不够确切,因为数据库中的数据并不是随便存放的,而是有一定的组织和应用特点的。严格的数据库概念定义如下。
定义1.2(数据库):数据库(database,DB)是长期存储在计算机内、有组织的、可共享的大量数据的集合。
这个定义指出了数据库的几个特点。
1)数据库是数据的集合,因此数据库只是一个符号的集合,本身是没有语义的。
2)数据库中的数据不是杂乱无章存放的,而是有组织的。确切地说,是按一定的数据模型组织、描述和存储的。
3)数据库中存储的数据量通常是海量的。如果是少量的数据,通常不需要使用数据库技术来管理,借助文件系统就可以实现。实际上,存储的数据量越大,越能体现数据库技术相对于文件系统的优势。
4)数据库通常是持久存储的,即存储在磁盘等持久存储介质上。
5)数据库一般是被多用户共享的。换句话说,如果一个数据集合只是为单用户服务的(例如手机中的通讯录),那么依靠传统的文件系统等数据管理技术基本可以满足要求。只有在多用户共享的环境中,才能充分发挥数据库技术的优点。目前,除了少数专用的数据库产品外,绝大多数商用数据库产品都是面向多用户应用的。
6)数据库一般服务于某个特定的应用,因此数据间联系密切,具有较小的冗余度和较高的独立性。现实世界中有银行数据库、航班数据库、图书数据库等面向特定应用的数据库,但是不存在通用的数据库。即便都是图书数据库,不同的应用环境对数据组织、数据存储等也会有不同的要求。例如,某学校的图书数据库中需要存储每一种图书的供应商,而另一个学校则可能不需要存储。这些都会影响数据库中数据的表示和组织方式。因此,可以说,数据库一般都是专门针对某个特定应用的。
1.1.3 数据库模式
由于数据库本质上是数据的集合,因此它也是符号的集合,本身是没有语义的。数据库的语义可以用另一个概念——数据库模式(database schema)来表达。数据库模式的定义如下。
定义1.3(数据库模式):数据库模式是数据库语义的表达,它是对数据库中全体数据的逻辑结构和特征的描述。
图1-1显示了数据库与数据库模式之间的关系。两者之间的关系与“数据”和“数据的语义”之间的关系是类似的。实际上,因为数据库本身就是数据的集合,因此数据库中所有数据的语义就构成了数据库的语义,即数据库模式。
图1-2给出了数据库与数据库模式的一个例子。在这个例子中,假设数据库中只存储了学生数据。图1-2的左边显示了使用关系数据模型表示的数据库结构与内容(如前所述,数据库中的数据一般都是按某种数据模型进行组织的),右边则分别显示了对应的数据库和数据库模式。关系数据模型是目前最流行的数据模型(现有的商用数据库产品基本都基于关系数据模型),它的基本数据结构就是图1-2左边显示的二维表格。二维表格本身包含了表头和下面的数据行,从概念上讲,二维表格的表头表示了下方数据行的语义,所对应的结构就是此二维表格的模式(由于假设数据库中只有这一个表,因此此模式就是数据库的模式),而下方的数据行集合则构成了数据库——它是数据的集合。
图1-1 数据库与数据库模式之间的关系
图1-2 数据库与数据库模式示例
1.1.4 数据库管理系统
第四个概念是数据库管理系统。下面给出数据库管理系统的定义。
定义1.4(数据库管理系统):数据库管理系统(database management system,DBMS)是一个计算机软件,它用于创建和管理数据库。
数据库管理系统从软件的分类上属于计算机系统软件。系统软件一般是管理计算机资源的软件。常见的系统软件有操作系统、数据库管理系统等。同样是系统软件,操作系统管理计算机中的全部资源,包括处理器、存储器、外设等,而数据库管理系统则只管理计算机中的数据资源。操作系统本身也有数据管理的能力,即文件管理功能,但正是因为操作系统的文件管理功能在管理大规模共享数据时容易出现存取性能差、数据不一致等问题,所以才有了数据库管理系统。可以这么理解,数据库管理系统是一种专门用于高效管理数据资源的系统软件。
通常情况下,数据库管理系统运行在操作系统之上。也就是说,当涉及底层的磁盘操作时,数据库管理系统通常利用操作系统提供的磁盘存取服务来实现底层数据的存取。目前,大多数的商用DBMS都采取了这种方式。但是,理论上,数据库管理系统也可以完全绕过操作系统提供的数据输入/输出(Input/Output,I/O)服务,直接跟底层的磁盘打交道。现在一些大型的DBMS如IBM DB2、Sybase ASE等已经可以支持这种数据访问方式。此外,DBMS通常不直接面向应用。作为系统软件,其职责在于管理和维护数据资源。同时,用户可以在DBMS之上创建直接服务于应用的数据库应用系统(或称数据库应用软件),从而构建基于数据库技术的应用软件,满足实际应用的需求。图1-3显示了用户应用、DBMS和操作系统之间的层次架构。
图1-3 用户应用、DBMS和操作系统之间的层次架构
由于数据库中的数据需要按某种逻辑结构进行组织,因此任何一个DBMS在实现时必须基于某种数据模型(数据模型描述了数据的逻辑组织结构、操作等内容,此部分内容将在后面详细讨论),以保证所管理的数据库都能够按照统一的逻辑结构进行存取。例如,目前常见的DBMS如Oracle、Microsoft SQL Server等都是基于关系数据模型的,因此也被称为关系DBMS;而另一些DBMS,如Versant、O2等是基于面向对象数据模型的,通常称它们为面向对象DBMS。正是因为数据模型决定了DBMS中数据的组织和操作方法,所以基于什么样的数据模型成为区分数据库管理系统的最主要因素。
在实际应用中常见到的一些数据库产品,如Oracle、Microsoft SQL Server等,从严格意义上讲都是DBMS。但随着计算机软件技术和应用的不断发展,现在的Oracle、Microsoft SQL Server已经不单纯是DBMS,而是一套以DBMS为核心的套件。也就是说,它们不仅提供了DBMS的核心功能,还提供了其他一些软件功能,例如数据的导入/导出、备份管理等。这一点与C++和Visual C++的区别有点类似。C++好比是DBMS,而Visual C++好比是Oracle等各种大型商用数据库软件,虽然Visual C++提供了多种多样的开发功能,但C++是其核心,其本质仍然是C++开发工具。在实际生活中,只要知道Oracle、Microsoft SQL Server这些产品的本质是DBMS就可以了。
图1-4显示了DB-Engines网站(https://db-engines.com)上排名前十的DBMS(截至2021年12月)。可以看到,Oracle、MySQL、Microsoft SQL Server仍是最受欢迎的三大DBMS产品。列表中还包括了MongoDB、Redis等NoSQL数据库系统,本书将在后面对它们进行介绍。
需要注意的是,DB-Engines主要根据互联网上DBMS受欢迎程度的信息对DBMS进行排名。排名依据以下五个因素:
1)Google及Bing搜索引擎中的关键字搜索数量。
2)Google Trends中的关键字搜索数量。
3)Indeed网站的职位搜索量。
4)LinkedIn上提到关键字的个人资料数。
5)Stackoverflow上的相关问题和关注人数。
因此,DB-Engines的DBMS排名只代表了互联网中各个DBMS的受关注程度,某种意义上可以看作“热度排名”。这一排名没有包括实际的DBMS产品销售和装机数据,另外也没有考虑我国市场的影响(例如没有考虑我国用户主要使用百度中文搜索引擎),因此仅具有参考价值。另一方面,要给出一个综合各种因素的DBMS综合排名有较大的难度,因为各类数据的获取存在困难。
图1-4 DB-Engines网站上排名前十的DBMS
1.1.5 数据库系统
最后一个重要的概念是数据库系统。数据库系统是一个泛指的概念,其定义如下。
定义1.5(数据库系统):数据库系统(database system,DBS)是指在计算机系统中引入了数据库后的系统,即采用了数据库技术的计算机系统。
数据库系统与其他计算机系统的区别在于,它是以数据库为基础的。现实中所见的许多系统,例如银行信息系统、电子政务系统等都可以称为数据库系统,因为它们背后都有DBMS和数据库的支持。随着应用数据类型和数据量的不断增长,在计算机系统中采用数据库技术来管理数据已经成为一种普遍性的解决方案,因此数据库系统在实际应用中已经非常普及。
作为一个计算机系统,数据库系统同样包含了软件、硬件、用户等要素。一个数据库系统通常包括计算机硬件平台、操作系统、DBMS(及数据库)、应用程序及用户。图1-5给出了数据库系统的组成。
在图1-5中,数据库系统中的用户分为两种类型:终端用户与数据库管理员(database administrator,DBA)。从图中可以看到,终端用户直接与应用程序交互,而数据库管理员则直接跟DBMS打交道。终端用户相当于银行的前台柜员,而数据库管理员则好比是银行数据库系统的管理员和维护人员,他们负责管理和维护数据库系统的正常运行。通常,数据库管理员会通过对DBMS的一些参数进行配置和调优,或者利用DBMS提供的一些管理功能,如备份、监控、访问控制等,进行系统维护。
数据库、数据库管理系统、数据库系统这三个概念在实际应用中容易混用。不过,如果在上下文语义清晰的情况下,可以用“数据库”来指代数据库管理系统或者数据库系统。举个例子,“你们上机用什么数据库啊?”“Oracle 12g。”在这一场景下,“数据库”指的是数据库管理系统的概念。但是,如果在论文或者其他规范化文档的写作中,则要求严格区分这些概念,保证论文的严谨性。例如,不能将“高校信息化数据库的设计”混淆为“高校信息化数据库管理系统的设计”,前者是指数据库的设计,而后者是指数据库管理系统的设计,两者的内涵和难度不是一个量级的。
图1-5 数据库系统的组成