

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwendung von DynamoDB als Datenspeicher für einen Online-Shop
<a name="data-modeling-online-shop"></a>

In diesem Anwendungsfall geht es um die Verwendung von DynamoDB als Datenspeicher für einen Online-Shop (E-Store).

## Anwendungsfall
<a name="data-modeling-schema-online-shop"></a>

In einem Online-Shop können Benutzer verschiedene Produkte durchsuchen und diese schließlich kaufen. Basierend auf der generierten Rechnung kann ein Kunde mit einem Rabattcode oder einer Geschenkkarte bezahlen und dann den Restbetrag mit einer Kreditkarte begleichen. Die gekauften Produkte werden von einem der Warenlager abgeholt und an die angegebene Adresse versandt. Zu den typischen Zugriffsmustern für einen Online-Shop gehören folgende:
+ Kunden für eine bestimmte CustomerId abrufen
+ Produkt für eine bestimmte ProductId abrufen
+ Warenlager für eine bestimmte WarehouseId abrufen
+ Produktbestand für alle Warenlager nach ProductId abrufen
+ Bestellung für eine bestimmte OrderId abrufen
+ Alle Produkte für eine bestimmte OrderId abrufen
+ Rechnung für eine bestimmte OrderId abrufen
+ Alle Lieferungen für eine bestimmte OrderId abrufen
+ Alle Bestellungen für eine bestimmte ProductId für einen bestimmten Zeitraum abrufen
+ Rechnung für eine bestimmte InvoiceId abrufen
+ Alle Zahlungen für eine bestimmte InvoiceId abrufen
+ Versanddetails für eine bestimmte ShipmentId abrufen
+ Alle Lieferungen für eine bestimmte WarehouseId abrufen
+ Bestand aller Produkte für eine bestimmte WarehouseId abrufen
+ Alle Rechnungen für eine bestimmte CustomerId für einen bestimmten Zeitraum abrufen
+ Alle von einer bestimmten CustomerId bestellten Produkte für einen bestimmten Zeitraum abrufen

## Diagramm der Entitätsbeziehungen
<a name="data-modeling-schema-online-shop-erd"></a>

Dieses Diagramm der Entitätsbeziehungen (Entity Relationship Diagram, ERD) verwenden wir, um DynamoDB als Datenspeicher für einen Online-Shop zu verwenden.

![ERD für das Datenmodell eines Online-Shops mit Entitäten wie „Product“, „Order“, „Payment“ und „Customer“.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-1-ERD.png)


## Zugriffsmuster
<a name="data-modeling-schema-online-shop-access-patterns"></a>

Das sind die Zugriffsmuster, die wir in Betracht ziehen, wenn wir DynamoDB als Datenspeicher für einen Online-Shop verwenden.

1. `getCustomerByCustomerId`

1. `getProductByProductId`

1. `getWarehouseByWarehouseId`

1. `getProductInventoryByProductId`

1. `getOrderDetailsByOrderId`

1. `getProductByOrderId`

1. `getInvoiceByOrderId`

1. `getShipmentByOrderId`

1. `getOrderByProductIdForDateRange`

1. `getInvoiceByInvoiceId`

1. `getPaymentByInvoiceId`

1. `getShipmentDetailsByShipmentId`

1. `getShipmentByWarehouseId`

1. `getProductInventoryByWarehouseId`

1. `getInvoiceByCustomerIdForDateRange`

1. `getProductsByCustomerIdForDateRange`

## Entwicklung des Schemadesigns
<a name="data-modeling-schema-online-shop-design-evolution"></a>

Verwenden Sie[NoSQL-Workbench für DynamoDB](workbench.md), import [AnOnlineShop\_1.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_1.json), um ein neues Datenmodell namens `AnOnlineShop` und eine neue Tabelle namens zu erstellen. `OnlineShop` Beachten Sie, dass wir für den Partitionsschlüssel und den Sortierschlüssel die generischen Namen `PK` und `SK` verwenden. Diese Methode wird verwendet, um verschiedene Arten von Entitäten in derselben Tabelle zu speichern.

