用途:以 Drizzle ORM 做关系型数据建模与访问。TypeScript schema 是唯一事实来源,drizzle-kit 迁移记录演进历史,查询需在负载下可预测,默认引擎为 postgres。
主要能力:drizzle-orm 提供类型化查询、relations 与 SQL builder;drizzle-kit 提供 generate/migrate/push/studio;schema 用 TypeScript 定义表、枚举与索引;支持事务、索引、relations 关系查询与类型推断。
推荐组织:src/db/ 下放 schema/(按领域分表与关系)、index.ts(导出 client)、migrations/(kit 生成的 SQL),配置 drizzle.config.ts。每进程一个 client(dev 热重载用单例),不向 UI 暴露 client,封装进 repository/service。schema 为事实来源,已应用的迁移 SQL 不直接改,另生成新迁移。
用法要点:建模时表名列名清晰,onDelete 谨慎,封闭集合用 pgEnum,可变实体保留 createdAt/updatedAt,使用关系 API 时声明 relations()。生产流程为 drizzle-kit generate → 审查 SQL → migrate,避免在生产使用 push。查询只选必要列,用 with 或 join 避免 N+1,分页用 cursor 或受限 limit/offset,为高频过滤、排序与热外键建索引,多表写入用 db.transaction(async (tx) => { ... })。输入先用 Zod 等校验再拼 where/values/set;驱动错误(唯一约束、外键)映射为领域错误;类型用 typeof users.$inferSelect / $inferInsert 推断。
适用场景:新建或维护基于 Postgres 的类型化数据访问层、迁移管理与查询优化。
限制与注意:软删除需所有读取一致过滤 deletedAt;多租户必须始终按 tenantId/orgId 限定,不能只依赖客户端。反模式包括无 limit 的列表查询、防备性深层 with、在 SQL helper 中散落业务逻辑、用 push 改生产、热外键缺索引、暴露含 hash/token 的原始行。其他具体价格、平台与效果资料暂未提供。