数据库

数据库（database），简而言之可视为数字化的档案柜——储存电子档案的处所，使用者可以对档案中的资料执行新增、撷取、更新、删除等操作。

所谓“数据库”是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。一个数据库由多个表空间（Tablespace）构成。

## 技术初衷

在操作系统出现之后，随着计算机应用范围的扩大、需要处理的数据迅速膨胀。最初，数据与程序一样，以简单的文件作为主要存储形式。以这种方式组织的数据在逻辑上更简单，但可扩展性差，访问这种数据的程序需要了解数据的具体组织格式。当系统数据量大或者用户访问量大时，应用程序还需要解决数据的完整性、一致性以及安全性等一系列的问题。因此，必须开发出一种系统软件，它应该能够像操作系统屏蔽了硬件访问复杂性那样，屏蔽数据访问的复杂性。由此产生了数据管理系统，即数据库。

## 数据库管理系统

数据库管理系统（Database Management System，简称DBMS）是为管理数据库而设计的电脑软件系统，一般具有储存、撷取、安全保障、备份等基础功能。数据库管理系统可以依据它所支援的数据库模型来作分类，例如关联式、XML；或依据所支援的电脑类型来作分类，例如服务器群集、移动电话；或依据所用查询语言来作分类，例如SQL、XQuery；或依据性能冲量重点来作分类，例如最大规模、最高执行速度；亦或其他的分类方式。不论使用哪种分类方式，一些DBMS能够跨类别，例如，同时支援多种查询语言。

## 数据库的分类

随着数据库技术与其他分支学科技术的结合，出现了多种新型数据库，例如：与分布处理技术结合产生的分布式数据库、与并行处理技术结合产生的并行数据库、与人工智能结合产生的演绎数据库、与多媒体技术结合产生的多媒体数据库。另外，数据库技术应用于特定的领域，出现了工程数据库、地理数据库、统计数据库、空间数据库等特定领域数据库。

### 关系数据库

- MySQL
- MariaDB（MySQL的代替品，维基媒体基金会项目已从MySQL转向MariaDB）
- Percona Server（MySQL的代替品）
- PostgreSQL
- Microsoft Access
- Microsoft SQL Server
- Google Fusion Tables
- FileMaker
- Oracle数据库
- Sybase
- dBASE
- Clipper
- FoxPro
- foshub

几乎所有的数据库管理系统都配备了一个开放式数据库连接（ODBC）驱动程式，令各个数据库之间得以互相整合。

### 非关系型数据库（NoSQL）

- BigTable（Google）
- Cassandra
- MongoDB
- CouchDB
- Redis

#### 键值数据库

- Apache Cassandra（为Facebook所使用）：高度可扩展
- Amazon DynamoDB
- LevelDB（Google）

## 数据库技术的发展

随着互联网的普及，数据库使用环境也随之发生变化，这种变化主要体现为XML和Java技术的大量使用、要求支持各种互联网环境下的应用服务器、极容易出现大量用户同时访问数据库、要求支持7x24小时不间断运行和高安全性等。

为解决由于这些变化所带来的新问题，数据库管理系统也逐渐产生变化，包括：

- 网络化的大型通用数据库管理系统的出现

由于网络应用程序的用户数量无法预测，这就要求数据库相比以前拥有能处理更大量的数据以及为更多的用户提供服务的能力，即更好的可伸缩性及高可用性，因此，能够支持Internet的数据库应用已经成为数据库系统的重要方面，学术界及各主流数据库公司都将大型通用数据管理系统作为主要发展方向。例如Oracle公司从 8 版起全面支持互联网应用，微软公司更是将 SQL Server 作为 其整个 .NET计划中的一个重要的成分。

- 数据库安全系统及技术的提升

由于数据库系统在现代计算机系统中的地位越来越趋于核心的地位，数据库系统的安全问题自然受到越来越多的关注。在目前各国所引用或制定的 一系列安全标准中，最重要的两个是由美国国防部制定的《可信计算机系统的评估标准》(简称TCSEC)和《可信计算机系统的评估标准关于可信数据库系统的解释》(简称 TDI)。目前，所有数据库的开发必须遵从相应的安全标准。

- XML及Web数据管理技术的普及

随着越来越多的Web应用，如电子商务、数字图书馆、信息服务等采用XML作为数据表现形式、越来越多网站采用XML作为信息发布的语言，以XML格式数据为主的半结构化数据逐步成为网上数据交换和数据表示的标准。而XML具有如下的一些特征：面向显示、半结构化和无结构、不同形式的数据源，动态变化以及数据海量等。因此，支持这种结构松散、形式多样、动态变化的海量数据的存储、共享、管理、检索，成了数据库技术的大势所趋。

Web数据管理是一个很松散的概念，大体上它是指在Web环境下对各种复杂信息的有效组织与集成，进行方便而准确的信息查询和发布。当前Web数据管理的研究开发方向主要包括：半结构化数据管理、Web数据查询、Web信息集成、XML数据管理等。到目前为止，XML 与 Web 数据管理的研究工作中主要集中在如下的一些方面。

- 半结构化数据
- Web数据查询
- XML相关标准
- XML数据管理
- 嵌入式移动数据库技术

随着移动通信技术的迅速发展和投入使用，加上移动智能电话、移动计算机的大量普及，国内外许多研究机构都展开了对移动数据库的研究，并取得了许多有价值的成果。移动数据库技术涉及数据库技术、分布式计算技术以及移动通信技术等多个学科领域，具有较高的学术起点。

## 数据库模型

- 物件模型
- 层次模型（轻量级数据访问协议）
- 网状模型（大型数据储存）
- 关系模型
- 面向对象模型
- 半结构化模型
- 平面模型（表格模型，一般在形式上是一个二维阵列。如表格模型数据Excel)

### 架构 (Schema)

数据库的架构可以大致区分为三个概括层次：内层、概念层和外层。

- 内层：最接近实际储存体，亦即有关资料的实际储存方式。
- 外层：最接近使用者，即有关个别使用者观看资料的方式。
- 概念层：介于两者之间的间接层。

### 数据库索引

资料索引的观念由来已久，像是一本书前面几页都有目录，目录也算是索引的一种，只是它的分类较广，例如车牌、身份证字号、条码等，都是一个索引的号码，当我们看到号码时，可以从号码中看出其中的端倪，若是要找的人、车或物品，也只要提供相关的号码，即可迅速查到正确的人事物。

另外，索引跟字段有着相应的关系，索引即是由字段而来，其中字段有所谓的关键字段（Key Field），该字段具有唯一性，即其值不可重复，且不可为"空值（null）"。例如：在合并资料时，索引便是扮演欲附加字段资料之指向性用途的角色。故此索引为不可重复性且不可为空。

### 数据库事务

事务（transaction）包含一组数据库操作的逻辑工作单元，在事务中包含的数据库操作是不可分割的整体，这些操作要么一起做，要么一起回滚（Roll Back）到执行前的状态。

事务的ACID特性：

- 原子性（atomicity）
- 一致性（consistency）
- 隔离性（isolation）
- 持续性（durability）

事务的并发性是指多个事务的并行操作轮流交叉运行，事务的并发可能会存取和存储不正确的数据，破坏交易的隔离性和数据库的一致性。

### 网状数据模型的数据结构

#### 网状模型

满足下面两个条件的基本层次联系的集合为网状模型。

- 允许一个以上的结点无双亲。
- 一个结点可以有多于一个的双亲。