用途:在 @db/app 中使用 Drizzle ORM 操作本仓库的 PlanetScale MySQL(Vitess)数据库时使用,包括新增或修改 mysqlTable 架构、生成或执行迁移等 schema、迁移与部署相关工作。
主要能力与约定:@db/app 是运行在 PlanetScale MySQL(Vitess)上的 Drizzle ORM,本地开发与生产使用同一驱动 drizzle-orm/planetscale-serverless。驱动统一:drizzle-orm/planetscale-serverless 配合 @planetscale/database;不得直接 import @planetscale/*,客户端须经 @vendor/db 的 createDatabase 获取。架构文件:mysqlTable("lightfast_<snake_case>", …),始终加 lightfast_ 前缀,列构造器从 drizzle-orm/mysql-core 导入,参照 db/app/src/schema/tables/。禁止出现 mysql2,因为 drizzle-kit 会优先使用 mysql2 并通过 TCP 执行迁移,而 PlanetScale 分支不开放该方式。drizzle-kit 使用 dialect: "mysql"(经 @vendor/db 的 createDrizzleConfig),不是 "planetscale"。MySQL 无 RETURNING,使用 .$returningId()(仅返回 { id }),需要其他列时客户端预计算(如 $defaultFn 中的 nanoid())或随后 SELECT。
使用方式:迁移用 pnpm db:generate 在 db/app/ 离线生成;本地开发用 pnpm db:push 将 schema 应用到工作树分支;CI 对持久化 staging 执行 pnpm db:migrate,然后 staging → main 部署。不要手写或编辑 .sql。本地开发按工作树由 lightfast-local-infra(db up)提供 PlanetScale 分支,运行时凭据位于 apps/app/.env.overrides.local。外键:Vitess 的 FK 支持有限,本仓库避免 references(),优先应用层级引用完整性。
适用场景:PlanetScale + Drizzle 的 schema、迁移、部署工作。引擎深入可加载 mysql 与 vitess 技能;检查线上数据库可加载 lightfast-db;规范命令见 db/CLAUDE.md。
常见错误:使用 .returning()(Postgres 习惯),MySQL 应改用 .$returningId();为消除 drizzle-kit 报错而加入 mysql2,会悄然破坏 PlanetScale 迁移;直接导入 @planetscale/database 而非经 @vendor/db;手工编辑迁移 .sql 而不重跑 pnpm db:generate;未先查阅 FK 约束与 schema-lint 文档就添加 references()/FK;假设 Drizzle 列重命名安全,drizzle-kit 会生成 drop+add。相关官方文档:https://planetscale.com/docs/llms.txt、https://orm.drizzle.team/docs/connect-planetscale。