1、数据库是什么

数据库(DataBase)是按照数据结构来组织、存储和管理数据的仓库。
数据库管理系统(DataBase Management System)是管理数据库的软件管理系统,我们经常说的数据库实际上是说的DBMS。

2 数据库的分类

数据库分为关系型数据库和非关系型数据库。

2.1 关系型数据库

每一种数据库都对应着某一种数据结构来存储数据,关系型数据库采用二维表的形式存储数据,对数据的操作几乎都是建立在一张或者多张二维表上,通过对这些关联的表格分类、合并、连接获选取等运算来实现数据库的管理。
关系型数据库是依据关系模式来管理数据的数据库,一个关系对应着一个二维表。
关系模式是描述关系的,可以理解为描述这张二维表的一维特征向量。比如学生表中,表头为(学生姓名、年级、班级、学号、身高、成绩…),这组一维特征向量就是这张表的关系模式。
常见的关系型数据库有MySQL、Oracle、SqlSever等。

2.2 非关系型数据库

非关系型数据库(Not only sql,NoSql)通常用于海量数据的分布式存储,企业数据规模越来越大,大数据分析等推动了NoSQL的崛起,常见的非关系型数据库有MongoDB、redis等。其中MongoDB是文档存储,通过json格式,也包含了k-v对应关系;redis是k-v存储。
文档型数据库
因为我们存元数据是用的MongoDB,所以细说一下。
文档型数据库的最小存储结构是文档(document),大多以Json格式存储。每一个文档都是一系列数据项的集合,每一个数据项是一个k-v对,其中值(value)既可以是简单的数据类型,比如字符串,数字、日期等,也可以是复杂的类型,比如有序列表和关联对象。
文档型数据库可以看做是键值数据库的升级版,允许键值嵌套,且文档型数据库的查询速度比键值数据库快。
同一张表中的document可以由不同的格式存储,比如xml、json等。

2.3 关系型数据库和非关系型数据库的区别

1、数据结构
关系型数据库将数据存储在表中,非关系数据库则有文档型、K-V型、列和图片型。
2、Sql
关系型数据库支持SQL语句,非关系数据库不支持SQL语句。
3、存储介质
关系型数据库将数据存储在硬盘中,非关系型数据库将数据存储在缓存中(也可以是硬盘),自然非关系型数据库的处理数据速度更快。
4、事物支持
关系型数据库支持事务性,非关系型数据库不支持事务性。
5、扩展性
由于数据之间的耦合性,关系型数据库不易于扩展,而非关系型数据库易于扩展。

3 关系型数据库的常见术语

1、SQL
结构化查询语言(Structured Query Language),是管理数据库(增删查改)的计算机语言,不同的DBMS的SQL语句不太一样。
2、表
就是二维表(Table),由行列组成,是关系型数据库的基本数据结构。一个DBMS可以有多个数据库,一个数据库底下可以有多张表。
3、列
每一列都是从不同的维度去描述这张表,可以理解为每一列的列名就是描述这张表的一维特征向量的一个组成。
同一列的数据属性相同。
4、行
每一行对应一条数据。
5、候选键
针对表提出的概念。在一张表中,可以由一列或者一组列唯一标识一条数据,这个列或者这组列就是这张表的一个候选键。一张表可以有多个候选键。
6、主键
从一个表的候选键集合中挑出一个候选键,作为这张表的主键。一张表最多只能有一个主键,主键的值不能为空,且不能重复,通过主键对应表中唯一一条数据。

4 关系型数据库遵循的ACID规则

是针对于事务(transaction)提出的。
A(Atomicity)原子性
针对于一组操作说的,这组操作有原子性,是说这组操作,要么都发生,要么都不发生。
举例:A账户向B账户转100元,A账户金额减少100元、B账户金额增加100元,这两个操作要么都发生,要么都不发生,这两个操作具备原子性。
C(Consistency)一致性
事务的运行不会改变数据库的一致性约束。
举例:A账户向B账户转账,转账前A、B账户的金额总和跟转账后的金额总和相等。
I (Isolation) 独立性
事务之间的运行是互不影响的。
举例:事务A改变账户a的金额,事务B读取账户a的金额,在事务A没有提交前,事物事务读取的a账户的金额依然是改变前的金额。
D (Durability) 持久性
事务一旦提交了,它所作出的修改会永久地保存在数据库上,即使数据库宕机也不会丢失。