数据库的产生
在网络世界中存在保存数据的容器如数组和集合,但这些都是需要存储在内存中,断电失效因此我们尝试将数据本地化存储在外存介质中便称为文件,而文件杂乱无章在我们查找的时候十分不方便这意味着数据失去了价值,因此需要对文件进行组织化管理便产生了数据库。所以说数据库是一个对数据进行有组织存储的仓库。
数据库相关组成
- DB
数据库(database):作为存储数据的“仓库”保存了有组织的数据。
- 组织性体现在数据依照实际意义先成表再放进库中,每个表名是唯一的。
- 表由多个字段(对应Java中类的属性)组成,并将相关的数据以行(对应Java中类的对象)的形式存储。
- DBMS
数据库管理系统(database management system):对数据库进行管理的系统,向用户提供操作的接口,封装了对数据的具体操作。实现数据库对象的创建、数据库存储数据的查询、添加、修改与删除操作和数据库的用户管理、权限管理等。 - SQL
面向数据库管理系统的编程语言(Structured Query Language) ,是程序员指导DBMS执行管理数据的语言。
抽象化总结:数据库可以理解为一个文档柜,组织性体现在文档会依照具体文档的所属有组织地进行存储,而数据库管理系统就像一个十分了解文档归档及文档存储位置的的一个助理,数据库管理语言便是你指导助理进行文档操作的“行话”。
数据库管理系统术语
- 数据库: 数据库是一些关联表的集合。
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
- 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
- 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
- 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
- 外键:外键用于关联两个表。
- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
- 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
数据库术语
表头(header): 每一列的名称;
列(col): 具有相同数据类型的数据的集合;
行(row): 每一行用来描述某条记录的具体信息;
值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
键(key): 键的值在当前列中具有唯一性。
数据库分类
数据库分为关系型数据库和非关系型数据库。
- 关系型数据库有严格的数据组成格式(表)可以直观地反映实体间的关系,因此在查询操作上十分高效但在数据整理成表结构上花费较多时间。
- 非关系型数据库出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的目的被设计。对于非结构化数据的处理更合适,如文章、评论,这些数据如全文搜索、机器学习通常只用于模糊处理,不需要像结构化数据一样,进行精确查询,而且这类数据的数据规模往往是海量的,数据规模的增长往往也是不可能预期的。
对比:
- 关系型数据库按照结构化的方法存储数据,每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高,要读取和查询都十分方便但带来的问题就是一旦存入数据后,如果需要修改数据表的结构就会十分困难。
- NoSQL数据库由于面对的是大量非结构化的数据的存储,它采用的是动态结构,通常以数据集的方式,大量的数据集中存储在一起,类似于键值对、图结构或者文档。对于数据类型和结构的改变非常的适应,可以根据数据存储的需要灵活的改变数据库的结构。
数据库的事务性
数据库对事务性有不同的体现,在传统单体架构下可以很容易实现ACID原则实现强一致性与关系数据库对应,但在分布式架构下由于多机间的通信状况未知难以实现强一致性,按照分布式中CAP定理仅可以实现其中两个,因此在分布式存储中依照BASE原则(基本可用(Basically Available)、软状态(Soft-state)、最终一致性(Eventual Consistency))以换取高并发性和拓展性对应非关系型数据库。