SQL(或关系)数据库是具有预定义的关系的数据项的集合。这些项被组织为一系列具有列和行的表。表用于保存有关数据库中要表示的对象的信息。表中每一列都包含某种数据和一个字段存储属性的实际值。表中的行表示一个对象或实体的相关值的集合。
表中的每一行都可以用一个称为主键的唯一标识符进行标记,并且可以使用外键将多个表中的行关联起来。可以通过多种不同的方式访问这些数据,而无需重新组织数据库表本身。SQL数据库通常遵循 ACID 一致性模型。
物化视图
物化视图(materialized view)是从查询规范导出并存储以供以后使用的预计算数据集。因为数据是预先计算的,所以查询物化视图比对视图的基表执行查询更快。当查询频繁运行或足够复杂时,这种性能差异会非常显著。
它还支持数据子集,并提高在大型数据集上运行的复杂查询的性能,从而减少网络负载。物化视图还有其他用途,但它们主要用于性能和复制。
N+1查询问题
当数据访问层执行 N 条额外的 SQL 语句以获取执行主SQL查询时可能检索到的相同数据时,就会出现 N+1 查询问题。N值越大,执行的查询越多,性能影响越大。
这在 GraphQL 和 ORM(对象关系映射)工具中常见,可以通过优化 SQL 查询或使用数据加载器来解决,数据加载器可以批量处理连续请求,并在后台发出单个数据请求。
优点
让我们看看使用关系数据库的一些优点:
- 简单准确
- 可访问性
- 数据一致性
- 灵活性
缺点
以下是关系数据库的缺点:
- 维护费用昂贵
- 困难的模式演变
- 性能命中(连接、非规范化等)
- 由于水平可扩展性差,难以扩展
例子
以下是一些常用的关系数据库: