

# 項目コレクション - DynamoDB で一対多リレーションシップをモデル化する方法
<a name="WorkingWithItemCollections"></a>

DynamoDB の*項目コレクション*は、同じパーティションキー値を共有する項目のグループです。これは、これらの項目が関連していることを意味します。項目コレクションは、DynamoDB で 1 対多リレーションシップをモデル化する主要なメカニズムです。項目コレクションは、[複合プライマリキー](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey)を使用するように設定されたテーブルまたはインデックスにのみ存在できます。

**注記**  
項目コレクションは、ベーステーブルまたはセカンダリインデックスのいずれかに存在できます。項目コレクションが特にインデックスとやり取りする方法の詳細については、「[ローカルセカンダリインデックス内の項目コレクション](LSI.md#LSI.ItemCollections)」を参照してください。

3 つの異なるユーザーとそのゲーム内インベントリを示す次のテーブルを考えてみます。

![\[異なる属性を持つ 3 つの異なる項目コレクション。\]](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/item_collection.png)


各コレクションの一部の項目において、ソートキーは、`inventory::armor`、`inventory::weapon`、`info` など、データをグループ化するための情報を連結したものです。項目コレクションごとに、これらの属性の異なる組み合わせをソートキーとして使用できます。ユーザー `account1234` には `inventory::weapons` 項目がありますが、ユーザー `account1387` にはありません (まだ見つけていないため)。ユーザー `account1138` は、ソートキーとして 2 つの項目のみ使用しています (まだインベントリがないため)。他のユーザーは 3 つを使用しています。

DynamoDB では、これらの項目コレクションから項目を選択的に取得して、次の操作を実行できます。
+ 特定のユーザーからすべての項目を取得する。
+ 特定のユーザーから 1 つの項目のみを取得する。
+ 特定のユーザーに属する特定タイプのすべての項目を取得する。

## 項目コレクションでデータを整理してクエリを高速化する
<a name="WorkingWithItemCollections.Example"></a>

この例では、これらの 3 つの項目コレクションの各項目は、プレイヤーと選択したデータモデルを表し、ゲームとプレイヤーのアクセスパターンを反映しています。どのようなデータがゲームに必要であるか。いつ必要であるか。どのくらいの頻度で必要であるか。この方法で実行する場合のコストはどれくらいか。これらの質問に対する回答に基づいて、これらのデータモデリングを決定しています。

このゲームでは、武器のインベントリのページと鎧のページが別個にプレイヤーに提示されます。プレイヤーがインベントリを開くと、最初に武器が表示されます。これは、このページを高速にロードしたいためであり、以降のインベントリページはその後にロードできます。これらの各項目タイプは、プレイヤーが獲得するゲーム内項目が増えるに従って肥大化する可能性があるため、データベースでは各インベントリページをプレイヤーの項目コレクションの独立した項目にしています。

次のセクションでは、`Query` オペレーションを使用して項目コレクションとやり取りする方法についてより詳しく説明します。

**Topics**
+ [項目コレクションでデータを整理してクエリを高速化する](#WorkingWithItemCollections.Example)