2.2 数据库的分类
早期比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库和关系数据库。而在如今的互联网中,最常用的数据库模型主要有两种,即关系数据库和非关系数据库。
2.2.1 关系数据库
关系模型是最重要的一种数据模型。
1.关系模型的数据结构
关系模型术语:
(1)关系:一个关系对应一张表。
(2)元组:表中的一行即为一个元组。
(3)属性:表中的一列即为一个属性,给每一个属性起一个名称即属性名。
(4)码:也称为码键,表中的某个属性组,它可以唯一确定一个元组。
(5)域:一组具有相同数据类型的值的集合,属性的取值范围来自某个域。
(6)分量:元组中的一个属性值。
(7)关系模式:对关系的描述。一般表示为:关系名(属性1,属性2,…,属性n)。
关系模型要求关系必须规范化,关系必须满足一定的规范条件,这些规范条件中最基本的就是关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。
2.关系模型的数据操纵与完整性约束
关系模型的数据操纵主要包括查询、插入、删除和更新数据,它的数据操纵是集合操作,操作对象和操作结果都是关系。
这些操作必须满足关系的完整性约束条件:实体完整性、参照完整性和用户定义的完整性。
3.关系模型的优缺点
(1)优点:关系模型建立在严格的数学概念的基础上;概念单一,无论实体还是实体之间的联系都是用关系来表示;对数据的检索和更新结构也是关系(也就是常说的表);它的存取路径对用户透明,从而具有更高的独立性、更好的安全保密性,简化了程序员在数据库开发中的工作。
(2)缺点:由于存取路径的隐蔽导致关系模型的查询效率低于格式化数据模型。
2.2.2 NoSQL非关系数据库
NoSQL非关系数据库的主要特点:
(1)NoSQL不是否定关系数据库,而是作为关系数据库的一个重要补充。
(2)NoSQL为了高性能、高并发而产生,忽略了影响高性能、高并发的因素。
(3)NoSQL典型产品特性包括Memcached(纯内存)、Redis(持久化缓存)和MongoDB(文档的数据库)。
2.2.3 内存数据库
传统的数据库管理系统是把所有的数据都放在磁盘上进行管理,所以称作磁盘数据库(Disk-Resident Database,DRDB)。磁盘数据库需要频繁地访问磁盘来对数据进行操作,由于对磁盘读写数据的操作一方面要进行磁头的机械移动,另一方面受到系统调用(通常通过CPU中断完成,受到CPU时钟周期的制约)时间的影响,当数据量很大、操作频繁且复杂时,内存数据库就会暴露出很多问题。
近年来,内存容量不断提高,价格不断下跌,操作系统已经可以支持更大的地址空间(计算机进入了64位时代),同时对数据库系统实时响应能力的要求也日益提高,充分利用内存技术提升数据库性能已经成为一个热点。
在数据库技术中,主要有两种方法来使用大量的内存。一种是在传统的数据库中,增大缓冲池,将一个事务所涉及的数据都放在缓冲池中,组成相应的数据结构来进行查询和更新处理,也就是常说的共享内存技术,这种方法优化的主要目标是最小化磁盘访问;另一种是内存数据库(Main Memory Database,MMDB,也叫主存数据库)技术,就是重新设计一种数据库管理系统,对查询处理、并发控制与恢复的算法和数据结构进行重新设计,以更有效地使用CPU周期和内存,这种技术几乎把整个数据库全部存放在内存中,因而会产生一些根本性的变化。两种技术的区别如表2-1所示。
表2-1 内存数据库和共享内存技术的区别
内存数据库系统带来的优越性不仅能在内存中进行读写比对磁盘,而且从根本上抛弃了磁盘数据管理的许多传统方式。基于全部数据都在内存中进行管理的新的体系结构的设计,由于在数据缓存、快速算法、并行操作方面进行了相应的改进,从而使数据处理速度比传统数据库的数据处理速度快很多,一般在10倍以上,理想情况甚至可以达到1000倍。
使用共享内存技术的实时系统和使用内存数据库相比还有很多的不足,由于共享内存技术优化的目标集中在最小化磁盘访问上,因此很难满足完整的数据库管理的要求,设计的非标准化和软件的专用性造成可伸缩性、可用性和系统的效率都非常低,对于快速部署和简化维护都是不利的。
2.2.4 网状和层次数据库
1.网状数据模型
网状数据模型的典型代表是DBTG(CODASYL)系统。
1)网状模型的数据结构
满足以下层次联系条件的集合为网状模型。
(1)允许一个以上的节点无双亲;
(2)一个节点可以有多个双亲。
☆注意☆ 层次模型实际上是网状模型的一个特例。
网状模型的数据结构如图2-2所示。
图2-2 网状模型的数据结构
2)网状模型的数据操纵与完整性约束
DBTG在数据定义语言中提供了数据库完整性的若干概念和语句,主要有:
(1)支持记录码的概念。唯一标识记录的数据项的集合称为码,例如学生的学号,不允许有两个相同的学号。
(2)保证一个联系中双亲记录和子女记录之间是一对多的联系。
(3)可以支持双亲记录和子女记录之间的某些约束条件。
3)网状模型的优缺点
(1)优点:网状模型能够更为直接地描述现实世界,如一个节点可以有多个双亲,节点直接可以有多种联系;具有良好的性能,存取效率较高。
(2)缺点:网状模型结构比较复杂。随着应用环境的扩大,数据库的结构就变得越来越复杂,网状模型的DDL、DML也更加复杂,并且要嵌入某一种高级语言(C、COBOL),因此用户不容易掌握和使用;由于记录之间的联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此用户必须了解系统结构的细节,加重了程序员编写应用程序的负担。
2.层次模型数据库
层次模型是数据库系统中最早出现的数据模型,层次数据库系统采用层次模型作为数据的组织方式。它采用树状结构来表示各类实体以及实体间的联系。
1)层次模型的数据结构
满足以下层次联系条件的集合为层次模型。
(1)有且只有一个节点,没有双亲节点,这个节点称为根节点;
(2)根以外的其他节点有且只有一个双亲节点。
层次数据库系统只能处理一对多的实体联系。因为在层次模型中,每个节点表示一个记录类型,记录类型之间的联系用节点之间的连线(有向边)表示,这种联系是父子之间的一对多的联系。
图2-3所示是一个层次模型的数据结构,它像一棵倒立的树,节点的双亲是唯一的。同一双亲的子女节点称为兄弟节点,没有子女节点的节点称为叶节点。
图2-3 层次模型的数据结构
层次模型的特点:任何一个给定的记录值只能按其层次路径查看,没有一个子女记录值能脱离双亲记录值而独立存在。
2)层次模型的数据操纵与完整性约束
层次模型的数据操纵主要有查询、插入、删除和更新,在进行这些操作时要满足完整性约束条件。
插入:如果没有相应的双亲节点值,不能插入它的子女节点值。
删除:如果删除双亲节点值,则相应的子女节点值也将同时被删除。
3)层次模型的优缺点
(1)优点:数据结构比较简单清晰,数据库的查询效率高,提供了良好的完整性支持。
(2)缺点:现实世界中很多联系是非层次性的,它不适用于节点之间多对多的联系;查询子女节点必须通过双亲节点;由于结构严密,层次命令趋于程序化。