创建时间: 2026-04-18最后更新: 2026-04-18

1. 从 KV 的局限说起

上一篇我们用 KV 存数据,体验很简单:给一个 key,存一个 value,取的时候再用 key 把 value 拿出来。

但你很快就会遇到 KV 干不了的事。比如你要做一个用户系统:

  • "查出所有注册时间在上个月的用户" —— KV 做不到,它只能按 key 取值,不能按字段筛选
  • "找出所有下过订单但没付款的用户" —— 这需要把用户表和订单表关联起来查,KV 连"表"的概念都没有
  • "把用户的邮箱从 a@test.com 改成 b@test.com,但得先确认没有别人用了 b@test.com" —— 这涉及唯一性约束,KV 也管不了

这些需求指向同一个东西:关系型数据库

2. 关系型数据库 vs 非关系型数据库

数据库大的方向分两类,在学 D1 之前先把这两个概念理清楚。

关系型数据库

关系型数据库把数据组织成一张张表(Table),就像 Excel 表格:每一行是一条记录,每一列是一个字段。

比如一张用户表:

idnameemailcreated_at
1Alicealice@example.com2024-01-15
2Bobbob@example.com2024-02-20

再来一张订单表:

iduser_idproductamount
11T恤99
21帽子59
32背包199

注意订单表里有个 user_id 字段,指向用户表的 id。这就是"关系"——表和表之间通过字段关联起来。你可以写一条 SQL 把两张表联查:

code.ts
1
-- 查出 Alice 的所有订单
2
SELECT orders.product, orders.amount
3
FROM orders
4
JOIN users ON orders.user_id = users.id
5
WHERE users.name = 'Alice'

关系型数据库的核心能力就是这些:

  • 结构化:每张表有固定的列,每条数据都遵循同样的结构
  • SQL 查询:可以按任意字段筛选、排序、聚合、分组
  • 表关联:通过外键把多张表串起来,联合查询
  • 约束:唯一性、非空、外键约束,数据库帮你守规矩

常见的关系型数据库有 MySQL、PostgreSQL、SQLite。

非关系型数据库

非关系型数据库(NoSQL)不按表格来组织数据,根据存储方式的不同又分好几类。上一篇学的 KV 就是其中一种:

  • 键值存储(Key-Value):一个 key 对应一个 value,就像一个巨大的 Map。Cloudflare KV、Redis 都属于这类
  • 文档数据库(Document):存的是 JSON 文档,每条数据的结构可以不一样。MongoDB 是典型代表
  • 列族存储、图数据库……还有其他类型,这里不展开

非关系型数据库的共同特点是:灵活,但查询能力有限。不能写 SQL,不能跨表联查,很多事情得靠应用层代码自己实现。

怎么选

简单判断:

  • 数据之间有关联、需要复杂查询 → 关系型数据库
  • 数据结构简单、按 key 存取就够用 → 非关系型数据库

在 Cloudflare 的生态里,KV 是非关系型的键值存储,而 D1 就是关系型数据库

3. Cloudflare D1

D1 是 Cloudflare 提供的边缘 SQLite 数据库。前面讲了一堆概念,落到实际就是这几件事:

  • 基于 SQLite,支持标准 SQL 查询
  • 部署在 Cloudflare 边缘网络,读取速度快
  • 适合读多写少的场景(用户信息、博客内容、配置数据等)
  • 免费额度够个人项目用

上一篇用 KV 存简单的键值对,这一篇用 D1 来做需要建表、查询、关联的正经数据操作。

订阅后可阅读剩余内容
AI 电子伴侣企业级项目实战
已发布145计划发布120目标已完成121%