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 条子记录,而一项热门技能会超过这个数。主从关系适合从宠物技能到宠物,因为一只宠物的技能永远不会更换父记录,而且一只宠物只会少数几项技能;也正是主从关系让宠物能汇总它的已会技能数。重读坐下、别动、建模。