系统化学习之数据库——基础知识

121 阅读5分钟

简介

数据库“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。存储的数据类型可以是文本,数字,图像,音视频等。
简而言之,数据库就是存放数据的仓库,它的存储空间很大。为了提高存储效率,存储数据需要遵守一定规则,这些规则就是我们主要需要学习的部分。当今世界是数据世界,万物皆有数据,数据库是应用运行的基石,更是程序员必备技能之一。
数据库有两种类型,一种是关系型数据库(SQL数据库),一种是非关系型数据库(NoSQL数据库)

关系型数据库(SQL数据库)

关系型数据库是建立在关系模型基础上的数据库,关系模式就是二维的表格模式,多张相互连接的表格就组成了关系型数据库。例如学生信息表和学生成绩表通过学生学号连接成一个关系型数据库。

image.png
常见的关系型数据库有MySQL, Oracle等
在每个表中,都至少包含一个列,每一列都有限制数据类型(INT CHAR)。关系数据库每个表的一条记录有若干属性,若其中一个属性能唯一标识一条记录,该属性就能成为一个主键,来确保数据唯一性,保证表中没有重复数据。例如:身份证号。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
特点:

  • 使用SQL语句操作
  • 使用表格结构,类型格式一致,灵活度低
  • 数据存储在磁盘中,不节省空间,遵循存储规则,字段为空也需要分配空间
  • 读写较慢,无法满足海量数据高效率读写

事务:在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
关系数据库的ACID属性:
原子性(Atomicity)、一致性(Consistency)、事务隔离(Isolation)、持久性(Durability)

  • 原子性:事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行
  • 一致性:几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。
  • 事务隔离:事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。
  • 持久性:对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

非关系型数据库(NoSQL数据库)

数据以对象的形式(键值对)的存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。
常见的非关系型数据库有:MongoDB, Redis 等
四种主要的非关系型数据库:

  • 列式数据库
    是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势 image.png
  • 键值数据库
    可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收
  • 文档数据库
    一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能
  • 图数据库
    管理两类信息:节点信息和边缘信息。 节点表示实体,边缘表示这些实体之间的关系。 节点和边缘都可以包含一些属性用于提供有关该节点或边缘的信息(类似于表中的列)。 边缘还可以包含一个方向用于指示关系的性质。

特点:

  • 不支持SQL语句
  • 数据库结构可变
  • 数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
  • 没有事务处理,没有保证数据的完整性和安全性。适合处理海量数据,但是不一定安全

选择关系型数据库和非关系型数据库

选择关系型数据库

  • 需要分布在多个表中的高度结构化的数据,需要数据遵守严格的、可预测的、预定义的和已经计划好的模式。
  • 数据将保持相对不变。如果不打算频繁更改数据库的结构并且不需要定期更新项目,SQL 数据库会很方便。请记住,它们提供的灵活性很小。
  • 需要一致的数据。
  • 数据完整性和安全性是重中之重。 当存储变多时,需要增加当前机器上的硬件和提高计算能力。这可能代价高昂。需要增加处理能力和内存存储来处理增加的负载以提高性能。

选择非关系型数据库

  • 快速开发,数据结构不断变化
  • 不想对数据库进行任何规划、准备或设计