

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Etapa 5: Criar um modelo de dados do DynamoDB
<a name="step5-hierarchical-model"></a>

Defina as chaves de partição para sua tabela base e índices secundários globais (GSIs):
+ Seguindo as melhores práticas de design de chaves, use `ComponentId` como chave de partição para a tabela base neste exemplo. Por ser único, `ComponentId` pode oferecer granularidade. O DynamoDB usa o valor de hash da sua chave de partição para determinar a partição em que os dados são armazenados fisicamente. O ID exclusivo do componente gera um valor de hash diferente, o que pode facilitar a distribuição dos dados dentro da tabela. É possível consultar a tabela base usando uma chave de partição `ComponentId`.
+ Para encontrar filhos imediatos de um componente, crie um GSI em que `ParentId` é a chave de partição e `ComponentId` é a chave de classificação. É possível consultar esse GSI usando `ParentId` como a chave de partição.
+ Para todos os filhos recursivos de um componente, crie um GSI em que `GraphId` é a chave de partição, e `Path` é a chave de classificação. É possível consultar esse GSI usando `GraphId` como a chave de partição e o operador `BEGINS_WITH(Path, "$path")` na chave de classificação.


|  |  |  |  | 
| --- |--- |--- |--- |
|  | **Chave de partição** | **Chave de classificação** | **Atributos de mapeamento** | 
| **Tabela base** | `ComponentId` |  | `ParentId`, `GraphId`, `Path` | 
| **GSI1** | `ParentId` | `ComponentId` |  | 
| **GSI2** | `GraphId` | `Path` | `ComponentId` | 

## Armazenar componentes na tabela
<a name="store"></a>

A próxima etapa é armazenar cada componente na tabela base do DynamoDB. Depois de inserir todos os componentes da árvore de exemplo, você obtém a seguinte tabela base.


|  |  |  |  | 
| --- |--- |--- |--- |
| **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 | 

## O índice GSI1
<a name="gsi1-index"></a>

Para verificar todos os filhos imediatos de um componente, crie um índice usando `ParentId` como chave de partição e `ComponentId` como chave de classificação. A tabela dinâmica a seguir representa o índice GSI1. Esse índice pode ser usado para recuperar todos os componentes filhos imediatos por meio de um ID de componente pai. Por exemplo, é possível descobrir quantas baterias estão disponíveis em um carro (CM1) ou quais células estão disponíveis em um módulo (CM4).


|  |  | 
| --- |--- |
| **ParentId** | **ComponentId** | 
| CM1 | CM2<br />CM3 | 
| CM2 | CM4<br />CM5 | 
| CM3 | CM6<br />CM7 | 
| CM4 | CM8<br />CM9 | 
| CM5 | CM10 | 

## O índice GSI2
<a name="gsi2-index"></a>

A tabela dinâmica a seguir representa o índice GSI2. Ela é configurada usando-se `GraphId` como uma chave de partição e`Path` como uma chave de classificação. Ao usar `GraphI`d e a operação `begins_with` na chave de classificação (`Path`), é possível encontrar a linhagem completa de um componente em uma árvore.


|  |  |  | 
| --- |--- |--- |
| **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 | 