SuperAPI AI 工具集

drizzle-database

编程与开发

查看项目

更新于 10-15 17:27

技能介绍

用途:在涉及 Drizzle ORM 原语的工作中使用本技能,包括 pgTable(...) 模式定义、relations(...) 关系声明、Drizzle select/query 构造器组合(db.select、db.query.*)、Drizzle 迁移与模式演进,以及为 Drizzle 测试做类型化测试库播种。不适用于与 Drizzle 实现无关的通用 SQL/数据库讨论。

主要能力:帮助按项目一致的类型、关系建模和迁移/测试验证来实现与审查 Drizzle ORM 模式与查询代码。

使用方式:每次模式或查询变更按规范流程执行:检查目标仓库中邻近的模式辅助函数与现有 Drizzle 模式;复制已有本地模式(类型、命名、索引、关系风格)而非自创风格;实现最小必要变更;验证生成或应用的迁移输出与变更一致;运行覆盖所改表/查询路径的相关测试。完整示例见 references/schema-patterns.md、references/query-patterns.md、references/migrations-and-testing.md。

约定与规则:始终显式标明关系基数(一对一或一对多),并使外键字段匹配被引用 ID;显式区分可选与必需连接(可选用 leftJoin,必需用 innerJoin);模式变更后须验证迁移与测试。项目惯例:若项目使用品牌/类型化 ID 则优先使用,例如 id: text("id").primaryKey().$type<UserId>();;若现有表如此则优先用 .$defaultFn(...) 生成 ID/时间戳,例如 createdAt: timestamp("created_at").$defaultFn(() => new Date()).notNull();;若本地模式文件如此则把索引/复合约束放在第三个 pgTable 参数中,例如 (table) => [index("sessions_user_id_idx").on(table.userId), unique().on(table.userId, table.organizationId)];;若代码库依赖关系查询辅助则向 drizzle(...) 传完整 schema。

查询策略:当能减少往返且保持逻辑可读时,优先单一组合查询(连接/select 投影);当关系查询辅助(db.query.<table>.findMany/findFirst 配合 with)能清晰表达读取、保持类型干净且避免不必要复杂度时使用之;当关系辅助无法高效表达所需过滤、投影或聚合时,升级为自定义连接/聚合查询。

范围边界:聚焦 Drizzle 模式/查询/迁移实现模式;若任务主要是性能调查,应将更广泛的数据库性能排查与生产索引策略交给 process-db-report 或 performance-optimization。资源仅在需要时加载详细示例。