SuperAPI AI 工具集

schema-builder

编程与开发

查看项目

更新于 10-15 18:31

技能介绍

用途

Schema Builder 用于设计和生成 Convex 数据库 schema,遵循关系、索引和校验器方面的最佳实践。当需要创建新的 convex/schema.ts 文件、向现有 schema 添加表、设计数据模型关系、添加或优化索引,或将嵌套数据转换为关系型结构时,可以使用该技能。

主要能力

该技能围绕以下 schema 设计原则展开:

  • 文档-关系型:使用扁平文档加 ID 引用,而不是深层嵌套。
  • 索引外键:始终为用于查找的字段(如 userId、teamId 等)建立索引。
  • 限制数组:数组仅用于小型、有界的集合(少于 8192 项)。
  • 类型安全:使用 v.* 类型的严格校验器。

使用方式

资料提供了 schema 模板,展示如何从 convex/server 导入 defineSchema、defineTable,从 convex/values 导入 v,并定义表字段、可选字段、关系 ID、枚举(union + literal)、时间戳,以及单字段索引、复合索引和时间索引。

常见模式包括:

  • 一对多关系:users 与 posts,posts 通过 userId 引用 users,并建立 by_user 索引。
  • 多对多(中间表):users、projects 与 projectMembers 中间表,包含 userId、projectId、role,并建立 by_user、by_project、by_project_and_user 索引。
  • 层级数据:comments 表通过 postId 和可选的 parentId 引用自身,并建立 by_post、by_parent 索引。
  • 小型有界数组:users 表中使用 roles、tags 等小型有界数组。

校验器参考涵盖:基本类型(v.string()、v.number()、v.boolean()、v.null()、v.id("tableName"))、可选(v.optional)、联合类型/枚举(v.union(v.literal(...)))、对象(v.object)、数组(v.array)、记录(v.record)、任意类型(v.any(),尽量避免)。

索引策略包括:单字段索引用于简单查找;复合索引用于过滤查询;并指出 by_a_and_b 通常可覆盖 by_a,应移除冗余索引。

检查清单包括:所有外键都有索引;常见查询模式有复合索引;数组小型且有界(或转换为关系);所有字段有合适的校验器;枚举使用 v.union(v.literal(...)) 模式;时间戳使用 v.number()(自 epoch 起的毫秒数)。

从嵌套迁移到关系型时,资料给出了前后对比:迁移前 users 表内嵌 posts 数组、posts 内嵌 comments 数组;迁移后拆分为 users、posts、comments 三张表,并通过 userId、postId 建立引用和索引。

适用场景

适用于使用 Convex 进行数据库建模的开发工作,尤其是需要规范化数据结构、优化查询索引、保证字段类型安全的场景。

限制

资料未提供该技能的收费、价格、平台支持范围、具体安装命令或效果保证等信息,这些内容暂未提供。