上一篇我们用 KV 存数据,体验很简单:给一个 key,存一个 value,取的时候再用 key 把 value 拿出来。
但你很快就会遇到 KV 干不了的事。比如你要做一个用户系统:
这些需求指向同一个东西:关系型数据库。
数据库大的方向分两类,在学 D1 之前先把这两个概念理清楚。
关系型数据库把数据组织成一张张表(Table),就像 Excel 表格:每一行是一条记录,每一列是一个字段。
比如一张用户表:
| id | name | created_at | |
|---|---|---|---|
| 1 | Alice | alice@example.com | 2024-01-15 |
| 2 | Bob | bob@example.com | 2024-02-20 |
再来一张订单表:
| id | user_id | product | amount |
|---|---|---|---|
| 1 | 1 | T恤 | 99 |
| 2 | 1 | 帽子 | 59 |
| 3 | 2 | 背包 | 199 |
注意订单表里有个 user_id 字段,指向用户表的 id。这就是"关系"——表和表之间通过字段关联起来。你可以写一条 SQL 把两张表联查:
1-- 查出 Alice 的所有订单2SELECT orders.product, orders.amount3FROM orders4JOIN users ON orders.user_id = users.id5WHERE users.name = 'Alice'
关系型数据库的核心能力就是这些:
常见的关系型数据库有 MySQL、PostgreSQL、SQLite。
非关系型数据库(NoSQL)不按表格来组织数据,根据存储方式的不同又分好几类。上一篇学的 KV 就是其中一种:
Map。Cloudflare KV、Redis 都属于这类非关系型数据库的共同特点是:灵活,但查询能力有限。不能写 SQL,不能跨表联查,很多事情得靠应用层代码自己实现。
简单判断:
在 Cloudflare 的生态里,KV 是非关系型的键值存储,而 D1 就是关系型数据库。
D1 是 Cloudflare 提供的边缘 SQLite 数据库。前面讲了一堆概念,落到实际就是这几件事:
上一篇用 KV 存简单的键值对,这一篇用 D1 来做需要建表、查询、关联的正经数据操作。