資料建模

描述業務物件,資料庫和 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 與檔案儲存,都是開源版的一部分。

下一步

繼續完善你的評估材料。