

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

# 物品集合 - 如何在 DynamoDB 中建立一對多關係的模型
<a name="WorkingWithItemCollections"></a>

在 DynamoDB 中，*物品集合*是共享相同分割區索引鍵值的物品群組，這表示這些物品是相關聯的。物品集合是在 DynamoDB 中建立一對多關係模型的主要機制。物品集合只能存在於配置為使用[複合主鍵](HowItWorks.CoreComponents.md#HowItWorks.CoreComponents.PrimaryKey)的資料表或索引。

**注意**  
物品集合可以存在於基底資料表中，也可以存在於次要索引中。有關物品集合如何與索引互動的詳細資訊，請參閱 [本機次要索引中的項目集合](LSI.md#LSI.ItemCollections)。

請考慮下表，其中顯示三位不同的使用者及其遊戲內物品清單：

![\[具有不同屬性的三種不同物品集合。\]](http://docs.aws.amazon.com/zh_tw/amazondynamodb/latest/developerguide/images/item_collection.png)


對於每個集合中的特定物品，排序索引鍵是由用於將資料分組的資訊 (例如 `inventory::armor`、`inventory::weapon` 或 `info`) 組成的串連。每個物品集合可以具有不同組合的屬性作為排序索引鍵。使用者 `account1234` 具有 `inventory::weapons` 物品，而使用者 `account1387` 沒有 (因為他們還沒有找到)。使用 `account1138` 只使用兩個物品作為排序索引鍵 (因為他們還沒有物品清單)，而其他使用者使用三個物品。

DynamoDB 允許您選擇性地從這些物品集合中擷取物品，以執行以下操作：
+ 從特定使用者擷取所有物品
+ 從特定使用者擷取一個物品
+ 擷取屬於特定使用者的特定類型的所有物品

## 使用物品集合組織資料來加快查詢
<a name="WorkingWithItemCollections.Example"></a>

在此範例中，這三個物品集合中的每個物品都代表一個玩家，和我們根據遊戲和玩家的存取模式選擇的資料模型。遊戲需要什麼資料？ 什麼時候需要？ 需要的頻率為何？ 這樣做的成本是多少？ 這些資料建模決策是根據這些問題的答案做出。

在這個遊戲中，有一個頁面為玩家呈現其武器庫存清單，還有另一個頁面呈現盔甲。玩家開啟他們的庫存清單時，會先顯示武器，因為我們希望該頁面能夠以極快速度載入，之後才會載入後續的庫存清單頁面。隨著玩家獲得更多的遊戲內物品，這些物品類型可能會相當大，因此我們決定每個庫存清單頁面在資料庫的玩家物品集合中，都獨立自成一個項目。

以下區段詳細介紹如何透過 `Query` 操作與物品集合互動。

**Topics**
+ [使用物品集合組織資料來加快查詢](#WorkingWithItemCollections.Example)