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 open sketchbook on a drafting table at dawn, a building sketched on one page and a data model on the other, with a pencil, an eraser, a cup and a lamp.
圖片由 AI 生成

Data Architect 課程第 1 章的學習指南。請先閱讀七個模組;這一頁幫你檢查自己記住了什麼。

**關於本學習指南。**它只依據本課程自己的內容,以及 Salesforce 公開發布的考試指南中的目標清單編寫。它從不基於真實的考試題目,也不聲稱知道考試會考什麼。如果你參加過考試,請不要把考題發給我:認證協議禁止分享考題,而且死記答案本來就不是成為架構師的正確方式。

這一章的考試知識點較少,這是有意為之。它講的是架構師如何思考,沒有哪個考試目標專屬於它。但考試是由情景構成的:一個業務、一些數字、一個約束,以及幾個都可能成立的答案。本章的習慣,就是你閱讀這些情景的方式。所以下面的清單寫明每一點支撐的是哪個目標,而不是聲稱它會被直接考到。

邊學邊打勾。每一條都連結到講授它的地方。

像架構師一樣閱讀情景(支撐所有目標)

  • 我能把真正的需求和它所附帶的設計區分開(「我們需要審批人 2 和審批人 3 欄位」與「我們需要追蹤每一次審批」)。(不要照單全收需求)
  • 我會尋找沒人說出口的隱含需求:所有權、新鮮度、失敗、保留、存取。(尋找隱含的需求)
  • 我會給它配上數字:每天的量、每年的量、考慮增長後的量,並能察覺多一個零何時會改變答案。(瞭解你的數字)
  • 在幾個都成立的答案之間,我會對照題中給出的需求和約束,比較每個答案得到什麼、放棄什麼。(知道你放棄了什麼,約束會改變答案)
  • 我把成本、許可和限制看作工具是否合適的一部分,而不是事後才想起的事。(九個問題)

資料模型(支撐 DM-1)

修改已有的東西(支撐 DM-1 和 SDM-2)

  • 我知道為什麼修改欄位類型,或把已有欄位設為必填,可能在日後造成破壞,以及為什麼在程式碼或 Flow 引用該欄位時平台會阻止類型修改。(改動骨架要小心)
  • 我知道寧可新增,不要修改;寧可棄用,不要突襲這一模式,也知道 Field Usage 可以把欄位標記為棄用候選。(改動骨架要小心)
  • 我知道可逆性測試背後的主要-詳細資料關係事實:從記錄的存取權限和所有權跟隨主記錄,刪除主記錄會刪除其從記錄,彙總摘要欄位需要主要-詳細資料關係,而只有當每條記錄都有值時,查閱關係才能轉換為主要-詳細資料關係。(可逆性測試,延伸探索)

許可與共用(支撐 SDM-1)

  • 我知道大批次社群使用者(包括 Customer Community)沒有角色,也不使用共用模型,所以存取權限來自共用集和共用群組,Apex 共用無法覆蓋他們。(一個執行個體:Apex 共用)

失敗(支撐 MIG-1 和整合相關章節)

考試是底線,不是天花板。下面這些是本章中架構師需要的習慣,不管有沒有考題問到它們。

  • **總得有人手握藍圖。**架構是在資訊不完整的情況下做出好的決定,並知道其後果。
  • **資料模型是骨架。**其他一切都建立在它之上。
  • **可逆性測試:**這有多難逆轉,又會有多少東西依賴它?
  • **架構會產生引力。**讓變化變得昂貴的是依賴,而不是變化本身。
  • **想想爆炸半徑,**在 Salesforce 內部,也在整個企業中。架構是雙向交通。
  • **把原因寫下來:**背景、選項、決定、後果、負責人、複審。取代它,不要抹掉它。
  • **在什麼方面最好?**次優的決定可以是最優架構的一部分,只要你知道自己在這樣做。
  • **心裡裝著最優的圖景,**這樣你才知道自己正朝哪個方向偏離它,以及為什麼。
  • **Think Correct. Think Fast.**速度來自在那一刻之前已經完成的思考。
  • **為今天構建。為明天規劃。為失敗規劃。**沒人給你數字時,就按 30% 的增長來算。
  • 學習九個問題,而不只是答案。
  • **AI 是火箭助推器。**生成不等於判斷,不可逆的依然不可逆,人工評審不是走過場。信任,但要驗證。
