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 empty distribution center at dawn: a truck backed to the dock, pallets of parcels, a route board, crew vests on hooks and a manifest on a clipboard.
图片由 AI 生成

第 1 个模块,共 6 个,属于 Data Architect 课程第 2 章为含义建模数据。每个模块都可以单独阅读。 上一篇:本章概览 · 下一篇:画出关系

**本模块回答的问题:**如何在一次业务对话中找到数据模型的雏形?

和客户第一次通话时,我会做的一件事就是聆听名词。

我说的不是第一次设计会议,而是最初的那次对话,那时我还在努力理解这个业务以及他们想要达成什么。

他们在说,我在听。

我在留意这样的词:

零售合作伙伴。收货人。配送中心。装货清单。配送。路线。配送小组。卡车。

这些名词会立刻引起我的注意,因为在这段对话的某处,藏着我的数据模型的雏形。

我不会等到自认为完全理解了问题才开始。我在聆听的同时就开始看到数据:我听到名词,开始勾勒它们之间的关系,而这张草图又帮我构思下一次对话。有时,和客户的第一次会议结束时,我已经画好了一份只属于自己的数据模型。

对我来说,这一切从名词开始。

在这里,我希望你抵制一种本能,如果你做 Salesforce 管理员已经有一段时间,这种本能会特别强烈。

客户说客户,你想到的是:

客户(Account)。

他们说人,你想到的是:

联系人(Contact)。

他们说配送中心,你已经在琢磨是否需要一个自定义对象了。

先别这样做。

此时此刻,我不在乎一个客户最终会成为客户(Account)、个人客户、自定义对象还是别的什么。首先,我想理解业务。

这就是为业务建模和配置 Salesforce 的区别。如果我从 Salesforce 对象开始,我的思路就已经被限制在一种实现上了。我也许最后会落到预想的地方,但我希望是业务把我带到那里,而不是因为客户和联系人恰好是我最先认识的两个对象。

所以,在几分钟内,忘掉 Salesforce。去听真正经营这个业务的人如何描述他们的世界。

在聆听一个业务之前,我们先来听听大家都已经懂的东西。我在现场授课时,会从狗讲起。

这是一只狗:Marcus 是 Bella 的主人。Bella 由 Maple Ridge Kennels 繁育。她是一只拉布拉多,会坐下、别动和握手。

聆听名词:Marcus、Bella、Maple Ridge Kennels、拉布拉多、坐下。不过这些都是名字,是具体的事物。我想要的是每个名字所属的那一类事物。Bella 是一只狗(Dog)。Marcus 是主人(Owner)。Maple Ridge Kennels 是繁育者(Breeder)。拉布拉多是一个品种(Breed)。坐下是一项技能(Trick)。五个名词,五个候选方框。

狗狗名词画成普通方框 五个普通方框,之间没有连线:主人和繁育者并排在上方,狗在它们下方、位于两者之间,品种和技能上下排列在右侧。 主人 繁育者 狗 品种 技能 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

然后,我对每个名词都会问:**它是一个在做某项工作的人,还是一份数据?**Marcus 是一个人。但拥有 Bella 并不是一项工作;它是关于 Bella 的一个事实,而且迟早会有人问:“这只狗的主人是谁?”所以主人属于模型。教会 Bella 握手的训练师是一个在做某项工作的人,可能永远不需要一个方框,除非业务开始问是谁教会了哪项技能。

再注意候选这个词。品种真的是一个独立的方框,还是只是写在狗身上的一个词?先记住这个问题;我们会在模块 4做规范化时回答它。

这就是整个技巧,用在一个小东西上。现在我们来聆听一个真实的业务。

我们来听听 Steve Trucking,这家家族企业我们会在整门课中使用。它把大件商品(冰箱、洗衣机、电视)从大型零售商的配送中心送到人们家里,其中一部分还负责安装。

在第一次对话中,我们听到:

  • 零售合作伙伴(Retail Partner)
  • 收货人(Recipient)
  • 配送中心(Distribution Center)
  • 装货清单(Manifest)
  • 配送(Delivery)
  • 路线(Route)
  • 配送小组(Crew)
  • 卡车(Truck)

这已经很有用了。我可以开始在白板上画方框了。

所以把名词放进矩形里。此时它们就只是这样:方框。没有连线,没有颜色,没有任何表示 Salesforce 的东西。课程后面,形状和颜色会开始有含义。现在,一个矩形只是业务谈论的一样东西。

然后开始给它们定位。放置每个方框时,你要想两件事:它们彼此如何关联,以及它们是哪类数据。有些是客户数据:我们打交道的企业和人。有些是交易数据,比如订单和订单项目:一再发生的事情。还有些是参考数据,比如一个企业提供的产品或服务:工作所依赖的东西。

在 Steve Trucking,零售合作伙伴和收货人是客户数据。装货清单、配送和路线是交易。配送中心、配送小组和卡车是工作所依赖的东西。

白板上的名词 八个普通方框,每个对应与 Steve Trucking 第一次对话中听到的一个名词,按数据类型分组。客户数据:零售合作伙伴和收货人。交易数据:装货清单、配送和路线。参考数据:配送中心、配送小组和卡车。它们之间还没有连线。 客户数据 交易数据 参考数据 零售合作伙伴 收货人 装货清单 配送 路线 配送中心 配送小组 卡车 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

但这里有一个重要的词:候选。

名词是线索。它不会自动成为一个实体,更不会自动成为一个 Salesforce 对象。

在需求调研会上,我会把每个名词都记下来。他们说出的每个名词,我都会问自己一个问题:**这是一个在做某项工作的人,还是一份数据?**业务拓展经理是一个在做某项工作的人。那是一个用户、一个角色,也许是一个权限集。订单、发票、行项目:这些是数据。两者都重要,但它们在设计中会落到截然不同的地方,尽早把它们分开,可以让我免于给组织架构图上的每个职位都画一个方框。

那么,这些名词中有一些会是人。在 Steve Trucking,那就是等着冰箱的收货人、零售合作伙伴那边发送装货清单的人,以及配送小组:卡车上的司机和助手。这些是角色,而角色看起来也许不像数据。但当人对数据采取行动,或者与数据相关时,他们本身就需要在数据中得到体现。这是谁送的?谁签收的?谁发的装货清单?所以很多角色,有时是全部角色,最终也会进入模型。

听听 Steve Trucking 怎么说话,你会注意到一件事。他们从不只说“客户”。客户有两种。零售合作伙伴是 Steve Trucking 为之配送的大型零售商:它发送装货清单,并按每次配送付费。收货人是冰箱送达的那个人。收货人是从商店买的冰箱,可能从没听说过 Steve Trucking。

如果我只画了一个叫“客户”的方框,我就把两样完全不同的东西混在一起了。

也许配送中心足够重要,需要有自己的记录、历史、关系和属性。

也许另一个名词最后只不过是别的东西的一个属性。

这正是我们要去发现的。我们还没有在创建对象,我们在建立对业务的理解。

名词给了我一个起点。然后我去听业务如何把它们联系起来。

一个零售合作伙伴运营着若干配送中心。

一个零售合作伙伴为每个配送中心的每个配送日发送一份装货清单。

一份装货清单列出若干配送。

一次配送送达一位收货人。

一条路线是一天的行程,包含大约十个停靠点。

一个两人配送小组驾驶一辆卡车。

现在,有些东西正在发生。我看到的不再是一串名词,而是开始看到一个模型。

名词之间的第一批连线 模块 1 中 Steve Trucking 的八个方框,仍按客户数据、交易数据和参考数据分组,现在用带标签的普通连线连起来,线的两端没有任何标记:一个零售合作伙伴运营若干配送中心并发送装货清单,一份装货清单列出若干配送,一次配送送达一位收货人,一个配送小组驾驶一辆卡车。路线还没有连线。 客户数据 交易数据 参考数据 运营 发送 列出 送达 驾驶 零售合作伙伴 收货人 装货清单 配送 路线 配送中心 配送小组 卡车 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

