

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ステップ 5: DynamoDB のデータモデルを作成する
<a name="step5-hierarchical-model"></a>

ベーステーブルとグローバルセカンダリインデックス (GSI) のパーティションキーを定義します。
+ キー設計のベストプラクティスに従って、この例のベーステーブルのパーティションキー`ComponentId`として を使用します。一意の ID であるため、`ComponentId` できめ細かく定義を実現できます。DynamoDB は、パーティションキーのハッシュ値を使用して、データが物理的に保存されるパーティションを決定します。一意のコンポーネント ID を使用することで、異なるハッシュ値が生成されるため、テーブル内でデータの分散が容易になります。`ComponentId` パーティションキーを使用して、ベーステーブルにクエリを実行できます。
+ コンポーネントの直接の子を検索するには、`ParentId` がパーティションキーで、`ComponentId` がソートキーである GSI を作成します。`ParentId` をパーティションキーとして使用することで、この GSI のクエリを実行できます。
+ コンポーネントの再帰的な子をすべて検索するには、`GraphId` がパーティションキーで、`Path` がソートキーの GSI を作成します。この GSI に対してクエリを実行するには、パーティションキーの `GraphId` とソートキーの `BEGINS_WITH(Path, "$path")` 演算子を使用することで実行できます。


|  |  |  |  | 
| --- |--- |--- |--- |
|  | **パーティションキー** | **ソートキー** | **マッピング属性** | 
| **ベーステーブル** | `ComponentId` |  | `ParentId`, `GraphId`, `Path` | 
| **GSI1** | `ParentId` | `ComponentId` |  | 
| **GSI2** | `GraphId` | `Path` | `ComponentId` | 

## コンポーネントをテーブルに格納
<a name="store"></a>

次に、DynamoDB ベーステーブルに各コンポーネントを格納します。サンプルツリーからすべてのコンポーネントを挿入すると、次のベーステーブルが作成されます。


|  |  |  |  | 
| --- |--- |--- |--- |
| **ComponentId** | **ParentId** | **GraphId** | **[Path]** (パス) | 
|  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` とソートキー (`Path`) の `begins_with` 演算子を使うと、コンポーネントの全系統をツリーで見ることができます。


|  |  |  | 
| --- |--- |--- |
| **GraphId** | **[Path]** (パス) | **ComponentId** | 
| CM1\$11 | CM1CM1\$1CM2CM1\$1CM3CM1\$1CM2\$1CM4CM1\$1CM2\$1CM5CM1\$1CM2\$1CM4\$1CM8CM1\$1CM2\$1CM4\$1CM9CM1\$1CM2\$1CM5\$1CM10CM1\$1CM3\$1CM6CM1\$1CM3\$1CM7 | CM1CM2CM3CM4CM5CM8CM9CM10CM6CM7 | 