

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 步驟 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** | **路徑** | 
|  <br />CM1 |  |  <br />CM1\#1 |  <br />CM1 | 
|  <br />CM2 |  <br />CM1 |  <br />CM1\#1 |  <br />CM1\|CM2 | 
|  <br />CM3 |  <br />CM1 |  <br />CM1\#1 |  <br />CM1\|CM3 | 
|  <br />CM4 |  <br />CM2 |  <br />CM1\#1 |  <br />CM1\|CM2\|CM4 | 
|  <br />CM5 |  <br />CM2 |  <br />CM1\#1 |  <br />CM1\|CM2\|CM5 | 
|  <br />CM6 |  <br />CM3 |  <br />CM1\#1 |  <br />CM1\|CM3\|CM6 | 
|  <br />CM7 |  <br />CM3 |  <br />CM1\#1 |  <br />CM1\|CM3\|CM7 | 
|  <br />CM8 |  <br />CM4 |  <br />CM1\#1 |  <br />CM1\|CM2\|CM4\|CM8 | 
|  <br />CM9 |  <br />CM4 |  <br />CM1\#1 |  <br />CM1\|CM2\|CM4\|CM9 | 
|  <br />CM10 |  <br />CM5 |  <br />CM1\#1 |  <br />CM1\|CM2\|CM5\|CM10 | 

## GSI1 索引
<a name="gsi1-index"></a>

若要檢查元件的所有直屬子項，您可以建立索引，使用 `ParentId`做為分割區索引鍵和`ComponentId`排序索引鍵。下列樞紐分析表呈現 GSI1 索引。您可以使用此索引透過父元件 ID 擷取所有直屬子系元件。例如，您可以了解汽車 (CM1) 中有多少顆可用電池，或模組 (CM4) 中有哪些電芯可用。


|  |  | 
| --- |--- |
| **ParentId** | **ComponentId** | 
| CM1 | CM2<br />CM3 | 
| CM2 | CM4<br />CM5 | 
| CM3 | CM6<br />CM7 | 
| CM4 | CM8<br />CM9 | 
| CM5 | CM10 | 

## GSI2 索引
<a name="gsi2-index"></a>

下列樞紐分析表呈現 GSI2 索引。它使用 `GraphId` 作為分割區索引鍵和使用 `Path` 作為排序索引鍵進行設定。在排序索引鍵 (`Path`) 上使用 `GraphI`d 和 `begins_with`操作，您可以在樹狀目錄中找到元件的完整系列。


|  |  |  | 
| --- |--- |--- |
| **GraphId** | **路徑** | **ComponentId** | 
| CM1\#1 | CM1<br />CM1\|CM2<br />CM1\|CM3<br />CM1\|CM2\|CM4<br />CM1\|CM2\|CM5<br />CM1\|CM2\|CM4\|CM8<br />CM1\|CM2\|CM4\|CM9<br />CM1\|CM2\|CM5\|CM10<br />CM1\|CM3\|CM6<br />CM1\|CM3\|CM7 | CM1<br />CM2<br />CM3<br />CM4<br />CM5<br />CM8<br />CM9<br />CM10<br />CM6<br />CM7 | 