資料建模

描述業務物件,資料庫和 API 隨之而來。

以一個訂閱計費系統為例:客戶、套餐、席位、MRR、續約日、狀態。這些物件、它們的欄位,以及它們之間的關係,就是你的業務本體的核心;在開源 ObjectStack 執行環境上,這個核心就是一份緊湊的定義——表、遷移、查詢引擎和 REST 端點由執行環境供給;你的 Agent 能寫它,你的團隊能在物件設計器裡逐欄位微調它,而在 ObjectOS 上,產品內 AI Builder 能從一句描述起草出同樣的物件與欄位。

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 寫的定義,管理員在開源 ObjectStack 控制台裡開啟就是視覺化介面——改一個欄位不需要讀一行程式碼。

欄位編輯器

點"+ 新增欄位"從 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,資料層基於驅動架構。聯邦還能在不搬移資料的情況下掛載外部資料庫的表——預設只讀、尚在早期:讀路徑是成熟的那一條。

這裡哪些是開源的,ObjectOS 又加了什麼?

整個資料層都是開源的:物件、關係、校驗、公式、遷移、查詢引擎、REST API、檔案儲存,以及 Console 裡的物件設計器、ER 圖和資料來源同步——Apache-2.0,開發與生產之間沒有功能門檻。ObjectOS 加的是產品內 AI Builder:它的內建工具能從一段對話建立包與物件、增刪改欄位,並在生效前排隊等人審批——在 Cloud 與 Enterprise 上提供。

下一步

繼續完善你的評估材料。