1. 建表:订单和客户
先把要保存的数据说清楚。示例中,“远山科技”是客户,“SO-001”是它的一张订单,金额为 1,280 元。客户可以有多张订单,每张订单只关联一个客户。
本章目标
完成本章后,你会有客户、订单两张表和两条客户数据。此时还没有订单页面,重点是把后续功能要保存的信息和关系确定下来。
先理解表、字段和关系
表可以理解为保存同类记录的地方,字段描述每条记录包含什么。一位客户是一条客户记录,客户名称和联系人是它的字段。
订单使用 customerId 指向客户,而不是每次录入时再复制一遍客户名称和联系人。这样多张订单可以引用同一位客户,联系人变化时也有统一的维护位置。
金额用整数分保存,可以明确输入、计算与显示的单位。页面输入的 1280 元要转换成 128000 分;后面检查保存结果时会用到这条约定。
约定字段
客户表 tutorialCustomers:
订单表 tutorialOrders:
状态只使用 draft(草稿)、submitted(待审批)、approved(已通过)、rejected(已驳回)。后面的章节沿用这套命名。
让 AI Agent 建表
将这段需求和上面的字段表一起交给应用目录中的 AI Agent:
迁移放在 database/main/migrations/,种子放在 database/main/seeds/。迁移负责结构,种子负责练习数据。AI Agent 生成迁移后,执行:
db apply 执行迁移后会同时刷新 database/main/collections/ 下生成的数据库描述文件,不需要再单独执行 collections generate。不能靠手工修改这些文件来建表。迁移显示已跳过,可能只是 pnpm dev 启动时已经自动执行,开发服务端同样会刷新这些文件;继续检查实际表结构。
检查结果
请 AI Agent 查询两张表,并核对:客户有两个不同的 ID;订单的 customerId 引用客户 ID;number 有唯一约束;金额是整数。此时订单表为空是正常的。
如果迁移失败,先读出失败的迁移名和原因。不要反复改动已执行文件,也不要为了绕过失败而执行 pnpm nocobase db reset:它会删除所有受管表,清空之前的练习。
下一步:做列表页和详情页。

