

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

# ステップ 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]** (パス) | 
|  <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` を使用して構成されています。`GraphI` とソートキー (`Path`) の `begins_with` 演算子を使うと、コンポーネントの全系統をツリーで見ることができます。


|  |  |  | 
| --- |--- |--- |
| **GraphId** | **[Path]** (パス) | **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 | 