# 数据库

# 什么是数据库?

数据库是按照数据结构来组织、存储和管理数据的仓库。我们也可以直接将数据存储在文件中,但是在文件中读写数据的速度相对较慢。

关系型数据库的特点:

  • 数据以表格的形式出现
  • 每行为各种记录的名称
  • 每列为记录名称所对应的数据与
  • 许多的行和列组成一张表单
  • 若干的表单组成一个数据库 Database

# 术语

  • RDBMS: 关系型数据库管理系统
  • 数据库: 数据库是一些关联表的集合
  • 列: 一列包含相同类型的数据
  • 行: 一行表示一组相关的数据,或者说一条记录
  • 冗余: 存储两倍的数据,降低了性能,但是提高了数据的安全性
  • 主键: 主键是唯一的,一个数据表中只能包含一个主键
  • 外键: 外键用于关联两个表
  • 复合键: 符合键将多个列作为一个索引值
  • 索引: 使用索引可以快速访问数据表中的特定信息
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体,目的是保证数据的一致性

# 为什么要使用数据库软件

TIP

作者:苏学斌 链接:https://www.zhihu.com/question/273489729/answer/370366894 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  1. 你当然可以只使用文件。事实上,如果你去看主流商用数据库的数据文件夹,比如MySQL或者PostgreSQL的,里面都是一大堆文件。
  2. 但是你不觉得用文件存取数据很麻烦吗?又要open/close,又要记住数据存储的格式和顺序……能不能把数据访问变成一种服务,让用户不必关心数据是怎么存放在文件中的,甚至都不必关心数据是用什么方法写入文件和从文件中读出的,只需要告诉系统他需要什么数据,系统就能自动为他访问呢?这就是SQL。
  3. 现在假设你要提供这样一种服务,你要关心什么问题呢?首先肯定是正确性,如何保证存放在系统中的数据是正确的,没有冲突,不重不漏,这就是完整性约束。
  4. 其次我们希望存在系统中的数据,在满足约束的情况下,尽量没有冗余以节省存储空间,一个有用的办法是将一个大表分解成若干小表,但在分解的过程中,一些约束可能不能满足。如何在这两者之间取舍?于是,人们提出了若干数据库范式以指导用户选择。
  5. 然后我们要关心数据访问的效率。由于磁盘是顺序存储的(即使是固态硬盘也是顺序访问比随机访问快得多),如何利用这一特点组织存放数据?在数据存放已经固定之后,如何通过避免访问不需要的数据提升效率?这就要用到数据库索引。
  6. 最后,如果我们需要支持多用户共同访问,如何能够保证每个用户访问到的数据都是正确的,而且即使中途宕机,数据也不会出错,这就需要用到并发控制,包括锁,日志等工具。
  7. 最后的最后,如果数据量很大,单机已经不能满足数据访问的性能要求,就需要把数据从一台机器上划分,将每个部分存储到不同的机器上。这个时候你可能需要重新考虑上面的每一个问题……这就是分布式数据库。