

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

# ステップ 1: ユースケースと論理データモデルを特定する
<a name="step1-hierarchical-model"></a>

ある自動車メーカーは、入手可能なすべての自動車部品を保存して検索したり、さまざまなコンポーネントや部品間の関係を構築したりするためのトランザクションコンポーネント管理システムを構築したいと考えています。例えば、自動車には複数のバッテリーが搭載されており、各バッテリーには複数の上位レベルモジュールが含まれ、各モジュールには複数のセルが含まれ、各セルには複数の下位レベルコンポーネントが含まれているとします。

一般に、階層関係モデルを構築するには、[Amazon Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) のようなグラフデータベースを使用すると良いです。ただし、柔軟性、セキュリティ、パフォーマンス、拡張性の面では、階層データモデリングには Amazon DynamoDB の方が適している場合もあります。

例えば、クエリの 80～90% がトランザクションであるシステムを構築することができますが、このシステムでは DynamoDB の方が適しています。この例では残りの 10～20% のクエリはリレーショナルとなるため、Neptune などのグラフデータベースの方が適しています。この場合、クエリの 10～20% しか処理できないように、アーキテクチャに追加のデータベースを含めてしまうと、コストが増える可能性があります。また、複数のシステムを維持し、データを同期するという運用上の負担も増大します。代わりに、その 10～20% のリレーショナルクエリを DynamoDB でモデル化することができます。

自動車コンポーネントのツリーの例を図式化すると、コンポーネント間の関係をマッピングしやすくなります。次の図は、4 つの階層の依存関係をグラフに示しています。CM1 はサンプルカー自体の最上位コンポーネントです。これには 2 つのサブコンポーネントがあります。CM2 と CM3 のサンプルバッテリーです。各バッテリーには 2 つのサブコンポーネントがあり、これをモジュールといいます。CM2 には CM4 と CM5 のモジュールがあり、CM3 には CM6 と CM7 のモジュールがあります。この各モジュールには複数のサブコンポーネントがあり、これをセルといいます。CM4 のモジュールには CM8 と CM9 の 2 つのセルがあります。CM5 には CM10 というセルが 1 つあります。CM6 と CM7 はまだ関連するセルがありません。



![\[前に説明した関係性を示すサンプルツリーの図。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/dynamodb-data-modeling/images/example-tree.png)


このガイドでは、このツリーとそのコンポーネント ID を参考として使用します。上位のコンポーネントは*親*、サブコンポーネントは*子*と呼びます**。**例えば、最上位コンポーネントである CM1 は CM2 と CM3 の親です。CM2 は CM4 と CM5 の親です。これは親子関係をグラフ化したものとなります。

ツリーでは、コンポーネントの完全な依存関係をグラフで見ることができます。例えば、CM8 は CM4 に依存し、CM4 は CM2 に依存、CM2 は CM1 に依存しています。ツリーでは依存関係グラフ全体をパスとして定義します。パスは、次の 2 つを表します。
+ 依存関係グラフ
+ ツリー内の位置

ビジネス要件のテンプレートを入力する:

ユーザーに関する情報を提供する:


|  |  | 
| --- |--- |
| **ユーザー** | **説明** | 
| 従業員 | 自動車とそのコンポーネントの情報を必要とする自動車会社の社内従業員 | 

データソースとデータの取り込み方法に関する情報を提供する:


|  |  |  | 
| --- |--- |--- |
| **ソース** | **説明** | **ユーザー** | 
| 管理システム | 使用可能な自動車部品と他のコンポーネントや部品との関係に関連するすべてのデータを保存するシステム。 | 従業員 | 

データがどのように消費されるかについての情報を提供する:


|  |  |  | 
| --- |--- |--- |
| **コンシューマー** | **説明** | **ユーザー** | 
| 管理システム | 親コンポーネント ID の、直接の子コンポーネントをすべて取得します。 | 従業員 | 
| 管理システム | コンポーネント ID のすべての子コンポーネントの再帰リストを取得します。 | 従業員 | 
| 管理システム | コンポーネントの祖先を表示します。 | 従業員 | 