一、概述
网上找了一张图,很生动形象的展示了DBS=DBMS+DB+DBA+其他
简单的来说:
- 数据库看作一组相关的数据
- 数据库管理系统(DBMS)看作管理和控制这组数据的软件
- 数据库系统包括与数据库相互作用的应用程序、DBMS 和数据库在内的所有东西
二、数据库系统(DBS)
数据库系统(Database System,DBS)由硬件和软件共同构成。硬件主要用于存储数据库中的数据,包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统,以及支持多种语言进行应用开发的访问技术等。数据库系统是指在计算机系统中引入数据库后的系统。完整的数据库系统结构关系如图所示:
由图可知,一个完整的数据库系统一般由数据库、数据库管理系统、应用开发工具、应用系统、数据库管理员和用户组成。数据库系统主要有以下 3 个组成部分:
- 数据库:用于存储数据的地方。
- 数据库管理系统:用于管理数据库的软件。
- 数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库库的软件补充。
1、数据库(DB)
数据库是按照数据结构来组织、存储和管理数据的仓库”,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库实际上就是一个文件集合,是一个存储数据的仓库,本质就是一个文件系统,数据库是按照某种数据结构把数据存储起来,用户可以对存储的数据进行增删改查操作。根据不同的数据结构通常分为层次式数据库、网络式数据库和关系式数据库等。而在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库。
(1)层次数据库(Hierarchical Database,HDB)
层次结构模型实质上是一种有根结点的定向有序树,按照层次模型建立的数据库系统称为层次模型数据库系统。IMS(Information Manage-mentSystem)是其典型代表。层次数据库是最古老的数据库之一,它把数据通过层次结构(树形结构)的方式表现出来。层次数据库曾经是数据库的主流,但随着关系数据库的出现和普及,现在已经很少使用了。
(2)网络式数据库
按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG(Data Base Task Group)。用数学方法可将网状数据结构转化为层次数据结构。网络数据库必须具有实时高效的特性,它要能够并行处理多个终端同一时刻的数据操作,也要能够抵御网络上黑客与病毒的入侵。
(3)面向对象数据库(Object Oriented Database,OODB)
面向对象数据库=面向对象系统+数据库能力。
(4)XML数据库(XML Database,XMLDB)
XML 数据库可以对 XML 形式的大量数据进行高速处理。
(5)关系数据库(Relational Database,RDB)
关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。由关系数据结构组成的数据库系统被称为关系数据库系统。和 Excel 工作表一样,它也采用由行和列组成的二维表来管理数据。同时它还使用专门SQL对数据进行操作。关系数据库是现在应用最广泛的数据库。关系数据库在 1969 年诞生,可谓历史悠久。常见的关系数据库如下:
-
Oracle Database:甲骨文公司的RDBMS
-
SQL Server:微软公司的RDBMS
-
DB2:IBM公司的RDBMS
-
PostgreSQL:开源的RDBMS
-
MySQL:开源的RDBMS
优点
- 都是使用表结构,格式一致,易于维护。
- 使用通用的 SQL 语言操作,使用方便,可用于复杂查询。
- 数据存储在磁盘中,安全。
缺点
- 读写性能比较差,不能满足海量数据的高效率读写。
- 不节省空间。因为建立在关系模型上,就要遵循某些规则,比如数据中某字段值即使为空仍要分配空间。
- 固定的表结构,灵活度较低。
(6)非关系型数据库(NoSQL)
使用非关系型模型设计的数据库就是非关系型数据库。非关系型模型比如有:
-
列模型:存储的数据是一列列的,列模型数据库以一列为一个记录(关系型数据库以一行作为一个记录)。对于这种模型,数据即索引,IO很快,主要是一些分布式数据库。缺点是数据库的功能有局限性。常见的列模型数据库是:Hbase
-
键值对模型:存储的数据是一个个“键值对”,常见的键值对数据库是:redis,MemcacheDB。
-
文档类模型:以一个个文档来存储数据,有点类似“键值对”。优点是对数据结构要求不特别的严格。而缺点是查询性的性能不好,同时缺少一种统一查询语言。比如mongoDB
- 图形数据库存储:代表软件InfoGrid,它的优点可以方便的利用图结构相关算法进行计算。而缺点是要想得到结果必须进行整个图的计算,而且遇到不适合的数据模型时,图形数据库很难使用。
优点
- 非关系型数据库存储数据的格式可以是 key-value 形式、文档形式、图片形式等。使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
- 速度快,效率高。 NoSQL 可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。
- 海量数据的维护和处理非常轻松。
- 非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
- 可以实现数据的分布式处理。
缺点
- 非关系型数据库暂时不提供 SQL 支持,学习和使用成本较高。
- 非关系数据库没有事务处理,没有保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。
- 功能没有关系型数据库完善。
2、数据库管理系统(DBMS)
数据库管理系统(Database Management System,DBMS)是用户创建、管理和维护数据库时所使用的软件,位于用户和操作系统之间,对数据库进行统一管理。DBMS 能定义数据存储结构,提供数据的操作机制,维护数据库的安全性、完整性和可靠性。
(1)数据定义功能
DBMS 提供数据定义语言(Data Definition Language,DDL),用户通过它可以方便地对数据库中的数据对象进行定义。
(2)数据操纵功能
DBMS 还提供数据操纵语言(Data Manipulation Language,DML),用户可以使用 DML 操作数据,实现对数据库的基本操作,如查询、插入、删除和修改等。
(3)数据库的运行管理
数据库在建立、运用和维护时由数据库管理系统统一管理、统一控制,以保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复。例如:
- 数据的完整性检查功能保证用户输入的数据应满足相应的约束条件;
- 数据库的安全保护功能保证只有赋予权限的用户才能访问数据库中的数据;
- 数据库的并发控制功能使多个用户可以在同一时刻并发地访问数据库的数据;
- 数据库系统的故障恢复功能使数据库运行出现故障时可以进行数据库恢复,以保证数据库可靠地运行。
(4)提供方便、有效地存取数据库信息的接口和工具
编程人员可通过编程语言与数据库之间的接口进行数据库应用程序的开发。数据库管理员(Database Administrator,DBA)可通过提供的工具对数据库进行管理。
数据库管理员是维护和管理数据库的专门人员。
(5)数据库的建立和维护功能
数据库功能包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重组织功能和性能监控、分析功能等。这些功能通常由一些使用程序来完成。
3、数据库应用程序(DataBase Application)
虽然已经有了 DBMS,但是在很多情况下,DBMS 无法满足对数据管理的要求。数据库应用程序的使用可以满足对数据管理的更高要求,还可以使数据管理过程更加直观和友好。数据库应用程序负责与 DBMS 进行通信、访问和管理 DBMS 中存储的数据,允许用户插入、修改、删除数据库中的数据。
不同的程序设计语言会有各自不同的数据库访问接口,程序语言通过这些接口,执行 SQL 语句,进行数据库管理。主要的数据库访问接口主要有 ODBC、JDBC、ADO.NET 和 PDO。
- ODBC(Open Database Connectivity,开放数据库互连)为访问不同的 SQL 数据库提供了一个共同的接口。ODBC 使用 SQL 作为访问数据的标准。这一接口提供了最大限度的互操作性。一个应用程序可以通过共同的一组代码访问不同的 SQL 数据库管理系统。一个基于 ODBC 的应用程序对数据库的操作不依赖任何 DBMS,不直接与 DBMS 打交道,所有的数据库操作由对应的 DBMS 的 ODBC 驱动程序完成。也就是说,不论是 MySQL 还是 Oracle 数据库,均可用 ODBC API 进行访问。由此可见,ODBC 的最大优点是能以统一的方式处理所有的数据库。
-
Java Data Base(JDBC,Java 数据库连接)用于 Java 应用程序连接数据库的标准方法,是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。
-
ADO.NET 是微软在 .NET 框架下开发设计的一组用于和数据源进行交互的面向对象类库。ADO.NET 提供了对关系数据、XML 和应用程序的访问,允许和不同类型的数据源以及数据库进行交互。
-
PDO(PHP Data Object)为 PHP 访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO 是 PHP 5 新加入的一个重大功能。
三、为什么使用数据库
大量的数据正在不断产生,那么如何安全有效地存储、检索,管理它们呢?于是对数据的有效存储、高效访问、方便共享和安全控制等问题成为了信息时代一个非常重要的问题。使用数据库可以高效且条理分明地存储数据,它使人们能够更加迅速和方便地管理数据,主要体现在以下几个方面。
1、数据库可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。
数据库可以对数据进行分类保存,并且能够提供快速的查询。例如,我们平时使用百度搜索内容时,百度也是基于数据库和数据分类技术来达到快速搜索的目的。
2、 数据库可以有效地保持数据信息的一致性、完整性、降低数据冗余。
可以很好地保证数据有效、不被破坏,而且数据库自身有避免重复数据的功能,以此来降低数据的冗余。
3、数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。
例如,如果把所有员工信息和工资数据都放在磁盘文件上,则工资的保密性就无从谈起。如果把员工信息和工资数据放在数据库中,就可以只允许查询和修改员工信息,而工资信息只允许指定人(如财务人员)查看,从而保证数据的安全性。
4、数据库技术能够方便智能化地分析,产生新的有用信息。
例如,超市中把物品销售信息保存在数据库中,每个月销售情况的排名决定了下半月的进货数量。数据库查询的结果实际上产生了新的数据信息。
四、常用的关系型数据库
我们常说 XX 数据库,其实实质上是 XX 数据库管理系统。现在已经存在了很多优秀的商业数据库,如甲骨文(Oracle)公司的 Oracle 数据库、IBM 公司的 DB2 数据库、微软公司的 SQL Server 数据库和 Access 数据库。同时,还有很多优秀的开源数据库,如 MySQL 数据库,PostgreSQL 数据库等。下面介绍这些常见的数据库。
1、Oracle
Oracle 是甲骨文公司的一款关系型数据库管理系统,在数据库领域一直处于领先地位的产品,是目前世界上流行的关系型数据库之一,是一种高效率、可靠性好、适应高吞吐量的数据库方案。
优点:
- Oracle 可移植性好,能在所有主流平台上运行(包括 Windows),完全支持所有工业标准。采用完全开放策略,使客户可以选择最适合解决方案。以及对开发商的全力支持。
- 获得最高认证级别的 ISO 标准认证,安全性高。
- 与其它数据库相比,Oracle 性能最高。保持着开放平台下 TPC-D 和 TPC-C 世界记录。
- 多层次网络计算,支持多种工业标准,可以用 ODBC、JDBC、OCI 等网络客户连接 。
- 完全向下兼容,因此被广泛应用,且风险低 。
向下兼容指的是高版本支持低版本的或者说后期开发的版本支持和兼容早期开发的版本。
缺点:
- 对硬件的要求高
- 价格比较昂贵
- 管理维护麻烦
- 操作比较复杂
2、SQL Server
SQL Server 是 Microsoft(微软)公司推出的关系型数据库管理系统,主要应用于大型的管理系统中。
优点:
- 与微软的 Windows 系列操作系统的兼容性很好。
- 高性能设计,可充分利用 WindowsNT 的优势。
- 系统管理先进,支持 Windows 图形化管理工具,支持本地和远程的系统管理和配置。
- 强壮的事务处理功能,采用各种方法保证数据的完整性。
- 支持对称多处理器结构、存储过程、ODBC,并具有自主的 SQL 语言。
缺点:
- SQL Server 只能在 Windows 系统上运行,没有丝毫开放性。
- 没有获得任何安全证书。
- 多用户时性能不佳 。
- 只支持 C/S 模式,SQL Server C/S 结构只支持 Windows 客户用 ADO、DAO、OLEDB、ODBC 连接。
3、MySQL
MySQL 是一种开放源代码的关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。因为其速度、可靠性和适应性而备受关注。MySQL 是流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的应用软件之一。
优点:
- 性能卓越服务稳定,很少出现异常宕机
- 开放源代码且无版权制约,自主性强、使用成本低。
- 历史悠久、社区及用户非常活跃,遇到问题,可以很快获取到帮助。
- 软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
- 支持多种操作系统,提供多种 API 接口,支持多种开发语言。
缺点:
- MySQL 最大的缺点是其安全系统,主要是复杂而非标准,只有调用 mysqladmin 来重读用户权限才会发生改变。
- MySQL 不允许调试存储过程,开发和维护存储过程很难。
- MySQL 不支持热备份。
- MySQL 的价格随平台和安装方式变化。
4、Access
Access 是由 Microsoft(微软)发布的小型关系数据库管理系统,是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。
优点:
- 存储方式简单,易于维护管理。Access 的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb 或 .accdb)的数据库文件中,便于用户的操作和管理。
- Access 是一个面向对象的开发工具,这种基于面向对象的开发方式,使得开发应用程序更为简便。
- 界面友好、易操作。Access 是一个可视化工具,风格与 Windows 完全一样,用户想要生成对象应用,只要使用鼠标进行拖放即可,非常直观方便。系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌握。
- 集成环境,可以处理多种数据信息。Access 基于 Windows 操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。
- 支持广泛,易于扩展,弹性大。Access 是一个既可以只用来存放数据的数据库,也可以作为一个客户端开发工具来进行数据库应用系统开发。即可以开发方便易用的小型软件,也可以用来开发大型的应用系统。
缺点:
- 不支持并发处理。
- 数据库存储量小安全性不够高。
- Access 是小型数据库,当数据量过大时,一般百M以上(纯数据,不包括窗体、报表等客户端对象)性能会变差。
- 虽然理论上支持 255 个并发用户,但实际上根本支持不了那么多,如果以只读方式访问大概在 100 个用户左右,而如果是并发编辑,则大概在10-20个用户。
- 单表记录数过百万时,性能就会变得较差,如果加上设计不良,这个限度还要降低。
- 不能编译成可执行文件(.exe),必须要安装 Access 运行环境才能使用。
5、DB2
DB2 是美国 IBM 公司开发的一款支持多媒体、Web 的关系型数据库管理系统。主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境。
优点:
- 相比较 MySQL 和 Oracle 两种数据库来说,DB2 提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模地应用程序执行能力,具有与平台无关的基本功能和 SQL 命令。
- DB2 采用了数据分级技术,能够使大型数据很方便的下载到数据库服务器,使数据库本地化和远程连接透明化。
- 拥有非常完备的查询优化器,改善了查询性能,并支持多任务并行查询。
- 具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统更加使用。
- DB2 可跨平台使用。
缺点:
- 配置文件和参数多,且命名不规范。
- 一些 DB2 产品开发不方便。
- 和 Oracle 相比,命令多,且没 Oracle 统一规范的好。
- 由于其设计框架的问题,如果用户对数据库的本身优化和应用程序优化做的不足,那么 DB2 容易出现锁等待现象。
6、PostgreSQL
PostgreSQL 是一款富有特色的自由数据库管理系统,甚至可以说是最强大的自由软件数据库管理系统。该数据库管理系统支持了目前世界上最丰富的数据类型。是自由软件数据库管理系统中唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的自由软件。
优点:
- PostgreSQL 遵循的是 BSD 协议,是一个完全开源、免费、同时非常强大的关系型数据库。
- 与 PostgreSQL 配合的有很多分布式集群软件,如 pgpool、pgcluster、slony、plploxy 等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这些 MySQL 则比较难实现。
- PostgreSQL 源代码写的很清晰,易读性比 MySQL 强,所以很多公司基本都是以 PostgreSQL 做二次开发的。
- PostgreSQL 是多进程的,而 MySQL 是多线程的。并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL 的总体处理性能不如 PostgreSQL,原因是 MySQL 的线程无法充分利用 CPU 的能力。
- PostgreSQL 有很强大的查询优化器,支持很复杂的查询处理。
BSD 开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
缺点:
- 对于简单而繁重的读取操作,相比较其它数据库来说,PostgreSQL 性能较低。
- PostgreSQL 数据库扩容花费时间很长。
五、总结
数据库实质就是一种数学模型,是用来存储数据的一种思想,一种技术。比如依据关系型数据库的设计技术或者设计思想,市场上出现了SQL SERVER、MySQL等产品。简单来说,数据库就是一个存储数据的仓库,它将数据按照特定的规律存储在磁盘上。为了方便用户组织和管理数据,其专门提供了数据库管理系统。通过数据库管理系统,用户可以有效的组织和管理存储在数据库中的数据。下面用一种图来阐述自己的理解: