---
schema_version: "1"
id: d932b2b84ca2350060fc96c88f3e2a6394f31ff7483280ce1e9bc1668ca027d4
title: 自动 - 数据完整性
collection: architect
version: next
locale: zh-cn
portal_url: https://docs.salesforce.com/architect/next/zh-cn/well-architected-tools/guides/easy-data-integrity.md
canonical_url: https://staging.architect.salesforce.com/docs/architect/zh-cn/well-architected-tools/guide/easy-data-integrity.html
source_site: staging.architect.salesforce.com
content_type: documentation
content_hash: a5d268c90cd46c94cdd85349dd98dbbe843aa873656ed1b7228a7474d430ed63
products:
  - 设计良好的工具
  - Architect Site Content Repo
---
# 自动 - 数据完整性

### 数据处理模式

了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [数据完整性](/docs/architect/zh-cn/well-architected/guide/automated#数据完整性) → [数据处理](/docs/architect/zh-cn/well-architected/guide/automated#数据处理)的更多信息

| Where to look?<br>产品区域 \| 位置 | 好是什么样子？<br>模式                                                                                                                                                                                                                |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Data 360 \| 数据字典               | ✅ 存在所有数据源和数据湖对象的字段级数据和优先级逻辑                                                                                                                                                                                 |
| Data 360 \| 组织                   | ✅ 如果不存在唯一主键，复合键用于构建唯一主键。当数据集中没有唯一字段时，使用公式字段从数据集联接多个字段。                                                                                                                           |
| Data 360 \| 组织                   | ✅ 使用 CRM Connector 的数据流利用两周一次的完全刷新 当使用 CRM Connector 进行增量加载时，每两周启动一次完全刷新。虽然这会增加数据摄取，但它保护元数据（例如公式字段）的数据完整性，元数据不会触发 DML 事务，因此不会包含在增量加载中 |
| Data 360 \| 组织                   | ✅ 个人 ID 用于将 Data 360 数据映射到其他系统使用个人 ID 将 Data 360 中的个人映射到其他系统。例如，Marketing Cloud 参与订阅者密钥应映射到 Data 360 中的个人 ID                                                                        |
| Data 360 \| 组织                   | ✅ 完全限定密钥用于准确解释数据 所有包含密钥值的 DLO 都有一个密钥限定符字段，并且完全限定密钥 (FQK) 在组织中启用，以确保避免在多个数据流协调到一个数据模型对象 (DMO) 时可能发生的冲突                                                 |
| Data 360 \| 组织                   | ✅ 在匹配规则可用时使用规范化匹配方法 精确规范化匹配转换源数据，以解决尾随空格、格式不一致和特殊字符等常见匹配问题。在可用字段上使用此方法，而不是使用模糊匹配，除非您已配置多个规则集进行测试，并确认整合率不符合业务需求            |
| Einstein \| 文档                   | ✅ 数据有用性被记录为 AI 项目设计的一部分 贵公司的数据有用性定义被记录下来并投入使用，以改善 AI 响应                                                                                                                                  |
| 平台 \| Apex                       | ✅ Future Apex 谨慎使用，适用于标注或系统对象 DML                                                                                                                                                                                     |
| 平台 \| Apex                       | ✅ 异步 Apex 调用使用可排队以在事务之间“链接”复杂的 DML                                                                                                                                                                               |
| 平台 \| Apex                       | ✅ 批量 Apex 专用于大数据量 批量 Apex 最适合处理大量数据。异步 Apex 的限制高于同步 Apex，因此可以完成更多工作。尽可能避免非常小的批处理大小，以避免流控制（队列泛滥）、开销和耗尽每日异步 Apex 限制的后果                             |
| 平台 \| Apex                       | ✅ 所有同步 DML 语句或数据库类方法都在触发器执行上下文之前执行                                                                                                                                                                        |
| 平台 \| Apex                       | ✅ 批量 API 仅在必须处理大量数据时使用 批量 API 仅在必须处理大量数据时使用本地 SOAP 和 REST API 可用于少量数据处理                                                                                                                    |
| 平台 \| 数据字典                   | ✅ 存在从数据湖对象到数据模型对象的字段映射                                                                                                                                                                                           |
| 平台 \| 流                         | ✅ 在用户上下文中启动的所有流将所有系统上下文事务抽象到子流，子流一致放在暂停元素之后，以创建新事务                                                                                                                                   |
| 平台 \| 流                         | ✅ 所有记录触发的流都填充了触发顺序值                                                                                                                                                                                                 |
| 平台 \| 流                         | ✅ 涉及外部系统标注或长时间运行的流程的流使用异步路径                                                                                                                                                                                 |
| 平台 \| 流                         | ✅ 使用 Orchestrator 创建相关数据操作的复杂序列（而不是在单片流中调用多个子流）                                                                                                                                                       |
| 平台 \| 组织                       | ✅ 身份解析协调规则遵循数据字典中的优先级逻辑                                                                                                                                                                                         |

### 错误处理模式

了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [数据完整性](/docs/architect/zh-cn/well-architected/guide/automated#数据完整性) → [错误处理](/docs/architect/zh-cn/well-architected/guide/automated#错误处理)的更多信息

| Where to look?<br>产品区域 \| 位置 | 好是什么样子？<br>模式                                                               |
| ---------------------------------- | ------------------------------------------------------------------------------------ |
| Einstein \| 组织                   | ✅ 提示指定预期输出 包含 LLM 的直接指令，以仅生成预期类型的内容。                    |
| 平台 \| Apex                       | ✅ 自定义异常用于创建高级错误消息和逻辑                                              |
| 平台 \| Apex                       | ✅ 代码将所有 DML、SOQL、标注和其他关键流程步骤封装在`try-catch`块中                 |
| 平台 \| Apex                       | ✅ 数据库类方法可以专用于所有数据操作（而不是 DML）                                  |
| 平台 \| Apex                       | ✅ 在异步和批量上下文中，使用数据库类方法，而不是 DML                                |
| 平台 \| Aura                       | ✅ JavaScript 将所有数据操作和关键流程步骤封装在`try-catch`块中                      |
| 平台 \| Aura                       | ✅ 在`try-catch`块中，本地 JavaScript `Error` 用于 throw 语句（不使用 `$A.error()`） |
| 平台 \| Aura                       | ✅ 所有可恢复的错误逻辑都出现在 `catch` 语句中，并提供明确的用户消息                 |
| 平台 \| 流                         | ✅ 具有数据操作、标注和其他关键处理逻辑的流具有所有关键操作的错误路径                |
| 平台 \| 流                         | ✅ 屏幕流始终使用错误连接器向用户显示错误                                            |
| 平台 \| 流                         | ✅ 为屏幕上显示的错误配置自定义错误消息                                              |
| 平台 \| Lightning Web 组件 (LWC)   | ✅ JavaScript 将所有数据操作和关键流程步骤封装在 `if ()`/`else if ()` 块中           |
| 平台 \| Lightning Web 组件 (LWC)   | ✅ 所有`@wire`函数使用 API 提供的`data`和`error`属性                                 |
| 平台 \| Lightning Web 组件 (LWC)   | ✅ 所有 `if (error)`/`else if (error)` 语句都包含处理错误和提供信息性消息的逻辑      |

---

### 数据处理反模式

了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [数据完整性](/docs/architect/zh-cn/well-architected/guide/automated#数据完整性) → [数据处理](/docs/architect/zh-cn/well-architected/guide/automated#数据处理)的更多信息

| Where to look?<br>产品区域 \| 位置 | 要避免什么？<br>反模式                                                                                                              |
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Data 360 \| 组织                   | 支持使用模糊匹配的规范化匹配方法的字段 模糊匹配应用于提供精确规范化匹配方法的字段                                                   |
| Data 360 \| 组织                   | 统一个人 ID 被假定为不可变 统一个人 ID 用作组织其余部分使用的主 ID 或全局 ID                                                        |
| Data 360 \| 组织                   | 事件日期映射到可变日期时间值事件日期映射到可变日期时间字段，例如 LastUpdated 或 LastExtracted                                       |
| Data 360 \| 组织                   | 主键映射到非唯一的字段如果数据集中没有主键，则选择任何字段作为数据流的主键，而不首先验证选定字段是否唯一                            |
| Data 360 \| 组织                   | 批量加载数据，然后尝试实时激活。例如，常见但有缺陷的方法可能涉及每小时从 Amazon S3 存储桶加载数据，然后通过数据操作激活它           |
| 平台 \| Apex                       | DML 语句定期出现在将在触发器上下文后调用的代码中                                                                                    |
| 平台 \| Apex                       | 批处理 Apex 作业的范围非常小 使用非常小的批处理大小（例如范围大小 = 1）                                                             |
| 平台 \| Apex                       | 批处理 Apex 用于外部标注 使用批处理 Apex 将大量 Salesforce 数据从 Salesforce 推送到外部系统                                         |
| 平台 \| Apex                       | 无论发布订单要求或记录锁定风险如何，都会使用临时的立即发布（实时）事件，而不是提交后发布（非实时）。                                |
| 平台 \| Apex                       | 异步 Apex 功能被任意使用 未来方法和可排队 Apex 被不一致或交替使用                                                                   |
| 平台 \| Apex                       | 异步 Apex 功能被任意使用；不清楚开发人员何时使用未来 Apex 与可排队 Apex，何时将 DML 移交给批处理作业                                |
| 平台 \| Apex                       | 异步 Apex 很少使用                                                                                                                  |
| 平台 \| Apex                       | 异步 Apex 功能被任意使用 数据库操作没有明确一致的逻辑来在需要时将执行传递给批处理 Apex                                              |
| 平台 \| 数据字典                   | 不包括从数据湖对象到数据模型对象的字段映射                                                                                          |
| 平台 \| 数据字典                   | 不包括数据源和数据湖对象的字段级数据和优先级逻辑                                                                                    |
| 平台 \| 流                         | 使用屏幕组件的输出的集合执行 DML 当集合是屏幕组件的输出时，利用创建、更新或删除元素上的“使用记录或记录集合中的 ID 和所有字段值”设置 |
| 平台 \| 流                         | 记录触发的流根本不使用触发顺序属性，或者没有一致使用触发顺序值                                                                      |
| 平台 \| 流                         | 异步路径的使用不一致或根本不一致                                                                                                    |
| 平台 \| 流                         | 大型单片流尝试协调相关数据操作的复杂序列（带或不带子流）                                                                            |
| 平台 \| 组织                       | 身份解析协调规则不遵循数据字典中的优先级逻辑                                                                                        |

### 错误处理反模式

了解有关架构良好的[轻松](/docs/architect/zh-cn/well-architected/guide/easy-overview) → [自动](/docs/architect/zh-cn/well-architected/guide/automated) → [数据完整性](/docs/architect/zh-cn/well-architected/guide/automated#数据完整性) → [错误处理](/docs/architect/zh-cn/well-architected/guide/automated#错误处理)的更多信息

| Where to look?<br>产品区域 \| 位置 | 要避免什么？<br>反模式                                                                    |
| ---------------------------------- | ----------------------------------------------------------------------------------------- |
| 平台 \| Apex                       | DML、SOQL、标注或其他关键流程步骤没有一致地封装在 Try-Catch 块中                          |
| 平台 \| Apex                       | 不使用数据库类方法                                                                        |
| 平台 \| Apex                       | ⚏ 数据操作仅通过 DML 完成                                                                 |
| 平台 \| Apex                       | `System.debug` 语句出现在生产代码中（不会被注释掉）                                       |
| 平台 \| Aura                       | JavaScript 没有一致地将数据操作和关键流程步骤封装在`try-catch`块中                        |
| 平台 \| Aura                       | 组件使用 `$A.error()`                                                                     |
| 平台 \| Aura                       | 可恢复的错误逻辑并不总是出现在 `catch` 语句中，并且对用户的错误消息不清楚                 |
| 平台 \| 流                         | ⚏ 流不会一致或根本不使用错误路径                                                          |
| 平台 \| 流                         | 不使用自定义错误消息，因此用户会看到默认的“此流中发生未处理的错误”消息                    |
| 平台 \| Lightning Web 组件 (LWC)   | `@wire` 函数不使用 API 提供的`data`和`error`属性（或没有一致使用）                        |
| 平台 \| Lightning Web 组件 (LWC)   | `if (error)`/`else if (error)` 语句如果使用，实际上不包含处理错误和提供有用错误消息的逻辑 |
| 平台 \| Lightning Web 组件 (LWC)   | JavaScript 没有一致使用带有数据操作或关键流程步骤的 `if ()`/`else if ()` 块               |

---
