用途:本规范用于在项目中使用 Drizzle ORM 时统一 schema、迁移、查询与类型边界做法。该仓库中 Drizzle 仅对接 Postgres,apps/api/drizzle.config.ts 声明 dialect: 'postgresql',且只导入 pg-core;其他 SQLite 引擎不属于 Drizzle。
主要能力与规则:从数据库模块导出单一 schema 对象,并同时传给 drizzle(...) 与 Drizzle Kit 配置;表定义、关系与导出保持显式,避免 Drizzle Kit 无法静态检查的动态构造;以 Drizzle Kit 快照作为 diff 依据,同时审查生成的 SQL 与快照;每个数据库只选一种大小写策略;外部输入写入行时用 drizzle-zod、drizzle-valibot 或本地解析器做 IO 边界校验,推断出的插入类型不能当作运行时校验。查询优先用类型化查询构建器,仅当构建器无法清晰表达时才用原始 SQL;join 与选择形状靠近拥有响应契约的调用方;索引写在 schema 中对应查询模式旁。
驱动边界:bun:sqlite 与 better-sqlite3 是本地同步 SQLite 驱动,不可用于 Cloudflare Workers;D1 是 Cloudflare 绑定,需置于 Worker 代码与生成的绑定之后。
品牌类型:需要品牌 TypeScript 类型但无实际数据转换时,用 $type<T>() 而非 customType。若 toDriver 与 fromDriver 都是恒等函数 (x) => x,应改用 $type<T>(),因为 customType 仍会对每行每列调用 mapFromDriverValue,带来无谓开销。仅当应用与数据库之间确有转换(如 JSON 对象与字符串互转)时才用 customType。
数据表示:尽量让数据以序列化形式(字符串)贯穿系统,只在边缘(UI 组件)解析。例如 DateTimeString 保持字符串,仅在日期选择器组件中解析与再序列化。
限制:资料未提供安装命令、版本要求、收费信息或具体平台支持范围。