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 aisle of a builders' supply warehouse, its racks stacked with ready-made standard doors, windows and stair parts, a cart waiting in the aisle.
图片由 AI 生成

第 2 个模块,共 10 个,属于 Data Architect 课程第 3 章Salesforce 数据架构。每个模块都可以单独阅读。 上一篇:Salesforce 数据平台:不只是数据库 · 下一篇:自己动手:自定义对象

**本模块回答的问题:**Salesforce 已经为你建模了什么,它又是怎么组合在一起的?

在模块 1 里我告诉过你要看向母舰:在发明某样东西之前,先看看 Salesforce 自己是怎么做的。这个模块就是我们真正去看的地方。Salesforce 已经在它的标准对象里为你建模了大量业务,而在我走进的大多数 org 里,其中有两个模型承担了大部分工作:Sales 模型和 Service 模型。在你能决定某样东西是否值得一个自定义对象之前,你需要知道已经有什么。这就是接下来两个模块的内容。

是什么让一个对象成为标准对象

Section titled “是什么让一个对象成为标准对象 ”

标准对象是开箱即用的。它由 Salesforce 构建,有明确的用途,并带有自己的字段和关系。你可以给它加字段,围绕它做自动化,修改它的布局,但你不能重新设计它:标准字段和标准关系属于 Salesforce。

看看这些名称。Account、Contact、Case。**没有前缀,也没有后缀。**这是 Salesforce 为自己保留的空间。我们构建的一切都以 __c 结尾,所以 Salesforce 可以随时添加新的标准对象,永远不会和你 org 里的任何东西冲突。而它确实这样做,每个版本都会。

在发展过程中的某个时候,有人构建了一个没成功的产品对象,只好把它留在身后。这就是为什么 API 名称是 Product2。有人告诉我他们了解 Salesforce 时,这是我的第一道试金石。

从左边开始,是潜在客户(Lead):一个可能成为客户的人。潜在客户其实还不算模型的一部分。它是一个暂存区。当你转换它时,Salesforce 会创建真正的记录:一个客户、一个联系人,如果有一笔交易,还有一个业务机会。这就是为什么我把潜在客户画在一边。

客户是公司。它的联系人是公司里的人。业务机会是和这个客户的一笔交易。到这里,没有什么出乎你的意料。

接下来就有意思了。交易里有什么?每一行都是一个业务机会产品,而业务机会产品并不直接指向产品。它指向一个价格手册条目:这个产品,以这个价格,在这本价格手册里。价格手册条目位于产品和价格手册之间,所以同一个产品可以在标准价格手册里是一个价格,在你的合作伙伴价格手册里是另一个价格。

这是两个先后变成了事物的关系。还记得第 2 章里位于配送和产品之间的配送项目,以及位于狗和技能之间的狗狗技能(Dog Trick)吗?Salesforce 在这里做了完全一样的事,而且做了两次:业务机会产品位于业务机会和价格手册条目之间,价格手册条目位于产品和价格手册之间。当你能读懂这一点,你就能读懂标准数据模型的大部分内容。

Sales 模型 Sales 模型。潜在客户位于左侧,转换为客户。一个客户拥有多个联系人和业务机会。一个业务机会使用一本价格手册,并包含多个业务机会产品。每个业务机会产品按一个价格手册条目定价。一本价格手册列出多个价格手册条目,一个产品出现在多个价格手册条目中,所以每个价格手册条目连接一个产品和一本价格手册。 转换为 拥有 拥有 使用 包含 定价依据 列出 出现在 潜在客户 客户 联系人 业务机会 价格手册 业务机会产品 价格手册条目 产品 恰好一个 零个或一个 一个或多个 零个或多个 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

下面近距离看看这条链,以及把它连在一起的字段:

近距离看定价链 以详细数据模型呈现的定价链。业务机会产品带有它的业务机会 ID、它的价格手册条目 ID、数量和销售价格,并按一个价格手册条目定价。价格手册条目带有它的价格手册 ID、它的产品 ID、标价,以及一个“使用标准价格”标志。价格手册有名称和一个“是否标准”标志;产品有名称和产品代码。 定价依据 列出 出现在 价格手册 价格手册 ID 记录 ID 名称 是否标准 业务机会产品 业务机会产品 ID 记录 ID 业务机会 ID 价格手册条目 ID 数量 销售价格 价格手册条目 价格手册条目 ID 记录 ID 价格手册 ID 产品 ID 标价 使用标准价格 产品 产品 ID 记录 ID 名称 产品代码 恰好一个 零个或一个 一个或多个 零个或多个 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

有一条规则常让人栽跟头:存在一本标准价格手册,任何其他价格手册里的价格手册条目都可以直接使用产品的标准价格。在加载业务机会的产品之前,先弄清楚它用的是哪本价格手册。

