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 課程第 2 章的學習指南。請先閱讀六個模組;這一頁幫你檢查自己記住了什麼。

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

本章是考試中「資料建模與資料庫設計」部分的基礎,這部分佔整個考試的四分之一。本章講的是思考方式;下一章Salesforce 資料架構講的是平台如何構建它。所以關於物件、欄位和關係的大部分考點,都需要結合這兩章。

本章中最可能在考試中用到的要點。每一條都對應一個考試目標,並連結到講授它的地方。邊學邊打勾。

DM-1:比較設計 Salesforce 資料模型的技術

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

  • **暫時忘掉 Salesforce。**先為業務建模,再把它對映到客戶和連絡人。
  • **留意背後藏著兩樣東西的那個詞。**在 Steve Trucking,「客戶」既是零售合作夥伴,也是收貨人。
  • **模型是對話的一部分。**你的第一個模型不是為了正確,而是為了讓你看到自己哪裡錯了。
  • **給連線起名字。**方框相同的兩個模型,含義可能不同。
  • 對每一個關係都問一問**「現在,還是隨時間變化?」**
  • 唯一、不變、無含義、絕不是 PII。
  • **把事實放在它該在的地方,**然後有意地適度回退,並把原因寫下來。
  • **反規範化不會消除複雜度,只會轉移它。**要知道誰擁有真相。
  • **一個真相來源,多種形狀:**介面、報表、資料倉儲和 AI。
  • **不要從設定介面開始設計。**在點選「新建自訂物件」之前先畫出模型。
  • 把每一個物理層面的決定都追溯到業務需要的某樣東西。
術語一句話解釋
實體業務在意併為之儲存資料的一樣東西
候選實體一個在你問過之後可能成為實體的名詞
屬性描述一個實體的事實
關係兩個實體如何連線,用業務語言命名
基數這邊的多少個與那邊的多少個相關
可選性關係是必需的,還是可以為零
鴉爪線末端表示「多」的標記
交叉物件Salesforce 構建多對多關係的方式:同時是兩個父物件的子物件
概念模型業務中有什麼以及它們如何關聯;不涉及 Salesforce
邏輯模型資料:屬性、唯一 ID 和關係,仍不與某個平台繫結
物理模型平台將如何構建它:物件、欄位和關係類型
自然鍵業務中本來就存在的識別符號,比如卡車的 VIN
代理鍵只為識別記錄而建立的識別符號
外部識別符號另一個系統為同一條記錄所用的 ID,需要保留和對映
規範化(1NF、2NF、3NF)把每個事實放在它該在的地方:每個欄位一個值,事實關於整個鍵,不存關於其他事實的事實
反規範化出於一個你能說出來的原因,有意地複製或扁平化資料
更新異常同一個事實存放在很多地方,於是一次修改會讓一些副本出錯

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

1. 業務方告訴你一個配送小組駕駛一輛卡車。六週後,有人問某一天是哪個小組開的 117 號卡車。模型本應該有什麼?

一個配送小組分配:把配送小組和卡車之間的關係作為一條獨立的記錄,帶有開始日期、結束日期和路線。隨著時間推移,配送小組和卡車是多對多關係,而業務在意其歷史。卡車上的一個欄位會被覆蓋掉。重讀時間會改變關係。

2. 一個團隊提議用每位收貨人的電話號碼作為唯一 ID,「因為它是唯一的」。你怎麼說?

它通不過檢驗:電話號碼會變,也會被共用,所以它既不是不變的,也不是可靠唯一的,而且它是個人資訊,會被複制到每一個連結到這條記錄的系統裡。使用一個無含義的生成 ID,把電話號碼作為屬性保留。重讀然後我們得談談唯一 ID。

3. 一個配送物件有項目 1、項目 2 和項目 3 三個欄位。來了一次有四個項目的配送。真正的問題是什麼,怎麼修?

模型把一個重複的結構藏在了欄位裡(一個第一範式問題)。修法不是加一個項目 4 欄位,而是建一個配送項目實體,作為配送的子實體,讓每個項目都是一條記錄。重讀第一範式。

4. 每次配送都存了配送中心經理的名字。經理換人了。哪裡出了問題?

一個關於別的東西(配送中心)的事實被存在了配送上:這是一個第三範式問題,而現在它成了橫跨幾百條記錄的更新異常。經理屬於配送中心;配送指向配送中心。重讀第三範式。

5. 停靠點類型(僅配送、加安裝、加拉走舊貨)需要一個時長、配送小組技能和一份檢查清單。用挑選清單還是物件?

用物件。它的資訊不止一列,由業務方管理,而且按自己的節奏變化。配送的狀態是一份短小穩定的標籤清單,保持為挑選清單。重讀查閱關係還是挑選清單?。

6. 合作夥伴想要一份按區域統計的準時率記分卡,而區域存在配送中心上。你把區域複製到了每次配送上。你必須決定什麼?

誰擁有真相,副本如何保持同步,以及舊的配送應該保留它們發生時為真的區域,還是在配送中心劃到別的區域時跟著變。反規範化轉移了複雜度,並沒有消除它。重讀有時報表勝出。

7. 像坐下這樣的技能可能會關聯幾十萬只寵物。從寵物技能到技能,用主要-詳細資料關係還是查閱關係?

用查閱關係。Salesforce 的建議是單個父記錄下不超過 10,000 條子記錄,而一項熱門技能會超過這個數。主要-詳細資料關係適合從寵物技能到寵物,因為一隻寵物的技能永遠不會更換父記錄,而且一隻寵物只會少數幾項技能;也正是主要-詳細資料關係讓寵物能彙總它的已會技能數。重讀坐下、別動、建模。