

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 第 5 步：创建 DynamoDB 数据模型
<a name="step5-hierarchical-model"></a>

为基表和全局二级索引定义分区键 (GSIs)：
+ 遵循密钥设计最佳实践，在本示例中`ComponentId`用作基表的分区键。`ComponentId` 可以提供粒度，因其是唯一的。DynamoDB 使用分区键的哈希值来确定物理存储数据的分区。唯一的组件 ID 会生成不同的哈希值，这有助于在表内分布数据。可以使用 `ComponentId` 分区键查询基表。
+ 要查找组件的直接子组件，请创建一个 GSI，其中 `ParentId` 是分区键，`ComponentId` 是排序键。您可以将 `ParentId` 用作分区键，以查询此 GSI。
+ 要查找组件的所有递归子级，请创建一个 GSI，其中 `GraphId` 是分区键，`Path` 是排序键。您可以将 `GraphId` 用作分区键和排序键上的 `BEGINS_WITH(Path, "$path")` 运算符来查询此 GSI。


|  |  |  |  | 
| --- |--- |--- |--- |
|  | **分区键** | **排序键** | **映射属性** | 
| **基表** | `ComponentId` |  | `ParentId`, `GraphId`, `Path` | 
| **GSI1** | `ParentId` | `ComponentId` |  | 
| **GSI2** | `GraphId` | `Path` | `ComponentId` | 

## 在表格中存储组件
<a name="store"></a>

下一步是将每个组件存储在 DynamoDB 基表中。插入示例树中的所有组件后，您将得到如下基表。


|  |  |  |  | 
| --- |--- |--- |--- |
| **ComponentId** | **ParentId** | **GraphId** | **路径** | 
|  CM1 |  |  CM1\$11 |  CM1 | 
|  CM2 |  CM1 |  CM1\$11 |  CM1\$1CM2 | 
|  CM3 |  CM1 |  CM1\$11 |  CM1\$1CM3 | 
|  CM4 |  CM2 |  CM1\$11 |  CM1\$1CM2\$1CM4 | 
|  CM5 |  CM2 |  CM1\$11 |  CM1\$1CM2\$1CM5 | 
|  CM6 |  CM3 |  CM1\$11 |  CM1\$1CM3\$1CM6 | 
|  CM7 |  CM3 |  CM1\$11 |  CM1\$1CM3\$1CM7 | 
|  CM8 |  CM4 |  CM1\$11 |  CM1\$1CM2\$1CM4\$1CM8 | 
|  CM9 |  CM4 |  CM1\$11 |  CM1\$1CM2\$1CM4\$1CM9 | 
|  CM10 |  CM5 |  CM1\$11 |  CM1\$1CM2\$1CM5\$1CM10 | 

## 该 GSI1 指数
<a name="gsi1-index"></a>

要检查组件的所有直接子组件，需要创建将 `ParentId` 用作分区键、将 `ComponentId` 用作排序键的索引。以下数据透视表表示该 GSI1 指数。您可以使用此索引通过父组件 ID 检索所有直接子组件。例如，您可以找出汽车中有多少可用电池 (CM1) 或模块 (CM4) 中有哪些电池可用。


|  |  | 
| --- |--- |
| **ParentId** | **ComponentId** | 
| CM1 | CM2CM3 | 
| CM2 | CM4CM5 | 
| CM3 | CM6CM7 | 
| CM4 | CM8CM9 | 
| CM5 | CM10 | 

## 该 GSI2 指数
<a name="gsi2-index"></a>

以下数据透视表表示该 GSI2 指数。它配置为将 `GraphId` 用作分区键，将 `Path` 用作排序键。使用 `GraphI`d 并对排序键 (`Path`) 执行 `begins_with` 操作，您可以在树中找到组件的完整谱系。


|  |  |  | 
| --- |--- |--- |
| **GraphId** | **路径** | **ComponentId** | 
| CM1\$11 | CM1CM1\$1CM2CM1\$1CM3CM1\$1CM2\$1CM4CM1\$1CM2\$1CM5CM1\$1CM2\$1CM4\$1CM8CM1\$1CM2\$1CM4\$1CM9CM1\$1CM2\$1CM5\$1CM10CM1\$1CM3\$1CM6CM1\$1CM3\$1CM7 | CM1CM2CM3CM4CM5CM8CM9CM10CM6CM7 | 