D1 模式设计
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @kunlungrowth/d1-drizzle-schema。
技能介绍
要解决的问题
把标准 SQLite 的 schema 直接搬进 Cloudflare D1,往往能跑通测试,却在生产环境暴露隐蔽 bug:外键默认关闭、布尔值被存成整数、时间戳精度丢失、批量插入因绑定参数超过 100 而静默截断。D1 虽然基于 SQLite,但在外键约束、类型映射、并发模型上都有硬性差异,靠手写踩坑成本很高。
核心能力与工作流
这个技能扮演 D1 数据建模师角色,按以下步骤产出 D1SchemaArtifact:
- 建模与生成 schema:收集表、关系、索引需求后,生成符合 D1 约束的 Drizzle 列定义,例如
text('id').primaryKey().$defaultFn(() => crypto.randomUUID())、integer('active', { mode: 'boolean' })、integer('created_at', { mode: 'timestamp' })、text('payload', { mode: 'json' }),外键一律references(() => other.id, { onDelete: 'cascade' })且不设关闭开关 - 补 relations 与类型导出:用
relations(users, ({ one, many }) => ({...}))表达一对多/一对一查询助手,并导出InferSelect/InferInsert供前后端共享 - 生成文档:按 DATABASE_SCHEMA.md 格式记录引擎、表、关系、索引与迁移信息
适用边界与注意点
- 仅适用于目标为 D1 的项目;普通 SQLite 不需要这些约束处理
- 只产出 schema 代码,迁移生成请交给 d1-migration,种子数据交给 db-seed
- 完整类型对照、PRAGMA 与 JSON 函数用法见 references/template.md
- 记住绑定参数上限是 100(而非 SQLite 的 ~999),批量插入必须按此分批
使用场景
- 为新项目在 Cloudflare D1 上初始化数据库,需要生成 users 和 posts 表的 Drizzle schema 及外键关系
- 给现有 D1 数据库添加评论表,要处理布尔字段和时间戳的正确类型映射
- 搭建前后端共享的类型定义,从 D1 schema 导出 InferSelect 和 InferInsert 类型
- 为已有的 SQLite schema 迁移到 D1 做改造,修正外键强制和绑定参数上限带来的问题
适合人员
- 正在使用 Cloudflare D1 的后端工程师,需要生成符合 D1 约束的 Drizzle schema 避免生产环境 bug
- 负责 D1 数据建模的技术负责人,想要规范化数据库设计并生成配套文档
- 需要前后端共享类型的全栈开发者,希望从 schema 直接导出 TypeScript 类型
- 把现有 SQLite 项目迁移到 D1 的开发者,需要处理外键和类型兼容性差异