数据库

基于文件系统的局限性:

  • 数据被分离
  • 数据存在冗余
  • 数据存在依赖性
  • 文件格式不兼容
  • 查询一成不变,应用程序需要不断翻新

为了更加高效,数据库和数据库管理系统(DMBS)应运而生,数据库是一个含有大量数据的而设计的一个逻辑相关数据及其描述的共享集,能表现实体,属性和实体之间的逻辑关系

数据库是通过 DBMS 创建的容器,DBMS 可以对多个数据库进行管理,所有对数据的访问都必须通过 DBMS 进行,所以DBMS = 多个数据库(DB) + 管理程序。DBMS 提供以下功能:

  • 允许用户通过 SQL 管理数据
  • 并发控制
  • 恢复控制
  • 安全控制
  • 完整控制

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

关系型数据库绝对是 DBMS 的主流,它是建立在关系模型基础上的数据库,SQL 就是关系型数据库的标准查询语言

  • 键值对型:通过key-value形式方式来存储数据,由于 key 是唯一的标识符,所以查询效率非常快,这方面很明显优势于关系型数据库,同时缺点也很明显,无法像关系型数据库一样使用条件过滤,通常要遍历所有的键消耗大量的运算,通常使用场景是作为缓存使用,比如 Redis
  • 文档型:文档被当作处理信息的基本单位,一个文档相当于一条记录,MongoDB 是最流行的文档型数据库
  • 搜索引擎型:虽然关系型数据库采用了索引提升了索引效率,但是针对于全文索引的效率非常低,搜索引擎优势在于全文搜索的技术
  • 列存储型:列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQL Sever 等都是行式存储,而列式数据库是将数据按照列存储到数据库中,好处是可以大量的降低系统的 I/O,适合分布式文件系统

RDBMS

  • 高度组织化结构化数据
  • 结构化查询语言(SQL)
  • 数据和关系都存储在单独的表中
  • 数据操纵语言,数据定义语言
  • 严格的一致性
  • 基础事务

NoSQL 泛指非关系型数据库,包括了键值对型数据库、文档型数据库、搜索引擎和列存储等等

  • 键 - 值对存储,列存储,文档存储,图形数据库
  • 代表着不仅仅是 SQL
  • 没有声明性查询语言
  • 没有预定义的模式
  • 最终一致性,而非 ACID 属性
  • 非结构化和不可预知的数据
  • CAP 定理
  • 高性能,高可用性和可伸缩性

RDBMS

  • 数据库:数据库(Database)是最容易被搞混淆的概念,这个术语用法很多,有时候被认为是一个软件或是数据的仓库,但通常被认为是一个软件,这并不是正确的定义,数据库应该被视为存储数据的容器,通常不管数据是什么,以及数据是如何组织的
  • 表:表(Table)是一种结构化的文件,用来存储某种特定类型的数据,由固定的列和任意的行组成
  • 列:列(column)存储了表中的某部分信息,就像 Excel 那样,每一个网格都存储着某种特定的信息,大多数情况下,列被称作为表的字段(field)
  • 行:大部分数据库的表都是按行(row)存储的,每一行就是一个记录,这两个术语是可以交替使用的,一般行才是正确的术语
  • 数据类型:每一个列都有相应的数据类型(datatype),定义了列能够存储哪些数据种类,数据类型能够帮助正确的分类数据,并在优化的时候起作用,因此创建表的时候应该关注所用的数据类型
  • 主键:主键(primary key)指的是一个具有唯一标识的列,可以将任一一列作为主键,但是其值必须是唯一的,主键能够方便对表中的数据进行操作,从原则上来讲,每一个表都应该有一个主键列,虽然不是必须的
  • 外键:外键(foreign key)用表中的一个列关联多个表
  • 索引:索引(index)可以快速访问表中的特定信息,索引是对数据进行排序的一种结构

参考资料

  • MySQL 必知必会
  • SQL 必知必会(第4版)
  • SQL 经典实例
  • 漫画数据库
  • SQL 基础教程
  • MongoDB 权威指南(第2版)
  • 数据库系统实现(第2版)
  • 数据库系统概念(第6版)
  • SQL 优化核心思想