数据库
Drizzle ORM、数据模型和数据库管理
概览
项目使用 Drizzle ORM 连接 PostgreSQL 数据库。
ORM(对象关系映射,就是一个帮你自动写 SQL 的工具):你不用手写 SQL 语句,直接在代码里调用 db.user.findMany() 这样的方法就能操作数据库。
- Schema 文件:
products/01mvp/packages/db/src/schema - Drizzle 配置:
products/01mvp/packages/db/drizzle.config.ts - Migration 目录:
products/01mvp/packages/db/migrations
常用命令
本页命令默认在 products/01mvp 目录下运行。你也可以在仓库根目录用短写,例如 vpr @01mvp/product#db:migrate。
vpr db:generate # 根据 Drizzle schema 生成 migration 文件
vpr db:migrate # 执行已生成的 migration
vpr db:seed # 创建或更新本地测试管理员
vpr db:push # 直接同步 schema,仅用于本地或可丢弃数据库
vpr db:studio # 打开 Drizzle Studio,直接浏览和编辑数据
vpr db:dev:start # 启动本地开发 PostgreSQL
vpr db:dev:stop # 停止本地开发 PostgreSQLgenerate、migrate、push 的区别
db:generate 会读取 products/01mvp/packages/db/src/schema 下的 Drizzle schema,并在 products/01mvp/packages/db/migrations/ 下生成新的 migration 文件。它不会直接修改数据库数据。
db:migrate 会把已经生成的 migration 执行到当前数据库。迁移文件会提交到 Git,之后部署、回滚、排查问题都有记录。日常开发和准备上线的改动都优先使用 migration。
生产环境使用显式迁移。上线前要先在本地用 vpr db:generate + vpr db:migrate 验证迁移,部署前再用生产环境变量运行 vpr db:deploy。
db:push 会绕过迁移文件,直接把当前 schema 同步到数据库。只在本地临时库、测试库、可以随时重建的数据环境里用。
| 场景 | 命令 | 说明 |
|---|---|---|
| 新增表、字段、索引等正常开发 | vpr db:generate | 生成 migration 文件 |
| 应用本地迁移 | vpr db:migrate | 执行已生成的 migration |
| 本地登录态验收 | vpr db:seed | 创建或更新本地测试管理员 |
| 准备上线或多人协作 | vpr db:generate + vpr db:migrate | 本地生成并验证 migration,提交到 Git |
| 生产执行迁移 | vpr db:deploy | 部署生产代码前执行已提交的迁移文件 |
| 临时实验,数据库可以丢 | vpr db:push | 不生成迁移记录,可能造成数据丢失 |
不确定用哪个? 就用 vpr db:generate + vpr db:migrate。只有确认当前数据库可以重建时,才用 vpr db:push。
Seed 测试账号
db:seed 用来准备本地开发和自动化验收需要的管理员账号:
vpr db:seed默认账号是 [email protected] / Admin123456,角色是 super_admin。脚本会重复执行安全地更新同一个邮箱账号:如果用户不存在就创建;如果用户已经存在,就把它恢复为未封禁、邮箱已验证的超级管理员,并重置邮箱密码凭据。
db:seed 名称保留给数据库数据准备。浏览器测试里的 Playwright auth-setup 项目会调用它,然后再登录一次并保存 storageState;这两层不要合并成一个 setup 命令。
需要自定义账号时:
vpr db:seed -- --email [email protected] --password Admin123456db:seed 默认拒绝非本地数据库。只有确认目标是可丢弃的远程开发库时,才使用 vpr db:seed -- --allow-remote。
推荐迁移流程
修改 Schema:编辑 products/01mvp/packages/db/src/schema 下的表定义,添加或修改模型字段
创建迁移:运行 vpr db:generate,生成新的 migration 文件
应用迁移:运行 vpr db:migrate,把 migration 执行到本地数据库
本地验证:确认功能正常、vpr build 通过
提交代码:把 products/01mvp/packages/db/src/schema/** 和新生成的 products/01mvp/packages/db/migrations/** 一起提交到 Git
部署迁移:部署生产代码前运行 vpr db:deploy
如果迁移写错了,不要直接改已经提交或已经部署过的历史迁移。开发阶段还没共享出去时可以重建迁移;已经共享或上线后,新增一条迁移来修正。
核心数据模型
Schema 中已定义的主要模型:
- User — 用户(邮箱、密码、OAuth、微信绑定、个人资料)
- Account / Session / Verification — Better Auth 认证相关表
- Passkey / TwoFactor — 通行密钥和双因素认证
- Purchase — 支付订单和订阅记录
- ChatSession / ChatMessage — AI 对话会话和消息
- CreditTransaction — 用户余额变动记录
在代码中使用数据库
import { getPostgresDb } from "@01mvp/db";
const db = getPostgresDb();
// 查询示例
const users = await db.user.findMany({
where: { emailVerified: true },
include: { accounts: true },
});推荐的免费 PostgreSQL 云服务:Neon(支持分支和自动暂停)。
这篇文档有问题?