Skip to content

資料模型是骨架

另有 28 種語言版本

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

An older room opened up mid-renovation: its timber beams exposed, a new beam held on steel props, the furniture waiting under dust sheets.
圖片由 AI 生成

第 2 個模組,共 7 個,屬於 Data Architect 課程的第一章像資料架構師一樣思考。每個模組都可以單獨閱讀。 上一篇:像架構師一樣思考 · 下一篇:可逆性測試

**本模組回答的問題:**為什麼資料模型比建在它之上的任何東西都重要?又該如何評判一個數據模型?

我教資料架構時,有一句話會一再提起:資料模型是骨架。

資料模型是系統的骨架。其他一切都圍繞它構建,正是它把身體的其餘部分撐在一起。你看一個人時看不到骨頭,但骨頭決定了這個人站得多高、怎麼活動、能扛多重。

想想我們在 Salesforce 實施中構建的所有東西。我們圍繞資料模型構建自動化。我們針對它編寫 Apex,編寫讀取和更新它的 Flow。我們構建整合,把資料送進去、拉出來。我們在它之上做報表和分析,圍繞它設計安全。而且越來越多地,我們構建需要理解這些資料並據此行動的 AI 代理程式。所有這些都依賴於底層的結構。

這就是為什麼儘早把資料模型做對如此重要。骨架以後可以改,但多半會很痛。

好的資料模型始於一個簡單的問題:**業務真正需要表示的是什麼?**不是「我們有哪些 Salesforce 物件?」,更不是「我能快速構建什麼?」

我們要先理解業務。這個業務裡重要的東西是什麼?它們之間是什麼關係?誰擁有它們?它們如何隨時間變化?什麼需要被記住,什麼在各個業務流程之間共用?只有理解了這些,我們才應該開始把它們轉化成物件、欄位和關係。

這聽起來理所當然,但實際上很容易本末倒置。有人認出某個東西看起來像商機、案例或資產,就立刻開始圍繞它設計。有時這完全正確。有時我們是在把方釘往圓孔裡塞,而一旦圍繞這個決定構建了足夠多的東西,再把釘子拔出來就會代價高昂。

有個問題我經常聽到。一個客戶的業務可能有很多個送貨地點。每個地點應該是一個客戶,還是一個自訂物件?回答之前,先注意你需要先知道什麼:地點對這個業務意味著什麼,它會經歷什麼。這就是先給業務建模,再談物件。(我會在第 3 章給出我的答案。)

審視一個數據模型時,我希望它通過三項檢驗:支撐業務,隨業務成長,並且效能過關。

**支撐。**模型必須支撐業務真正想要達成的目標。一個技術上能存下資料的模型,和一個真正把業務表示好的模型,差別很大。如果因為模型不太合適,我不斷新增奇怪的欄位、特殊的標誌、複雜的自動化和例外,我就會開始懷疑問題是否真的出在自動化上。也許是模型錯了。好的模型應該讓業務更容易理解,而不是更難。

成長。我說的成長,不只是指記錄更多。資料量確實重要:一萬條記錄和一億條記錄帶來的問題截然不同。但業務也會在複雜度上成長。它們會增加產品、進入新市場、收購公司、改變流程、增加渠道、連線新系統。它們會發現,原以為是一樣東西的,其實是五樣不同的東西。一個今天執行得很漂亮的模型,如果沒有給明天留出空間,就可能變成陷阱。這就是為什麼我更喜歡通過新增來成長的設計,而不是不斷修改已有部分的設計。新增新東西,通常比重新定義幾十樣東西都依賴的東西要容易。

效能。資料不會只是靜靜地待在那裡。我們寫入它、查閱它、查詢它、共用它、對它做報表、整合它,而且越來越多的 AI 系統會在行動前把它作為上下文檢索出來。一個模型在圖上可能很漂亮,執行起來卻很糟糕。所以我們既要為資料如何儲存而設計,也要為資料將如何被使用而設計。

而且它必須持續保持效能。它必須在規模下保持效能:使用者數增加時,資料量增加時,在真實條件下和高峰時段,在一年中最忙的那一天而不是平均的一天。當意外發生時,它也必須繼續保持效能。

支撐。成長。效能。整門課裡我們會一再回到這三項檢驗。

支撐、成長、效能 資料模型是系統的基礎,下方有三項檢驗。支撐:它符合業務嗎?成長:它能靠新增而不是修改來成長嗎?效能:它在大規模和高峰時撐得住嗎? 資料模型 系統的基礎 支撐 它符合業務嗎? 成長 能靠新增而非修改來成長嗎? 效能 在大規模和高峰時撐得住嗎? 支撐。成長。效能。我們會一再回到這三項檢驗。 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

過於扁平、過於複雜,或者乾脆錯了

Section titled “過於扁平、過於複雜,或者乾脆錯了 ”

我見過資料模型以三種方式出錯。

第一種是一開始就選錯了東西。我們因為某個標準物件看起來夠接近就用了它,然後花好幾年不斷新增例外,因為它從來就不合適。這就是方釘。

第二種是把模型做得過於扁平。所有東西都放進一個物件裡,一開始這顯得簡單極了。然後業務成長,我們發現其中有些東西有自己的生命週期,可能有多個執行個體,需要自己的安全設定,或者有自己的關係。突然之間,我們只能用欄位 1、欄位 2、欄位 3,或者越來越複雜的標誌和自動化,來表示一對多關係。模型沒有給我們留下任何成長的空間。

