Skip to content

数据库基础

后端核心 数据库 SQL vs NoSQL

一、为什么需要数据库

1.1 数据持久化问题

javascript
// ❌ 变量存储 — 服务器重启后数据消失
let posts = [{ title: "Hello", content: "World" }];
// 重启服务器 → posts 回到初始状态!

// ✅ 数据库存储 — 数据永久保存
db.query("SELECT * FROM posts");
// 重启服务器 → 数据依然存在

1.2 数据库的本质

数据库 = 永久存储 + 高效查询 + 数据关系管理

1.3 数据在底层如何存储

磁性存储的原理:电磁铁改变磁盘上小磁铁的极性(南/北),计算机通过读取极性来还原比特(0/1)。

同方向磁铁 = 0
反方向磁铁 = 1
→ 整个磁条 = 一串 0 和 1 = 数据

💡 Bletchley Park 计算机博物馆里的磁盘:整个巨大磁盘只能存 4MB


二、SQL 数据库(关系型)

2.1 核心特点

数据以 表格 形式存储,表与表之间通过 关系(Relationships) 连接。

┌─ Users 表 ─────────────┐     ┌─ Posts 表 ─────────────┐
│ id │ name   │ email     │     │ id │ title  │ author_id │
│  1 │ Angela │ a@mail.com│ ←──→│  1 │ Hello  │     1     │
│  2 │ Jack   │ j@mail.com│     │  2 │ World  │     1     │
└────┴────────┴───────────┘     └────┴────────┴───────────┘

2.2 表的结构

概念说明
列(Column)垂直方向 — 定义字段(name, email, password...)
行(Row/Record)水平方向 — 一条完整记录
Schema定义表的结构(列名 + 数据类型),创建时确定

2.3 关系型数据库的优势

  • 🔗 强大的关系管理 — JOIN 查询跨表提取数据
  • 📐 结构严格 — 数据一致性高,可预测
  • 查询效率高 — 索引优化,海量数据毫秒级响应
  • 🏢 成熟稳定 — 数十年历史,企业广泛使用
  • 🧑‍💻 一致性可靠 — 不会查询到意外结构的数据

2.4 代表产品

数据库特点开源
PostgreSQL功能最强大,专业开发者首选✅ 免费
MySQL简单易学,Web 开发经典✅ 免费
SQLite轻量级,嵌入式使用✅ 免费
Oracle企业级,起价约 $50,000❌ 付费
Microsoft SQL微软生态❌ 付费

三、NoSQL 数据库(非关系型)

3.1 核心特点

数据以 文档/键值对 形式存储,结构灵活,无需预定义 Schema。

json
// 用户 1
{
  "name": "Angela",
  "email": "a@mail.com",
  "password": "hash123"
}

// 用户 2 — 可以有完全不同的字段!
{
  "name": "Jack",
  "email": "j@mail.com",
  "password": "hash456",
  "favorite_food": "noodles"   // ← 只有这个用户有此字段
}

3.2 NoSQL 的优势

  • 🔄 灵活 — 不需要预定义结构,随时可加字段
  • 📈 水平扩展 — 适合分布式场景
  • 📝 学习曲线低 — 类似 JSON,前端开发者友好

3.3 NoSQL 的问题

随着行业实践深入,NoSQL 暴露出一些问题:

  • ⚠️ 可扩展性问题 — 大型项目中反而遇到扩展瓶颈
  • ⚠️ 一致性问题 — 缺乏结构导致查询结果不可预测
  • ⚠️ 查询效率 — 缺少 JOIN,复杂查询性能不如 SQL

3.4 代表产品

数据库特点开源
MongoDB文档型,最流行的 NoSQL部分开源
Redis键值型,极快的缓存数据库✅ 免费
DynamoDBAWS 托管,无服务器❌ 付费

四、SQL vs NoSQL 全面对比

特征SQL(关系型)NoSQL(非关系型)
数据格式表格(行 + 列)文档/键值对/图
结构严格 Schema灵活,无需预定义
关系强(JOIN/外键)弱(通常嵌套文档)
查询语言SQL(结构化查询语言)各产品各异
一致性高(ACID)不同产品不同
扩展纵向为主横向为主
学习曲线需要学 SQL 语法类 JSON,相对简单
适用场景结构化数据、复杂关系灵活数据、快速迭代

4.1 趋势变化

2010-2018:NoSQL 大火 → "NoSQL 是未来!SQL 太老了!"
2018-至今:回归理性 → "SQL 其实更可靠、更高效"

💡 类比:年轻时喜欢酷炫的 Legolas,长大后发现可靠的 Sam 才是最好的伙伴。

4.2 StackOverflow 2024 调查

专业开发者最常用的数据库:

排名数据库类型
🥇 1PostgreSQLSQL
🥈 2MySQLSQL
🥉 3SQLiteSQL
4MongoDBNoSQL
5Microsoft SQLSQL

五、为什么学 PostgreSQL

理由说明
🏆 行业首选专业开发者使用率第一
💰 免费开源无需付费
📏 海量扩展从个人项目到企业级无压力
🔒 超级可靠数据一致性和完整性有保障
👥 社区强大遇到问题容易找到帮助
💼 就业优势大量岗位要求 PostgreSQL 经验

六、CRUD — 数据库的四大操作

无论哪种数据库,核心操作都是 CRUD

操作含义SQL 关键字
Create创建数据INSERT INTO
Read读取数据SELECT
Update更新数据UPDATE
Delete删除数据DELETE

← 返回 Web 开发研究