

# DynamoDB 表的数据建模
<a name="data-modeling"></a>

在我们深入研究数据建模之前，了解一些 DynamoDB 基础知识很重要。DynamoDB 是一个键/值 NoSQL 数据库，允许灵活的架构。除了每个项目的关键属性外，数据属性集可以是统一的，也可以是离散的。DynamoDB 键架构要么采用简单主键的形式（其中分区键可以唯一地标识项目），要么是采用复合主键的形式（其中分区键和排序键的组合可以唯一地定义项目）。对分区键进行哈希处理，以确定数据的物理位置并检索数据。因此，务必选择高基数和水平可扩展的属性作为分区键，以确保数据的均匀分布。排序键属性在键架构中是可选的，使用排序键可以针对一对多关系建模并在 DynamoDB 中创建项目集合。排序键也称为范围键，用于对项目集合中的项目进行排序，还允许灵活的基于范围的操作。

有关 DynamoDB 键架构的更多详细信息和最佳实践，您可以参考以下内容：
+ [DynamoDB 中的分区和数据分布](HowItWorks.Partitions.md) 
+ [在 DynamoDB 中设计并有效使用分区键的最佳实践](bp-partition-key-design.md) 
+ [在 DynamoDB 中使用排序键整理数据的最佳实践](bp-sort-keys.md) 
+ [选择正确的 DynamoDB 分区键](https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/) 

在 DynamoDB 中，通常需要二级索引来支持其他查询模式。二级索引是影子表，与基表相比，相同的数据通过不同的键架构进行组织。本地二级索引（LSI）与基表共享相同的分区键，并允许使用备用排序键以允许它共享基表的容量。全局二级索引（GSI）可以具有与基表不同的分区键以及不同的排序键属性，这意味着 GSI 的吞吐量管理独立于基表。

有关二级索引和最佳实践的更多详细信息，可以参考以下内容：
+ [在 DynamoDB 中使用二级索引改进数据访问](SecondaryIndexes.md) 
+ [在 DynamoDB 中使用二级索引的最佳实践](bp-indexes.md) 

现在让我们更深入地了解数据建模。在 DynamoDB 或任何相关的 NoSQL 数据库上，设计灵活且高度优化的架构，这个过程所需的技能学习起来并不简单。本模块的目标是协助您开发用于设计架构的思维流程图，让您从使用场景转入生产。首先，我们将介绍在进行所有设计（即单表设计与多表设计）时的基础选择。接下来，我们将查看多种设计模式（构建基块），您可以利用这些模式来为应用程序实现不同的组织或性能结果。最后，我们还为不同的使用场景和行业提供了各种完整的架构设计包。

![\[图中显示了数据、位于数据下方的数据块以及位于数据块下方的基础之间的概念关系。\]](http://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/images/DataModeling/SchemaDesign.png)


**Topics**
+ [项目集合 - 如何在 DynamoDB 中对一对多关系建模](WorkingWithItemCollections.md)
+ [DynamoDB 中的数据建模基础](data-modeling-foundations.md)
+ [DynamoDB 中的数据建模构建基块](data-modeling-blocks.md)
+ [DynamoDB 中的数据建模架构设计包](data-modeling-schemas.md)
+ [在 DynamoDB 中建模关系数据的最佳实践](bp-relational-modeling.md)