第三種是相反的錯誤:我們過度規範化。我們畫出一張優雅的圖,物件一個接一個,每個概念都分得清清楚楚。技術上很漂亮,用起來很痛苦。使用者很難理解它,頁面配置和 Lightning 頁面上一個接一個的相關清單,會讓人感覺深不見底。查詢變得更復雜,自動化要跨越更多關係,報表更難做,平台為了回答普通的業務問題也要做更多工作。

那麼扁平和規範化,哪個正確?沒有公式。你在腦子裡裝著一個最優模型的樣子,並在偏離它時理解其中的權衡。這就是架構的藝術,我們會在模組 4以及下一章學習如何建模時再回到這個話題。現在,先認識到:結構本身就是一個架構決定。

過於扁平、大致合適、過度規範化 同樣的核准,三種建模方式。過於扁平:一張商機表,把核准人 1、2、3 及其日期都做成欄位。大致合適:一個客戶擁有多個商機,一個商機擁有多筆核准,每筆核准都有一位核准人和一個日期。過度規範化:商機被拆到六張相連的表裡,從核准請求、核准步驟,到步驟核准人、核准人角色和核准決定。 過於扁平:一張雜亂的表 大致合適 過度規範化 擁有 擁有 商機 金額 階段 核准人 1 核准日期 1 核准人 2 核准日期 2 核准人 3 核准日期 3 客戶 商機 核准 核准人 核准日期 商機 核准請求 核准步驟 步驟核准人 核准人角色 核准決定 沒有公式。心裡裝著最優模型的樣子,並在偏離它時理解其中的權衡。 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

系統一旦執行起來,我對資料模型的根本性改動就會非常謹慎。

假設一個文字欄位已經存在多年,有人說:「我們現在其實不那麼用它了,把它改成數字吧。」這聽起來只是改個欄位。但有什麼依賴這個欄位?Flow、Apex、報表、整合、資料管道、外部應用、AI 代理程式。歷史資料又會怎樣?只要還有程式碼或 Flow 引用某個欄位,平台本身就不允許你修改它的類型,這就說明了這個改動波及得有多遠。

有時正確的做法是不去修改已有的東西。視改動的嚴重程度而定,我寧願新建一個,刻意地遷移,再棄用舊結構:

寧可新增,不要修改。寧可棄用,不要突襲。

Salesforce 甚至讓你可以在後設資料裡把這句話說出來:欄位的 Field Usage 可以設為 DeprecateCandidate,即「計劃棄用,不再使用」。這會給每個閱讀該物件的人標出這個欄位;它不會隱藏欄位,所以讓它退役仍然是你要去執行的一個決定。

因為一旦架構的其他部分依賴於某樣東西,改變它的含義可能比改變它的名字危險得多。最糟糕的情況是欄位名不變而內容變了:下游的一切仍然信任這個名字。

棄用,而不是修改:替換一個欄位 同一筆配送出現三次。之前:貨件欄位以文字儲存。過程中:貨件(文字)被劃掉並標為已棄用,旁邊多了一個標為新的件數(數字)欄位,同時每個 Flow、報表和整合都逐一遷移過去。之後:只剩下件數(數字)。寧可新增,不要修改;寧可棄用,不要突襲。 之前 過程中 之後 新增新欄位 遷移所有使用方 配送 配送日期 狀態 貨件(文字) 配送 配送日期 狀態 貨件(文字) 已淘汰 件數(數字) 新增 配送 配送日期 狀態 件數(數字) 寧可新增,不要修改。寧可棄用,不要突襲。 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

即使是勾選欄位上的必填核取方塊這樣簡單的事,也可能變成一顆定時炸彈。如果你已經收集了資料,有些記錄就不會填寫這個欄位。然後幾天、幾週或幾個月後,有人更新其中一條記錄,儲存卻因為必填欄位而失敗,而且誰都沒有那個值。把欄位設為必填這樣簡單的改動,可能帶來意想不到的、延遲出現的後果。我們會在第 3 章再談必填,以及一個值什麼時候才真正為人所知。

考試之外:AI 也建在骨架之上。讓 AI 工具構建一個應用,它會在幾分鐘內生成物件、欄位、Flow、Apex、元件和測試。如果最初的資料模型是錯的,我們並沒有避免壞決定的後果,而是加速了它們,因為生成的每一層都多了一樣依賴那個結構的東西。這就是為什麼我希望由人類架構師來評審 AI 生成的資料模型,理解它併為它負責。模組 7 會進一步討論這一點。

在這門課裡,我們會談到很多技術:物件和關係、大數據量、查詢、整合、遷移、事務、安全、Data 360 和 AI。在這一切之下,是資料模型。

如果模型能支撐業務,能隨業務成長,並且在我們使用資料的各種方式下效能過關,我們就打下了堅實的基礎。如果基礎錯了,之後的一切都會更難。

**資料模型是骨架。**架構師在設計骨架時應當非常小心。改動現有結構,可能引發連鎖反應。

  • 模型是否能支撐業務、隨業務成長,並在資料的各種使用方式下效能過關。
  • 一個概念是適合某個標準物件,還是一枚方釘。
  • 模型要做得多扁平或多規範化,以及為什麼。
  • 對骨架的改動應該是一次新增、一次遷移還是一次棄用,而不是原地修改。