**Schritt 1: Zugriffsmuster 1 (`getCustomerByCustomerId`) angehen**

Importieren Sie [AnOnlineShop\_2.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_2.json), um das Zugriffsmuster 1 () zu verarbeiten. `getCustomerByCustomerId` Manche Entitäten haben keine Beziehungen zu anderen Entitäten, daher verwenden wir für sie den gleichen Wert von `PK` und `SK`. Beachten Sie in den Beispieldaten, dass die Schlüssel das Präfix `c#` verwenden, um die `customerId` von anderen Entitäten zu unterscheiden, die später hinzugefügt werden. Diese Vorgehensweise wird auch für andere Entitäten genutzt. 

Um dieses Zugriffsmuster anzugehen, kann ein [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)-Vorgang mit `PK=customerId` und `SK=customerId` verwendet werden.

**Schritt 2: Zugriffsmuster 2 (`getProductByProductId`) angehen**

Importieren Sie [AnOnlineShop\_3.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_3.json), um das Zugriffsmuster 2 (`getProductByProductId`) für die Entität zu adressieren. `product` Den Produktentitäten wird das Präfix `p#` vorangestellt und dasselbe Sortierschlüsselattribut wurde zum Speichern der `customerID` und der `productID` verwendet. Die generische Benennung und [vertikale Partitionierung](data-modeling-blocks.md#data-modeling-blocks-vertical-partitioning) ermöglichen es uns, solche Elementauflistungen zu erstellen, um ein effektives Einzeltabellendesign zu erhalten. 

Um dieses Zugriffsmuster anzugehen, kann ein `GetItem`-Vorgang mit `PK=productId` und `SK=productId` verwendet werden.

**Schritt 3: Zugriffsmuster 3 (`getWarehouseByWarehouseId`) angehen**

Importieren Sie [AnOnlineShop\_4.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_4.json), um das Zugriffsmuster 3 (`getWarehouseByWarehouseId`) für die Entität zu adressieren. `warehouse` Derzeit werden die Entitäten `customer`, `product` und `warehouse` zur selben Tabelle hinzugefügt. Sie unterscheiden sich durch Präfixe und das Attribut `EntityType`. Ein Typ-Attribut (oder eine Präfixbenennung) verbessert die Lesbarkeit des Modells. Die Lesbarkeit wäre beeinträchtigt, wenn wir einfach alphanumerische Zahlen IDs für verschiedene Entitäten im selben Attribut speichern würden. Ohne diese Identifikatoren wäre es schwierig, eine Entität von der anderen zu unterscheiden. 

Um dieses Zugriffsmuster anzugehen, kann ein `GetItem`-Vorgang mit `PK=warehouseId` und `SK=warehouseId` verwendet werden.

**Basistabelle:**

![DynamoDB-Tabellendesign mit Präfixen und EntityType zum Abrufen von Warehouse-Daten anhand ihrer ID.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-2-Step3.png)


**Schritt 4: Zugriffsmuster 4 (`getProductInventoryByProductId`) angehen**

Importieren Sie [AnOnlineShop\_5.json, um das Zugriffsmuster 4 ()](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_5.json) zu adressieren. `getProductInventoryByProductId` `warehouseItem`Die Entität wird verwendet, um die Anzahl der Produkte in jedem Lager zu verfolgen. Dieses Element wird normalerweise aktualisiert, wenn ein Produkt einem Warenlager hinzugefügt oder entnommen wird. Wie aus der ERD hervorgeht, besteht ein many-to-many Zusammenhang zwischen `product` und`warehouse`. Hier wird die one-to-many Beziehung von `product` bis `warehouse` modelliert als`warehouseItem`. Später `product` wird auch die one-to-many Beziehung von `warehouse` bis modelliert. 

Das Zugriffsmuster 4 kann mit der Abfrage von `PK=ProductId` und `SK begins_with “w#“` angegangen werden. 

Weitere Informationen zu `begins_with()` und weitere Ausdrücke, die auf Sortierschlüssel angewendet werden können, finden Sie unter [Schlüsselbedingungsausdrücke](Query.KeyConditionExpressions.md).

**Basistabelle:**

![Tabellendesign zur Abfrage von „ProductID“ und „warehouseId“ zur Nachverfolgung des Produktbestands in einem bestimmten Lager.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-3-Step4.png)


**Schritt 5: Zugriffsmuster 5 (`getOrderDetailsByOrderId`) und 6 (`getProductByOrderId`) angehen**

Fügen Sie der Tabelle weitere `warehouse` Elemente `customer``product`, und hinzu, indem Sie [AnOnlineShop\_6.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_6.json) importieren. Importieren Sie dann [AnOnlineShop\_7.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_7.json), um eine Elementsammlung zu erstellen`order`, die die Zugriffsmuster 5 (`getOrderDetailsByOrderId`) und 6 () adressieren kann. `getProductByOrderId` Sie können die one-to-many Beziehung zwischen OrderItem-Entitäten `order` und deren `product` Modellierung als OrderItem-Entitäten sehen. 

Um das Zugriffsmuster 5 (`getOrderDetailsByOrderId`) anzugehen, fragen Sie die Tabelle mit `PK=orderId` ab. Dadurch erhalten Sie alle Informationen zur Bestellung, einschließlich der `customerId`und der bestellten Produkte.

**Basistabelle:**

![Tabellendesign für Abfragen mithilfe von „orderId“ zum Abrufen von Informationen zu allen bestellten Produkten.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-4-Step5.png)


Um das Zugriffsmuster 6 (`getProductByOrderId`) anzugehen, müssen wir nur Produkte in einer `order` lesen. Fragen Sie dazu die Tabelle mit `PK=orderId` und `SK begins_with “p#”` ab.

**Basistabelle:**

![Tabellendesign für Abfragen mithilfe von „orderId“ und productId zum Abrufen von Produkten in einer Bestellung.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-5-Step5.png)


**Schritt 6: Zugriffsmuster 7 (`getInvoiceByOrderId`) angehen**

Importieren Sie [AnOnlineShop\_8.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_8.json), um der *Bestellartikelsammlung* eine `invoice` Entität hinzuzufügen, die das Zugriffsmuster 7 () verarbeitet. `getInvoiceByOrderId` Um dieses Zugriffsmuster anzugehen, können Sie einen Abfragevorgang mit `PK=orderId` und `SK begins_with “i#”` verwenden.

**Basistabelle:**

![Tabellendesign mit Rechnungsentität in der Bestellartikelsammlung, um eine Rechnung nach „orderId“ abzurufen.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-6-Step6.png)


**Schritt 7: Zugriffsmuster 8 (`getShipmentByOrderId`) angehen**

Importieren Sie [AnOnlineShop\_9.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_9.json), um `shipment` Entitäten zur *Bestellartikelsammlung* hinzuzufügen, um das Zugriffsmuster 8 zu adressieren (). `getShipmentByOrderId` Wir erweitern dasselbe vertikal partitionierte Modell, indem wir dem Einzeltabellendesign weitere Typen von Entitäten hinzufügen. Beachten Sie, dass die Elementauflistung *order* die verschiedenen Beziehungen enthält, die eine Entität des Typs `order` zu den Entitäten des Typs `shipment`, `orderItem` und `invoice` hat. 

Um Lieferungen nach `orderId` abzurufen, können Sie einen Abfragevorgang mit `PK=orderId`und `SK begins_with “sh#”` durchführen.

**Basistabelle:**

![Tabellendesign mit einer zur Bestellartikelsammlung hinzugefügten Versandentität, um Lieferungen anhand der Bestellnummer abzurufen.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-7-Step7.png)


**Schritt 8: Zugriffsmuster 9 (`getOrderByProductIdForDateRange`) angehen**

Wir haben im vorherigen Schritt die Elementauflistung *order* erstellt. Dieses Zugriffsmuster hat neue Suchdimensionen (`ProductID` und `Date`), weshalb Sie die gesamte Tabelle scannen und relevante Datensätze herausfiltern müssen, um die anvisierten Elemente abzurufen. Um dieses Zugriffsmuster anzugehen, müssen wir einen [globalen sekundären Index (GSI)](GSI.md) erstellen. *Importieren Sie [AnOnlineShop\_10.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_10.json), um mithilfe der GSI eine neue Artikelsammlung zu erstellen, die es ermöglicht, `orderItem` Daten aus mehreren Bestellartikelsammlungen abzurufen.* Die Daten verfügen jetzt über `GSI1-PK` und `GSI1-SK`, den zukünftigen Partitionsschlüssel und Sortierschlüssel von `GSI1`. 

DynamoDB fügt automatisch Elemente, die die Schlüsselattribute eines GSI enthalten, aus der Tabelle in den GSI ein. Zusätzliche manuelle Einfügungen in den GSI sind nicht notwendig. 

Um das Zugriffsmuster 9 anzugehen, führen Sie eine Abfrage an `GSI1` mit `GSI1-PK=productId` und `GSI1SK between (date1, date2)` durch.

**Basistabelle:**

![Tabellendesign mit einem GSI zum Abrufen von Bestelldaten aus mehreren Bestellartikelsammlungen.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-8-Step8-Base.png)


**GSI1:**

![GSI-Design mit „ProductID“ und „Date“ als Partitions- und Sortierschlüssel, um Bestellungen nach Produkt-ID und Datum abzurufen.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-9-Step8-GSI.png)


**Schritt 9: Zugriffsmuster 10 (`getInvoiceByInvoiceId`) und 11 (`getPaymentByInvoiceId`) angehen**

Importieren Sie [AnOnlineShop\_11.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_11.json), um die Zugriffsmuster 10 (`getInvoiceByInvoiceId`) und 11 (`getPaymentByInvoiceId`) zu adressieren, die sich beide auf. `invoice` Obwohl es sich um zwei unterschiedliche Zugriffsmuster handelt, werden sie mit derselben Schlüsselbedingung realisiert. `Payments` sind als Attribut mit dem Datentyp „Karte“ auf der Entität `invoice` definiert.

**Anmerkung**  
`GSI1-PK` und `GSI1-SK` sind überladen und speichern Informationen über verschiedene Entitäten, sodass mehrere Zugriffsmuster vom selben GSI aus abgedeckt werden können. Weitere Informationen zur GSI-Überladung finden Sie unter [Überladen globaler sekundärer Indizes in DynamoDB](bp-gsi-overloading.md).

Um die Zugriffsmuster 10 und 11 anzugehen, fragen Sie `GSI1` mit `GSI1-PK=invoiceId` und `GSI1-SK=invoiceId` ab.

**GSI1:**

![GSI-Design mit „invoiceId“ als Partitions- und Sortierschlüssel, um Rechnungen und Zahlungen anhand der Rechnungs-ID abzurufen.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-10-Step9.png)


**Schritt 10: Zugriffsmuster 12 (`getShipmentDetailsByShipmentId`) und 13 (`getShipmentByWarehouseId`) angehen**

Importieren Sie [AnOnlineShop\_12.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_12.json), um die Zugriffsmuster 12 (`getShipmentDetailsByShipmentId`) und 13 () zu adressieren. `getShipmentByWarehouseId` 

Beachten Sie, dass `shipmentItem`-Entitäten zur Elementauflistung *order* in der Basistabelle hinzugefügt werden, damit alle Details zu einer Bestellung in einem einzigen Abfragevorgang abgerufen werden können.

**Basistabelle:**

![Tabellendesign mit einer „shipmentItem“-Entität in der Bestellartikelsammlung, um alle Bestelldetails abzurufen.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-11-Step10.png)


Die `GSI1` Partitions- und Sortierschlüssel wurden bereits verwendet, um eine one-to-many Beziehung zwischen `shipment` und zu modellieren. `shipmentItem` Um das Zugriffsmuster 12 (`getShipmentDetailsByShipmentId`) anzugehen, fragen Sie `GSI1` mit `GSI1-PK=shipmentId` und `GSI1-SK=shipmentId` ab.

**GSI1:**

![GSI1 Verwenden Sie ShipmentID als Partition und Sortierschlüssel, um Sendungsdetails anhand der Sendungsnummer abzurufen.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-12-Step10-GSI.png)


Wir müssen eine weitere GSI (`GSI2`) erstellen, um die neue one-to-many Beziehung zwischen `warehouse` und `shipment` für das Zugriffsmuster 13 () zu modellieren. `getShipmentByWarehouseId` Um dieses Zugriffsmuster anzugehen, fragen Sie `GSI2` mit `GSI2-PK=warehouseId` und `GSI2-SK begins_with “sh#”` ab.

**GSI2:**

![GSI2 Entwerfen Sie mit WarehouseID und ShipmentID als Partitions- und Sortierschlüsseln, um Lieferungen pro Lager abzurufen.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-13-Step10-GSI2.png)


**Schritt 11: Zugriffsmuster 14 (`getProductInventoryByWarehouseId`), 15 (`getInvoiceByCustomerIdForDateRange`) und 16 (`getProductsByCustomerIdForDateRange`) angehen**

Importieren Sie [AnOnlineShop\_13.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_13.json), um Daten hinzuzufügen, die sich auf die nächsten Zugriffsmuster beziehen. Um das Zugriffsmuster 14 (`getProductInventoryByWarehouseId`) anzugehen, fragen Sie `GSI2` mit `GSI2-PK=warehouseId` und `GSI2-SK begins_with “p#”` ab.

**GSI2:**

![GSI2 Design mit WarehouseID und ProductID als Partitions- und Sortierschlüsseln, um das Zugriffsmuster 14 zu adressieren.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-14-Step11-GSI2.png)


Um das Zugriffsmuster 15 (`getInvoiceByCustomerIdForDateRange`) anzugehen, fragen Sie `GSI2` mit `GSI2-PK=customerId` und `GSI2-SK between (i#date1, i#date2)` ab.

**GSI2:**

![GSI2 Design mit customerId und Rechnungsdatumsbereich als Partitions- und Sortierschlüssel für das Adresszugriffsmuster 15.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-15-Step11-GSI2.png)


Um das Zugriffsmuster 16 (`getProductsByCustomerIdForDateRange`) anzugehen, fragen Sie `GSI2` mit `GSI2-PK=customerId` und `GSI2-SK between (p#date1, p#date2)` ab.

**GSI2:**

![GSI2 Design mit customerId und Produktdatumsbereich als Partitions- und Sortierschlüssel zur Adressierung des Zugriffsmusters 16](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-16-Step11-GSI2.png)


**Anmerkung**  
In [NoSQL-Workbench](workbench.md) stehen *Facets* für die verschiedenen Datenzugriffsmuster einer Anwendung für DynamoDB. Facets bieten Ihnen die Möglichkeit, eine Teilmenge der Daten in einer Tabelle anzuzeigen, ohne Datensätze sehen zu müssen, die den Einschränkungen des Facets nicht entsprechen. Facets gelten als visuelles Datenmodellierungswerkzeug und existieren nicht als brauchbares Konstrukt in DynamoDB, da sie eine reine Hilfe zur Modellierung von Zugriffsmustern darstellen.   
Importieren Sie [AnOnlineShop\_facets.json](https://github.com/aws-samples/amazon-dynamodb-design-patterns/blob/master/examples/an-online-shop/json/AnOnlineShop_facets.json), um die Facetten für diesen Anwendungsfall zu sehen.

Alle Zugriffsmuster und wie das Schemadesign sie behandelt, sind in der folgenden Tabelle zusammengefasst:


| Zugriffsmuster | Basis-table/GSI/LSI | Operation | Partitionsschlüsselwert | Sortierschlüsselwert | 
| --- | --- | --- | --- | --- | 
| getCustomerByCustomerId | Basistabelle | GetItem |  PK=customerId | SK=customerId | 
| getProductByProductId | Basistabelle | GetItem |  PK=productId | SK=productId | 
| getWarehouseByWarehouseId | Basistabelle | GetItem |  PK=warehouseId | SK=warehouseId | 
| getProductInventoryByProductId | Basistabelle | Query |  PK=productId | SK begins\_with "w\#" | 
| getOrderDetailsByOrderId | Basistabelle | Query |  PK=orderId |  | 
| getProductByOrderId | Basistabelle | Query |  PK=orderId | SK begins\_with "p\#" | 
| getInvoiceByOrderId |  Basistabelle | Query |  PK=orderId | SK begins\_with "i\#" | 
| getShipmentByOrderId |  Basistabelle | Query |  PK=orderId | SK begins\_with "sh\#" | 
| getOrderByProductIdForDateRange |  GSI1 | Query |  PK=productId | SK zwischen Datum1 und Datum2 | 
| getInvoiceByInvoiceId |  GSI1 | Query |  PK=invoiceId | SK=invoiceId | 
| getPaymentByInvoiceId |  GSI1 | Query |  PK=invoiceId | SK=invoiceId | 
| getShipmentDetailsByShipmentId |  GSI1 | Query |  PK=shipmentId | SK=shipmentId | 
| getShipmentByWarehouseId |  GSI2 | Query |  PK=warehouseId | SK begins\_with "sh\#" | 
| getProductInventoryByWarehouseId |  GSI2 | Query |  PK=warehouseId | SK begins\_with "p\#" | 
| getInvoiceByCustomerIdForDateRange |  GSI2 | Query |  PK=customerId | SKU zwischen i\#date1 und i\#date2 | 
| getProductsByCustomerIdForDateRange |  GSI2 | Query |  PK=customerId | SK zwischen p\#date1 und p\#date2 | 

### Endgültiges Schema des Online-Shops
<a name="data-modeling-schema-online-store-final-schema"></a>

Dies sind die endgültigen Schemadesigns. Informationen zum Herunterladen dieses Schemadesign als JSON-Datei finden Sie unter [DynamoDB-Entwurfsmuster](https://github.com/aws-samples/aws-dynamodb-examples/tree/master/schema_design/SchemaExamples) auf. GitHub

**Basistabelle**

![Endgültiges Schema der Basistabelle für einen Online-Shop mit Attributen wie EntityName und Name.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-17-Final-BaseTable.png)


**GSI1**

![GSI1 Endgültiges Schema für die Basistabelle eines Onlineshops mit Attributen wie EntityType.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-18-Final-GSI1.png)


**GSI2**

![GSI2 Endgültiges Schema für die Basistabelle eines Onlineshops mit Attributen wie EntityType.](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/DataModeling/OnlineShop-19-Final-GSI2.png)


## Verwendung von NoSQL Workbench mit diesem Schemadesign
<a name="data-modeling-schema-online-shop-nosql"></a>

Sie können dieses endgültige Schema in [NoSQL Workbench](workbench.md) importieren, um Ihr neues Projekt weiter zu untersuchen und zu bearbeiten. NoSQL Workbench ist ein visuelles Tool, das Features zur Datenmodellierung, Datenvisualisierung und Abfrageentwicklung für DynamoDB bereitstellt. Gehen Sie folgendermaßen vor, um zu beginnen:

1. Laden Sie NoSQL Workbench herunter. Weitere Informationen finden Sie unter [Herunterladen von NoSQL Workbench for DynamoDB](workbench.settingup.md).

1. Laden Sie die oben aufgeführte JSON-Schemadatei herunter, die bereits das NoSQL-Workbench-Modellformat aufweist.

1. Importieren Sie die JSON-Schemadatei in NoSQL Workbench. Weitere Informationen finden Sie unter [Importieren eines vorhandenen Datenmodells](workbench.Modeler.ImportExisting.md). 

1. Nach dem Import in NOSQL Workbench können Sie das Datenmodell bearbeiten. Weitere Informationen finden Sie unter [Bearbeiten eines vorhandenen Datenmodells](workbench.Modeler.Edit.md).