術語一句話解釋
架構決定難以逆轉、且有大量東西依賴它的決定
可逆性測試這有多難逆轉,又會有多少東西依賴它?
引力隨著時間推移聚集在一個決定周圍的依賴
爆炸半徑一個決定改變時,其他所有跟著變動的東西
決策記錄背景、選項、決定、後果、負責人和複審時點,保持簡短
權衡一個選項得到什麼,以及為此放棄了什麼
隱含需求業務方不開口也期望有的東西,比如載入失敗時能夠恢復
Steve 的「零的個數」資料量上多一個零,就可能改變整個架構
對賬逐條比較本該發生的和實際發生的
棄用把某樣東西標記為即將淘汰,然後有計劃地讓它退役,而不是原地修改它
大批次使用者沒有角色、處於共用模型之外的社群使用者(許可中包括 Customer Community)
結構蔓延因為建立起來很便宜而不斷堆積的物件和欄位,直到模型變得沒人設計過

按課程風格編寫的簡短情景題。開啟答案之前,先想好你的答案。

1. 銷售團隊要求在商機上加審批人 2 和審批人 3 欄位,各帶一個日期。你會問什麼,又可能構建什麼?

問為什麼,以及審批可能有多少級。如果可能多於兩三級,需求就是追蹤每一次審批,而不是加欄位:一個子物件,每次審批一條記錄。重讀不要照單全收需求。

2. 有人想重新命名一個欄位的標籤,另一個人想修改五個系統都已經在儲存的客戶識別符號的格式。哪個更值得你關注,為什麼?

識別符號。標籤改起來很便宜。識別符號通不過可逆性測試:難以逆轉,而且已經有大量東西依賴它。按照出錯的代價來分配注意力。重讀有些決定改起來很便宜。

3. 一個文字欄位已經用了好幾年。業務方現在想讓它存一個數字。你會怎麼做?

不要原地修改它。找出依賴它的東西(Flow、Apex、報表、整合、代理程式),以及舊資料會怎樣。通常的做法是:新加一個欄位,有計劃地遷移,再棄用舊欄位。重讀改動骨架要小心。

4. 1,200 個網點,每個網點每天 100 個預約,一年大約 305 天,每個預約兩條記錄,保留五年,每年增長 30%。大約有多少條記錄,為什麼這很重要?

第一年大約 7,300 萬條記錄(3,660 萬個預約,每個兩條記錄),考慮增長後五年超過 6.5 億條。同樣的功能,多了幾個零,就是截然不同的架構。重讀瞭解你的數字。

5. 一次夜間載入報告一百萬條記錄「已完成」。你怎麼知道它成功了?

對賬。接收方對儲存的每條記錄發出確認;傳送方把發出的和收到確認的進行比較。缺少確認就說明沒有成功,不管作業狀態怎麼說,而且它會告訴你哪些記錄需要重試、轉給人處理或發出告警。重讀部分成功仍然是你需要弄清楚的失敗。

6. 一個擁有 1,500 萬 Customer Community 使用者的社群需要複雜的記錄存取。有人提議用 Apex 共用。問題在哪裡?

他們是大批次使用者:沒有角色,處於共用模型之外,所以沒有可供 Apex 寫入的共用記錄。存取權限來自共用集和共用群組。是許可決定了有哪些共用工具可用。重讀一個執行個體:Apex 共用。

7. 一個 AI 工具在幾分鐘內為一個新應用生成了二十個物件。現在架構師的工作是什麼?

決定我們是否應該只有五個。把模型理解到足以為它辯護的程度:為什麼是這些物件和關係,鍵和主資料在哪裡,規模變大時會怎樣。核實它所依賴的事實。生成不等於判斷。重讀廉價的實現轉移了價值。