编辑
2025-08-01
MySQL
00
请注意,本文编写于 127 天前,最后修改于 127 天前,其中某些信息可能已经过时。

目录

1. 数据模型与存储结构
关联型数据库
非关联型数据库
2. 关系处理方式
关联型数据库
非关联型数据库
3. 事务与一致性
关联型数据库
非关联型数据库
4. 扩展性
关联型数据库
非关联型数据库
5. 查询语言
关联型数据库
非关联型数据库
6. 适用场景
关联型数据库
非关联型数据库

1. 数据模型与存储结构

关联型数据库

基于关系模型(二维表结构),数据以 “表(Table)” 为单位存储,表由 “行(记录)” 和 “列(字段)” 组成,且有严格的固定 Schema(字段类型、长度等需预先定义)。
例如:用户表(id, name, age)、订单表(order_id, user_id, amount),通过 “user_id” 关联两张表。
典型产品:MySQL、PostgreSQL、Oracle、SQL Server。

非关联型数据库

数据模型灵活,无固定 Schema,根据场景分为多种类型:
文档型(如 MongoDB):以 “文档” 为单位(类似 JSON/BSON),可嵌套结构(如一个文档包含用户基本信息 + 订单列表);
键值型(如 Redis):以 “键 - 值对” 存储(类似字典),适用于简单查询;
列族型(如 Cassandra):按 “列族” 分组存储,适合海量数据的列级查询;
图数据库(如 Neo4j):以 “节点 - 关系” 模型存储,擅长处理复杂关联(如社交网络关系)。

2. 关系处理方式

关联型数据库

通过外键(Foreign Key) 明确表之间的关系(如一对一、一对多),支持JOIN 操作(通过关联字段合并多表数据)。
例:通过user_id将 “用户表” 和 “订单表” JOIN,查询某个用户的所有订单。

非关联型数据库

不支持(或不推荐)复杂 JOIN,通常通过两种方式处理关系:
嵌入式存储:将关联数据嵌入主文档(如订单文档中直接包含用户基本信息);
应用层处理:由业务代码分别查询多个数据源,再手动关联。
例:MongoDB 中,订单文档可能直接包含user_name而非user_id,避免跨文档关联。

3. 事务与一致性

关联型数据库

严格遵循ACID 原则(原子性、一致性、隔离性、持久性),支持强事务(如银行转账需保证 “扣钱” 和 “加钱” 同时成功或失败),适合对数据一致性要求极高的场景。

非关联型数据库

早期多数不支持事务,更倾向BASE 原则(基本可用、软状态、最终一致性),通过牺牲部分一致性换取高可用性和扩展性。 但近年部分 NoSQL 开始支持有限事务(如 MongoDB 4.0 + 支持多文档事务,Redis 支持单键事务),但复杂事务能力仍弱于 RDBMS。

4. 扩展性

关联型数据库

垂直扩展(升级服务器硬件)为主,水平扩展(分片)难度高(因表关系复杂,分片后 JOIN 成本极大)。

非关联型数据库

天生支持水平扩展(通过分片将数据分散到多台服务器),因数据模型松散,分片后无需复杂关联,适合海量数据场景(如亿级用户日志存储)。

5. 查询语言

关联型数据库

统一使用SQL(结构化查询语言),语法标准化(如SELECT * FROM table WHERE ...),支持复杂查询(嵌套查询、聚合函数等)。

非关联型数据库

无统一查询语言,各产品有专属接口: MongoDB 用find()、aggregate()等方法; Redis 用GET、SET等命令; 图数据库用 Cypher(Neo4j)等。

6. 适用场景

关联型数据库

适合数据结构固定、需复杂关系查询、强事务的场景: 金融交易(银行转账、支付系统); 电商订单(需关联用户、商品、库存等多表); 企业 ERP 系统(数据关系复杂且一致性要求高)。

非关联型数据库

适合数据结构多变、高并发读写、海量数据的场景: 社交数据(用户动态、评论,结构灵活); 日志存储(如服务器日志,高写入、低查询复杂度); 实时推荐系统(需快速读写海量用户行为数据)。

本文作者:haotian

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!