Skip to content

关系型 vs 非关系型数据库

在数据库的世界里,主要分为两大门派:关系型数据库 (RDBMS)非关系型数据库 (NoSQL)

对于前端开发者来说,理解它们的区别非常重要,因为这决定了你如何设计数据结构。

1. 关系型数据库 (RDBMS)

代表选手:MySQL, PostgreSQL, Oracle, SQL Server, SQLite。

特点

  1. 结构化 (Structured):就像 TypeScript
    • 在存数据之前,你必须先定义好表的结构(Schema)。
    • 比如:name 必须是字符串,age 必须是数字。如果存错了类型,或者多存了一个字段,数据库会报错。
  2. 关联 (Relational):数据分散在不同的表中,通过 ID 关联。
    • 比如:用户信息在 users 表,订单信息在 orders 表。orders 表里只存一个 user_id
    • 查询时,需要通过 JOIN 操作把两张表“拼”在一起。
  3. SQL:使用标准的 SQL 语言进行操作。
  4. ACID:强调事务的安全性。比如银行转账,A 扣钱和 B 加钱必须同时成功,否则全部回滚。

前端类比

想象你有一个严格的 TypeScript 项目

typescript
interface User {
  id: number;
  name: string;
  email: string;
}

// 数据必须严格遵守接口定义
const users: User[] = [
  { id: 1, name: 'Alice', email: 'alice@example.com' }
];

适用场景

  • 传统的企业级应用(ERP, CRM)。
  • 金融系统(对数据一致性要求极高)。
  • 数据结构相对固定的系统。

2. 非关系型数据库 (NoSQL)

代表选手:MongoDB (文档型), Redis (键值对), Cassandra (列存储)。

特点

  1. 灵活 (Schema-less):就像 原生 JavaScript
    • 你不需要预先定义结构。你想存什么就存什么。
    • 第一行数据可以是 { name: 'Jack' },第二行可以是 { name: 'Tom', hobby: 'Coding' }
  2. 文档型 (Document):数据通常以 JSON 格式存储。
    • 这对前端非常友好!你从数据库拿出来的就是 JSON 对象,不需要转换。
  3. 高性能:通常读写速度比关系型数据库快,特别是在处理海量数据时。

前端类比

想象你有一个自由的 JavaScript 数组

javascript
// 想存什么存什么,结构可以不一样
const data = [
  { name: 'Alice' },
  { name: 'Bob', skills: ['JS', 'React'] },
  { id: 3, info: { age: 20 } }
];

适用场景

  • MongoDB:内容管理系统 (CMS)、社交网络、日志系统、快速迭代的初创项目(因为改字段不需要改表结构)。
  • Redis:缓存、会话存储 (Session)、排行榜(因为都在内存里,速度极快)。

3. 怎么选?

特性关系型 (MySQL)非关系型 (MongoDB)
数据结构表格 (Excel 风格)文档 (JSON 风格)
灵活性低 (修改结构麻烦)高 (随时可以加字段)
查询语言SQL (标准,学习曲线适中)类似 JS 的 API (前端上手快)
一致性强 (ACID)最终一致性 (BASE)
适合场景复杂业务、钱、固定结构大数据、高并发、灵活结构

给前端的建议

  • 学习顺序:建议先学 MySQL。因为它是基础,理解了关系型数据库的设计思想,再去学 NoSQL 会非常容易。而且在工作中,MySQL 依然是主流。
  • 开发体验:你会发现 MongoDB 写起来最爽,因为它就是存 JSON,跟前端无缝衔接。
  • 全栈必备Redis 是必学的,用来做缓存和 Session 管理,能极大提升网站性能。

在接下来的章节中,我们将从 MySQL 开始,正式进入数据库的实战学习。