数据库系统(DataBase System, DBS)是一个采用了数据库技术,有组织地、动态地存储大量相关联数据,从而方便多用户访问的计算机系统。广义上讲,DBS包括了数据库管理系统(DBMS)。
数据库(DataBase, DB)是统一管理的、长期储存在计算机内的,有组织的相关数据的集合。
DBMS实现了对共享数据有效地组织、管理和存取。DBMS功能主要包括:
1. 数据定义。
提供数据定义语言(DDL),可以对数据库的结构进行描述。
2. 数据库操作。
向用户提供数据操纵语言(DML),实现对数据库中数据的增删改查。
3. 数据库运行管理。
包括多用户环境下的并发控制、安全性检查和存取控制、完整性检查和执行、运行日志的组织管理、事务管理和自动恢复等。
4. 数据组织、存储和管理。
包括数据字典、用户数据和存取路径等。
5. 数据库的建立和维护。
包括数据库的初始建立、数据的转换、数据库的转储和恢复、数据库的重组和重构、性能监测和分析等。
从数据库管理系统的角度,数据库分为三级模式:
1. 外模式。
2. 概念模式。
3. 内模式。
(不是很懂你们数学好的人)
关系的描述称为关系模式,可以形式化地表示为:
R(U, D, dom, F)
其中,R表示关系名;U是组成该关系的属性名集合;D是属性的域;dom是属性向域的映像集合;F为属性间数据的依赖关系集合。
通常将关系模式简记为:
R(U)或R(A1, A2, A3, ..., An)
其中,R为关系名,A1, A2, A3, ..., An为属性名或域名。
数据库设计属于系统设计的范畴。通常把使用数据库的系统统称为数据库应用系统,把对数据库应用系统的设计简称为数据库设计。
一般将数据库设计分为如下六个阶段:
1. 用户需求分析。
综合各个用户的应用需求,对现实世界要处理的对象(组织、部门和企业等)进行详细调查,在了解现行系统的概况,确定新系统功能的过程中,收集支持系统目标的基础数据及处理方法。
2. 概念结构设计。
目标是产生反映系统信息需求的数据库概念结构。
描述概念模型的较理想的工具是E-R图。
3. 逻辑结构设计。
主要工作步骤包括确定数据模型(如关系模型)、将E-R图转换成指定的数据模型(如关系模式)、确定完整性约束和确定用户视图(根据用户类别确定不同用户使用的视图)。
4. 物理结构设计。
主要工作步骤包括确定数据分布(集中管理还是分布式管理?)、存储结构(B+树等)和访问方式(建立索引)。
5. 数据库实施。
根据逻辑和物理设计的结果,在计算机上建立起实际的数据库结构,数据加载,进行试运行和评价的过程,叫作数据库的实施。
6. 数据库运行和维护。
主要内容包括对数据库性能的监测和改善、故障恢复、数据库的重组和重构。
在应用系统中,需要高级程序语言来完成与用户之间的交互,用户不能直接访问后台的数据库,因此数据库管理系统需要提供程序级别的接口来访问数据。
常见应用程序与数据库的数据交互方式有库函数、嵌入式SQL、通用数据接口标准和对象关系映射(Object Relational Mapping, ORM)。
库函数级别的数据访问接口往往是数据库提供的最底层的高级程序语言访问数据接口,如Oracle数据库的Oracle Call Interface(OCI)。
OCI包含了连接数据库、调用SQL和事务控制等函数,开发者可以使用高级程序语言编写程序调用OCI库函数,实现对数据库的访问。
嵌入式SQL是一种将SQL语句直接写入某些高级程序语言,如C、COBOL、Java等编程语言的源代码中的方法。借此方法,可使得应用程序拥有了访问数据以及处理数据的能力。
数据库厂商一般会提供一个嵌入式SQL的预编译器,把包含有嵌入式SQL的宿主语言源码转换成纯宿主语言的代码。这样一来,源码即可使用宿主语言对应的编译器进行编译。通常情况下,经过嵌入式SQL的预编译之后,原有的嵌入式SQL会被转换成一系列函数调用,因此,数据库厂商还需要提供一系列函数库,以确保链接器能够把代码中的函数调用与对应的实现链接起来。
开放数据库连接(Open DataBase Connectivity, ODBC)是为了解决异构数据库间的数据共享而产生的。
一个基于ODBC的应用程序对数据库进行操作时,用户直接将SQL语句传送给ODBC,所有的数据库操作由对应的DBMS的ODBC驱动程序完成,由对应DBMS的ODBC驱动程序对DBMS进行操作。也就是说,不论哪种数据库系统,均可用ODBC API进行访问。
ODBC的最大优点就是能以统一的方式处理所有的关系数据库。
在具体操作时,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
ORM是一种程序设计技术,用于实现面向对象编程语言里不同类型系统数据之间的转换。
ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象与关系型数据库相互映射;ORM可以解决数据库与程序间的异构性。
ORM是一种将内存中的对象保存到关系型数据库中的技术,主要负责实体域对象的持久化,封装数据库访问细节,提供了实现持久化层的另一种模式,采用映射元数据(XML)来描述对象-关系的映射细节,使得ORM中间件能在任何一个应用的业务逻辑层和数据库之间充当桥梁。
NoSQL泛指非关系型的数据库,区别于关系型数据库,它们不保证关系数据的ACID特性。
按照所使用的数据结构的类型,一般可以将NoSQL数据库分为以下四种类型:
1. 列式存储数据库。
Cassandra、HBase、Riak。
2. 键值对存储数据库。
Tokyo Cabinet/Tyrant、Redis、Voldemort、Oracle BDB。
3. 文档型数据库。
CouchDB、MongoDb、SequoiaDB。
4. 图数据库。
Neo4J、InfoGrid、InfiniteGraph。
NoSQL整体框架分为四层:
1. 数据持久层。
定义了数据的存储形式,主要包括基于内存、硬盘、内存和硬盘接口、定制可插拔四种形式。
2. 数据分布层。
定义了数据是如何分布的,主要有三种形式:CAP支持、多数据中心支持、动态部署支持。
3. 数据逻辑层。
表述了数据的逻辑表现形式。
4. 接口层。
为上层应用提供了方便的数据调用接口,提供了五种选择:Rest、Thrift、Map/Reduce、Get/Put、特定语言API。