Appearance
領域模型
這份文件是 核心概念 的延伸版。如果你只想要一張總圖+表,這頁就夠了。
結構
text
Workspace
└── Environment (Dev / Staging / Prod ...)
└── Instance (一個資料庫 server)
└── Database (一個資料庫)
│
│ transfer
v
Project
└── Plan (想做的變更)
├── PlanCheckRun* (自動體檢,多個)
└── Issue (處理中的單據,含審批)
└── Rollout (執行容器)
└── Task* (每 DB 一個)
└── TaskRun* (每次執行一筆)
Release ── 凍結 Plan 的某個快照
Revision ── 已實際施加到 DB 的紀錄(執行成功後產生)物件總覽
| 物件 | 範圍 | 一句話 | 生命週期 |
|---|---|---|---|
| Workspace | 全域 | 整個 Argus instance 的最外層容器 | 唯一,部署即存在 |
| Environment | Workspace | 例:Dev / Staging / Prod | admin 建立 |
| Instance | Environment | 一個資料庫 server | DBA 接入 |
| Database | Instance | 一個 logical DB | sync 自動發現 |
| Project | Workspace | 變更與審批的範圍邊界 | admin / lead 建立 |
| Plan | Project | 「我想做」 | draft → checking → ready → issued → done |
| PlanCheckRun | Plan | 自動體檢 | pending → running → done(success/warning/error) |
| Issue | Project | 「處理中」 | open → approved → done / canceled |
| Rollout | Issue | 執行容器 | pending → running → done / canceled |
| Task | Rollout, Database | 單一 DB 上的單一動作 | pending → running → done / failed |
| TaskRun | Task | 一次執行紀錄 | running → done / failed(task 可重試→多筆) |
| Release | Project | 凍結版本 | published → archived |
| Revision | Database | 已施加變更紀錄 | append-only |
重要設計決定
1. Plan 和 Issue 為何分開
- Plan:技術內容(SQL、影響範圍、檢查結果)
- Issue:協作流程(誰來審、誰來執行、狀態追蹤)
同一個 Plan 可以被多個 Issue 引用(少數情境,例如重做、補票)。
2. Task vs TaskRun
Task 是「計畫要在這個 DB 上做這件事」,TaskRun 是「第 N 次嘗試這件事」。
- 同一個 Task 可能對應 0..N 個 TaskRun
- 0 個 → 還沒執行
- 1 個 → 一次過
- N 個 → 重試 N 次(含失敗)
這讓我們可以保留所有歷史執行,不會因為重試而蓋掉前一次的 log。
3. Composite PK
plan / issue / task / task_run / plan_check_run / plan_webhook_delivery / db_group / release / task_run_log 都用複合主鍵(通常 (project, id))。
意義:id 本身不唯一,必須帶上 project 才能定位。所有 SQL predicate 都要帶完整 PK。
詳見:Migration / Composite-PK 表清單。
4. Release 與 Revision 的分工
| Release | Revision | |
|---|---|---|
| 對象 | Project(多個 DB) | 單一 Database |
| 時機 | 提早凍結(version cut) | 執行完成後產生 |
| 用途 | 版本管理 / 多環境推進 | 「這個 DB 已經到哪版」 |
| 可變? | 凍結後不可改內容 | append-only |