数据建模

描述业务对象,数据库和 API 随之而来。

以一个订阅计费系统为例:客户、套餐、席位、MRR、续约日、状态。在 ObjectOS 里,这就是一份紧凑的对象定义——表、迁移、查询引擎和 REST 端点由运行时供给;你的 Agent 能写它,你的团队能在对象设计器里逐字段微调它。

ObjectOS product surface connecting business data, applications, and AI agents
AI 编写元数据 对象、权限、流程、工具
审阅 diff 业务权限、数据访问、审批
运行时 执行策略 UI、API、审计、MCP、动作
20+
字段类型——文本、货币、百分比、lookup、公式、文件
0
手写端点——REST API 直接来自元数据
原地
现有数据库无需迁移即可联邦接入

模型即源码

一份对象定义,schema、规则和 API 全在里面。

这就是那个订阅对象:字段、关系、校验和历史追踪都在一份可审阅的定义里。运行时把它变成表和迁移,在每条写路径上执行规则,并对外提供 API——同一份定义,Agent 能读懂扩展,设计器能打开微调。

import { ObjectSchema, Field } from '@objectstack/spec/data';

export const Subscription = ObjectSchema.create({
  name: 'billing_subscription',
  label: 'Subscription',
  searchableFields: ['plan', 'status'],
  fields: {
    customer: Field.lookup('crm_account', { label: 'Customer', required: true }),
    plan: Field.select({
      label: 'Plan',
      options: [
        { label: 'Starter', value: 'starter', default: true },
        { label: 'Team', value: 'team' },
        { label: 'Business', value: 'business' },
      ],
    }),
    seats: Field.number({ label: 'Seats', min: 1 }),
    mrr: Field.currency({ label: 'MRR', scale: 2, min: 0 }),
    renews_at: Field.date({ label: 'Renews at' }),
    status: Field.select({
      label: 'Status',
      trackHistory: true,
      options: [
        { label: 'Active', value: 'active', default: true, color: '#10B981' },
        { label: 'Past due', value: 'past_due', color: '#F59E0B' },
        { label: 'Churned', value: 'churned', color: '#EF4444' },
      ],
    }),
  },
});

为业务建模

把订阅系统一步步建出来

定义贴着业务的说法走:客户、套餐、续约。没有 ORM 类,没有散落各处的 schema 文件——下面每一步都停留在同一份定义里。

对象与关系

订阅 lookup 到客户,发票主从挂在订阅下,多对多标签随取随用——引用完整性由运行时维护,删错父记录这种事故不再发生。

校验与规则

"席位数不能低于已分配用户""MRR 不能为负"——约束以表达式声明在字段旁边,在 UI、API、导入和 AI 工具的每条写路径上生效。

公式与默认值

"年化收入 = MRR × 12""续约日默认下单日 + 365"——计算字段和动态默认值用全平台同一种表达式语言,任何入口算出来都一致。

类型化的业务字段

货币自带精度与符号,百分比自带上限,选择列表自带颜色与历史追踪——字段类型携带语义,UI、API 和 Agent 都能直接理解。

对象设计器

字段级微调,图上看关系,一键接存量库

Agent 写的定义,管理员在开源控制台里打开就是可视化界面——改一个字段不需要读一行代码。

字段编辑器

点"+ 添加字段"从 20+ 类型中挑选,拖拽行排序,字段分组成节;右侧检查器改标签、必填、选项和颜色,改动即成草稿。

发布前看 diff

设计器的审阅模式把草稿与已发布版本逐项对比——新增、修改一目了然,和审 Agent 的 diff 是同一种体验。

ER 图设计器

实体框、带基数标注的关系连线、自动布局和小地图——整个数据模型一张图看懂,拖一条线就是一个新关系。

数据源同步

连接表单按驱动自动生成,点"测试连接"验证,再从远程表清单里勾选——introspect 现有 ERP/CRM 数据库,外部表直接生成受治理对象。

从模型到运行的系统

那些你再也不用写的部分

下面这一切都由定义生成并保持同步——这正是 AI 编写的变更能始终保持为一份小而可审的 diff 的原因。

表与迁移

给订阅加一个"折扣"字段,Postgres、MySQL、SQLite、Turso 或 MongoDB 上的迁移自动生成——没有 SQL 脚本要写、要排序。

查询引擎

"本月续约且 MRR 大于 1 万的订阅"——一种查询语言搞定过滤、关系与聚合,每个请求都被权限模型约束。

REST API

对象存在的那一刻,CRUD、批量与发现端点就存在了——移动团队第二天就能开工,带版本、带文档、带权限校验。

文件存储

合同 PDF、发票附件存放在本地磁盘或 S3 兼容存储上,访问控制跟随其所属的记录。

决策面

改什么、谁来审、跑什么

业务需求AI 编写运行时供给
管理订阅与客户对象、字段、关系表、迁移、引用完整性
席位数不能超卖一条表达式校验规则在 UI、API、导入和 AI 写入上强制执行
给移动团队一个 API不用多写——对象本身就够了带权限与发现的 REST 端点
继续用手里的 ERP 数据库一份联邦定义introspect 外部表,挂载为受治理对象

评审清单

数据评审应确认

  • 每个对象都对应一个有归属人的业务概念。
  • 校验写在定义里,而不是写在界面里。
  • 派生值是公式,而不是复制粘贴的逻辑。
  • 外部系统走联邦或集成,而不是被复刻一份。
  • API 访问与 UI 走同一套权限模型。

FAQ

这一页应该回答的问题

支持哪些数据库?

目前支持 Postgres、MySQL、SQLite、Turso 和 MongoDB,数据层基于驱动架构。联邦还能在不搬移数据的情况下挂载外部数据库的表。

对象设计器和 ER 图在开源版里吗?

在。对象设计器、ER 数据模型设计器、数据源同步,连同对象、关系、校验、公式、迁移、查询引擎、REST API 与文件存储,都是开源版的一部分。

下一步

继续完善你的评估材料。