- NoSQL数据库原理
- 侯宾
- 1647字
- 2025-03-29 00:36:49
1.1.1 关系型数据库管理系统
一般来说,数据库管理系统一般会提供数据的定义、操作、组织、存储和管理,以及数据库的通信、管理、控制和保护等功能,具体包括以下功能。
(1)数据定义:提供数据定义语言(Data Definition Language,DDL),用于建立、修改数据库的库、表结构或模式,将结构或模式信息存储在数据字典(Data Dictionary)之中。
(2)数据操作:提供数据操作语言(Data Manipulation Language,DML),用于增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)数据(合称CRUD操作)。
(3)数据的持久存储、组织和维护、管理:能够分类组织、存储和管理各种数据,可以实现数据的加载、转换、重构等工作;能够将大量数据进行持久化存储,能够监控数据库的性能。
(4)保护和控制:可以支持多用户对数据并发控制,支持数据库的完整性、安全性,支持从故障和错误中恢复数据。
(5)通信与交互接口:可以实现高效存取数据(例如查询和修改数据),可以实现数据库与其他软件、数据库的通信和互操作等功能。
历史上第一批商用的数据库管理系统诞生于20世纪60年代,这些系统一般基于层次模型或网状模型:例如IBM公司研发的、基于网状模型的信息管理系统(Information Management System,IMS)等。这些数据库系统的出现,改变了过去采用人工方式或文件方式管理数据的落后方式,提高了数据管理的效率,实现了更强大的数据访问方法,以及提供了细粒度的数据定义和操作方法,但这些数据模型需要使用者(通常是程序员)对数据格式具有深入的了解,且不支持高级语言,这使得数据操作的难度很大。
1970年,IBM公司圣何塞实验室的埃德加·弗兰克·科德(Edgar Frank Codd,1923-2003)发表了名为“大型共享数据库的数据关系模型”(A Relational Model of Data for Large Shared Data Banks)的论文,首次提出数据库的关系模型。科德认为:在基于关系模型的数据库系统中,使用者不需要关心数据的存储结构,只需要通过简单的、非过程化的高级语言(例如SQL语句)就可以实现数据定义和操作,这样大大简化了数据操作的方法,提高了数据操作的效率。为了实现这一目的,数据的存储将独立于硬件,呈献给用户的则是被称为“关系”的、由行和列组成的二维表结构,如图1-1所示。

图1-1 一个典型的关系型数据表结构描述
上述关系模型一般包括关系数据结构、数据关系操作和数据完整性约束三个基本组成部分。
(1)在关系数据结构中,实体和实体间联系都可以通过关系(即二维表)的方式来表示。我们可以通过实体关系模型(Entity-Relationship Model)来描述这些内容。
(2)在数据关系操作中,可以通过关系代数中的并、交、差、除、投影、选择、笛卡尔积等方式完成对数据集合(而不仅仅是单条记录)的操作。
(3)在数据完整性约束中,关系模型必须对实体完整性和参照完整性进行约束,数据库系统应当提供完整性的定义与检验机制,此外,用户还可以定义并检验与业务有关的完整性约束,这并非是强制要求。
建立在关系模型基础上的数据库管理系统,称之为关系型数据库管理系统(Relational Database Management System,RDBMS)。1976年,第一个商用关系数据库系统问世。随后涌现出Oracle公司的Oracle RDBMS、微软公司的MS SQL Server、IBM公司的DB2,以及开源的MySQL数据库等诸多优秀的关系型数据库产品。
早期的网状和层次数据库被称为第一代数据库系统,关系型数据库则被称为第二代数据库系统。目前,关系型数据库的理论、相关技术和产品都趋于完善,但也仍在持续发展中,关系型数据库系统也是目前世界上应用最广泛的数据库系统,广泛应用在各行各业的信息系统当中。
除了提供数据库管理系统的一般功能,关系型数据库一般还会提供对事务(Transaction)的支持。事务是指一组数据操作必须作为一个整体来执行,这一组操作要么全部完成,要么全部取消。关系型数据库中的事务正确执行,需要满足原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,此外,关系型数据库需要提供事务的恢复、回滚、并发控制、死锁解决等问题。
1990年,美国的高级DBMS功能委员会提出了“第三代数据库系统”的概念,希望以关系型数据库为基础,支持面向对象等特性,以及支持更多、更复杂的数据模型。第三代数据库系统没有统一的数据模型,存在多种技术路线和衍生产品,但从技术成熟度和产品影响力上都没达到关系型数据库的水平。