现在看看这栋房子的另一边。同样的客户,同样的联系人。出了问题时,客户会提交一个个案。

个案通常与客户拥有的某样东西有关,而 Salesforce 为此有一个对象:资产。在模块 5 里,我会把它称为人们容易忽视的标准对象。它是客户拥有的东西,不管是不是从你这里买的。

那么客户有权获得什么?这就是权利(Entitlement):一个客户有资格获得的支持,通常与某个资产、产品或服务合同相关联。把一项权利放到个案上,个案就知道自己应该得到什么级别的支持。

Service 模型 Service 模型。一个客户拥有多个联系人、个案和资产。联系人报告个案。一个个案可以关于一个资产;一项权利属于某个客户,并保障多个个案。一条线从个案出发,绕过它的一角回到它自己,这就是上级个案(Parent Case):一个个案是零个或多个个案的上级,每个个案有零个或一个上级。 拥有 拥有 报告 拥有 关于 保障 上级 客户 联系人 资产 个案 权利 恰好一个 零个或一个 一个或多个 零个或多个 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

看看那条从个案连回它自己的线。每个个案都有一个 Parent Case(上级个案)字段,它指向另一个个案。这就是自查找(self-lookup):从一个对象指向它自己的关系。很多人第一次看到它时都会困惑,所以下面是我使用它的两个理由。

第一:一个大问题拆分成几个小问题。客户报告说整个安装都瘫了。我们为网络、硬件和配置分别开子个案,每个单独处理,它们都向上汇总解决:所有子个案都解决之前,上级个案就不算完成。

第二:历史。一个个案上个月已经关闭,现在同样的问题又回来了。新个案指回原来的那个,所以任何打开它的人都能看到这件事以前发生过,以及当时是怎么处理的。

等到模块 7 讲关系时,我们会再回到自查找。

注意,客户和联系人在两张图里都位于同一个位置。它们是同样的记录。销售代表和服务专员看的是同一个客户,只是从这栋房子的不同两边去看。这是坚持使用标准对象最有力的理由之一:这些模型本来就是为了相互衔接而构建的。

记录上的东西并不都是字段。合同、照片、PDF 和电子表格都是文件,它们应该放在 Salesforce Files 里,而不是旧的附件模型里,那是遗留功能。如果文档已经存放在 SharePoint Online、OneDrive、Google Drive 或 Box 里,Files Connect 可以让用户从 Salesforce 访问它,而无需把它复制进来。

文件的计算方式和记录不同。Salesforce 把存储分成两部分:文件存储存放附件、Files、Salesforce CRM Content、Chatter 文件等,数据存储存放你的记录。当每条记录都带有照片或扫描件时,文件存储会增长得很快,所以大量图片,比如来自现场应用的照片,往往完全应该放在 Salesforce 之外,Salesforce 只保留一个链接。模块 4 会再回到这一点。

数据存储的计算方式也和数据库不同。在普通数据库里,一张两列、一百万行的表很小,而一张一百列、一百万行的表就是一头大象。Salesforce 对它们一视同仁:**大多数记录按大约 2 KB 计算,不管它有多少个字段。**也有例外。市场活动算得更多,电子邮件消息按实际大小计算,个人客户按大约 4 KB 计算,因为它既是客户又是联系人。

给你一个小技巧。每当我走进一个新的 org,最先去的地方之一就是设置 → Storage Usage(存储使用情况)。我甚至会在第一次通话时就请客户给我发一张截图。那个界面不会撒谎。它告诉你哪些对象在增长,哪些已经是大象了。

客户和联系人模型非常适合一家公司以及公司里的人。但如果你的客户不是一家公司呢?如果是一个人呢?

这就是个人客户:把一个客户和一个联系人合并成一条记录,用于个人。他们的联系人字段会一起带过来,其中的自定义字段会带着自己的后缀 __pc 出现。每条个人客户同时占用客户和联系人的存储,因为在底层它两者都是。

在你启用它之前,先提醒一句:**个人客户一旦启用,就无法禁用。**这是第 1 章里可逆性测试最纯粹的形式。模块 5 会告诉你我对什么时候值得用它的立场。

  • 在设计任何新东西之前,Salesforce 已经建模了业务的哪些部分。
  • 一个概念落在 Sales 模型、Service 模型,还是两者都有,同时知道它们共享客户和联系人。
  • 文档和图片放在哪里:Salesforce Files、一个连接的文件系统,还是放在平台之外并保留一个链接。
  • 这些数据在存储上要花多少,按 Salesforce 的方式计算:按记录,而不是按列。
  • 客户是一家公司还是一个人,在打开某个无法关闭的东西之前就弄清楚。

那么当 Salesforce 没有你需要的东西时呢?你自己构建。这是下一个模块的内容。