数据库基础(前端友好版)

前端开发为什么要懂数据库?

前端天天调接口、展示数据,理解后端”数据从哪里来、怎么存”能让你:

  • 接口对接时,提前意识到需要什么字段、什么结构
  • 理解为什么某些查询慢(N+1 问题、缺少索引)
  • 和后台同学沟通更高效
  • 全栈开发时直接上手

两大数据库流派

SQL(关系型数据库)— MySQL / PostgreSQL

1
2
3
像 Excel 表格,但更强
每个表有固定的"列结构"(Schema)
表之间通过外键关联
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 创建表(先定义结构)
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(200) UNIQUE,
created_at DATETIME DEFAULT NOW()
);

-- 查询(SQL 语句)
SELECT id, name FROM users WHERE email = 'xxx@example.com';

-- 关联查询
SELECT u.name, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.id = 1;

NoSQL(非关系型数据库)— MongoDB

1
2
3
像 JSON 对象集合
不需要预定义结构
文档嵌套灵活
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// MongoDB 文档 — 与前端 JSON 一模一样
{
_id: ObjectId("..."),
name: "张三",
email: "xxx@example.com",
profile: { // 嵌套对象
age: 25,
tags: ["前端", "Vue"]
},
orders: [ // 嵌套数组
{ id: 1, amount: 99 },
{ id: 2, amount: 199 }
]
}

怎么选?

SQL (MySQL/PostgreSQL)NoSQL (MongoDB)
结构固定,字段明确结构灵活,迭代快
强一致性(银行、订单)弱一致性(内容、社交)
复杂关联查询(JOIN)嵌套文档,不需 JOIN
需要索引优化同样的需要索引
前端类比:TypeScript(有 Schema)前端类比:JavaScript(灵活但容易失控)

前端最容易接触的 — ORM / ODM

ORM(对象关系映射)让你不用写 SQL,用 JS/TS 操作数据库,后端世界里的”框架帮你封装好了”。

1
2
3
4
5
6
7
8
9
// Prisma(TypeScript ORM,目前最流行)
const user = await prisma.user.findFirst({
where: { email: 'test@test.com' },
include: { orders: true }, // 自动关联查询
})
// 返回的就是普通的 JS 对象,前端直接消费

// TypeORM 写法
const user = await User.findOne({ where: { id: 1 }, relations: ['orders'] })
1
2
3
// Mongoose(MongoDB ODM)
const User = mongoose.model('User', { name: String, email: String })
const user = await User.findOne({ email: 'test@test.com' })

前端类比: ORM 就像是”后端的 Prisma Client / Axios”——封装了底层复杂操作,给你一个友好的 API。

后端开发中”查询”和”缓存”的基本思路

N+1 查询问题(前端也需要注意)

1
2
3
4
5
6
7
8
// ❌ 坏写法 — N+1 问题
const users = await User.findAll() // 1 次查询
for (const user of users) {
const orders = await Order.findByUserId(user.id) // 每个用户又 1 次 = N 次
}

// ✅ 好写法 — 一次性 JOIN 或 IN 查询
const users = await User.findAll({ include: ['orders'] }) // 1 次查询搞定

前端可以做什么? 如果你的后端接口没有做关联查询,而是一对一返回大量数据,可以主动建议后端优化。

缓存(Redis)

1
2
请求 → 查 Redis → 有数据 → 直接返回(快)
→ 无数据 → 查 MySQL → 写入 Redis → 返回

Redis 是个内存数据库,读写速度远快于 MySQL,常用于缓存、Session 存储、消息队列。

学习路径建议

1
2
3
4
5
Step 1: SQL 基础(SELECT/INSERT/UPDATE/DELETE + WHERE)
Step 2: 关系设计(一对多、多对多) + JOIN 查询
Step 3: ORM(Prisma/TypeORM)— 用 JS/TS 操作数据库
Step 4: MongoDB + Mongoose(另一个选择)
Step 5: 缓存思维(Redis 是什么、怎么用)

前端转后端,SQL 是必须过的第一关。不一定写复杂 SQL,但要能读懂,能和 DBA 沟通。