什么是数据库?
这个问题相信对学编程的朋友们来说过于简单了,大家想必都是增删改查的好手。
但如果让你说出 10 种不同类型的数据库,阁下该如何应对?
这篇文章,是对数据库技术的一个小科普,希望能帮大家了解到更多元化的数据库,便于拓宽学习思路和项目的技术选型。
关系型数据库
首先是我们接触最多的、也是入门后端必学的 关系型数据库 。
在关系型数据库中,数据以 表 的形式进行组织和存储,每个表就像一个 Excel 表格,包含多个 行 和多个 列 。
就比如我们经典的学生管理系统,把学生信息存储到关系型数据库中,结构大概是这样的:
学号 | 学生姓名 | 所属班级号 |
---|---|---|
1 | 小李 | 1 |
2 | 小鱼 | 2 |
3 | 小皮 | 3 |
上述学生表格中,每一行代表一个学生的信息,每一列代表学生的一个属性。我们可以使用结构化查询语言 SQL 来对关系型数据库表的数据进行灵活地查询、选择、过滤等。
而关系型数据库最大的特点,就是表和表之间可以 存在关系 。比如学生管理系统中还可以有班级表,结构如下:
班号 | 班级名称 |
---|---|
1 | 快乐班 |
2 | 泰酷班 |
3 | 躺平班 |
那如果我想知道某个学生所属的班级信息,只需要在查询时将学生表的 所属班级号 和班级表的 班号 进行关联,而不用把所有表格的列存储在一起,非常灵活。
通过 SQL 可以连接查询多张表,得到下面的查询结果:
学号 | 学生姓名 | 所属班级号 | 班级名称 |
---|---|---|---|
1 | 小李 | 1 | 快乐班 |
2 | 小鱼 | 2 | 泰酷班 |
3 | 小皮 | 3 | 躺平班 |
除了查询灵活、数据表间存在关系外,关系型数据库还具有很多其他的优点。
比较重要的是 数据一致性 ,关系型数据库遵循 ACID 原则(原子性、一致性、隔离性和持久性),支持事务,可以保证多个操作同时进行时,数据的状态保持一致。比如 A 给 B 转账,A 扣钱 的同时 B 也会加钱,不会出现 A 扣了钱 B 却没收到钱的情况。
兼顾查询的灵活和写入的准确性,使得关系型数据库几乎可以被应用于任何项目中!比如 CRM(客户关系管理)和 HRM(人力资源管理)等各类管理系统、数据分析系统、金融银行系统等。
比较经典的关系型数据库产品有 MySQL、Oracle、PostgreSQL、Microsoft SQL Server 等。其中,MySQL 由于开源又易学,已经成为后端开发同学必学的数据库技术。
关系型数据库的底层核心实现是 基于关系模型的数学理论 ,最常见的实现方式是使用 B+ 树来存储索引结构,基于其平衡性,能够在存储大量数据时保持高效的查询性能,并且兼顾增删改操作的性能。
对于大多数项目,用 MySQL 等关系型数据库来存储数据就足够了。但关系型数据库不是银弹!在某些场景下,比如要存储的数据间没有关系时,它并不是最佳的选择。
举个例子,当我们要写一篇文章,没有必要把数据存储到 Excel 表格里,可能直接将单篇文本放到 Word 里会更方便阅读和修改。
这个时候,我们就需要与之互补的 非关系型数据库。
非关系型数据库
非关系型数据库又叫 NoSQL。最简单的理解方式:关系型数据库适用