问题也在这里开始出现。

一个零售合作伙伴可以有多个配送中心吗?

一次配送和一个停靠点是同一回事吗?

一个停靠点可以给两位收货人送货吗?

一个配送小组总是同样的两个人吗?

我们在意上个月哪个配送小组开的是哪辆卡车,还是只在意他们今天开的是哪辆?

注意我们在做什么。我们还没有在问 Salesforce 的问题,我们在问业务问题。而这些答案最终会驱动 Salesforce 的设计。

我不指望自己最先画的方框能原封不动地保留下来。事实上,如果它们真的原封不动,我反而会起疑。

第一个模型的意义不在于正确,而在于给我们一个足够具体的东西,让我们发现自己哪里错了。

把配送、路线、配送小组和卡车放到白板上,大家就可以对它们作出反应。

“其实,一次配送不总是一件商品。它可能是一台洗衣机、一台烘干机,外加把旧的拉走。”

很好。再多说一点。

“我们不是把配送小组分配给一次配送,而是把配送小组分配给一条路线。”

太好了。路线上有什么?

“而且如果有安装,配送小组要等检查清单和照片都完成后才能关闭这个停靠点。”

现在我们学到了重要的东西。

一张图把一次模糊的对话变成了可以质疑的东西。这正是我喜欢尽早建模的原因之一。我不是要用一张漂亮的图让满屋子的人刮目相看,而是要学得更快。

模型是对话的一部分。

我们开始构建的东西有一个正式的名字:概念数据模型。

在这个层次上,我感兴趣的是业务在意的重要事物,以及它们之间的关系。我还不担心标准对象和自定义对象、字段 API 名称、查找关系和主从关系、必填字段、索引、自动化、Apex 或 Flow。这些都很重要,我们会讲到。但如果在理解我们要建模的东西之前就决定它们,我们就是先去解决了错误的问题。

概念模型应该让会议室里不懂 Salesforce 的人也看得明白。这是一个有用的检验。如果在运营经理能看懂我的图之前,我得先解释 Delivery__c 是什么意思,那我就过早地进入实现了。

我希望他们看着模型说:

“对,我们的业务就是这样运作的。”

或者,更好的是:

“不对,不是这样运作的。”

因为这样我就有东西可以修正了。

没人说话时,同样的技巧也管用

Section titled “没人说话时,同样的技巧也管用 ”

这不只是我在客户需求调研中使用的技巧。当“客户”是一份文档时,它同样管用。

当我研读一份需求文档时,我做的事情也大致相同。重要的业务概念是什么?描述了哪些关系?什么反复出现?什么有自己的生命周期、需要被单独识别,或者需要历史记录?什么在被创建、修改、分配、转移、排期或退役?

这些和我在第一次会议上留意的东西是一样的。在纸面上,这些线索把一段段需求变成一个我可以推理的模型,也变成下一次对话中更好的问题。

模型不只是你解决问题之后产出的东西。它是你用来解决问题的工具之一。

第一轮结束时,我要决定的是:

  • 哪些名词代表有意义的候选实体。
  • 哪些不同的词代表同一个业务概念,又有哪一个词背后藏着两个概念(比如“客户”)。
  • 哪些概念需要有自己的记录和生命周期。
  • 主要概念之间如何相互关联。
  • 在我能有把握地为它们建模之前,业务方需要回答哪些问题。

我现在还不决定 Salesforce 的实现。首先,我们需要把业务理解到足以把它画出来的程度。而一旦名词都上了白板,我接下来想理解的就是它们之间的连线。

考试之外:AI 改变了什么。把一份需求文档交给 AI 工具,它会在几秒内找出名词、提出实体、勾勒关系。用它来加速需求调研,但不要把理解外包出去:除非业务方告诉你,它无法知道“客户”在 Steve Trucking 意味着两种不同的东西。把它给出的第一个模型摆到经营这个业务的人面前,问一问:“你们的业务真的是这样运作的吗?”