

# Modelado de datos para tablas de DynamoDB
<a name="data-modeling"></a>

Antes de profundizar en el modelado de datos, es importante comprender algunos fundamentos de DynamoDB. DynamoDB es una base de datos NoSQL de clave-valor que permite esquemas flexibles. El conjunto de atributos de los datos, aparte de los atributos clave de cada elemento, puede ser uniforme o discreto. El esquema de claves de DynamoDB tiene la forma de una clave principal simple en la que una clave de partición identifica de forma exclusiva un elemento o la forma de una clave primaria compuesta en la que una combinación de una clave de partición y una clave de clasificación define de forma exclusiva un elemento. Se crea un hash de la clave de partición para determinar la ubicación física de los datos y recuperarlos. Por lo tanto, es importante elegir un atributo de alta cardinalidad y escalable horizontalmente como clave de partición para garantizar una distribución uniforme de los datos. El atributo de clave de clasificación es opcional en el esquema de claves y disponer de una clave de clasificación permite modelar relaciones de uno a varios y crear colecciones de elementos en DynamoDB. Además, las claves de clasificación también se denominan claves de intervalo: se utilizan para clasificar elementos de una colección de elementos y también permiten realizar operaciones flexibles basadas en intervalos.

Para obtener más detalles y las prácticas recomendadas acerca del esquema de claves de DynamoDB, puede consultar lo siguiente:
+ [Particiones y distribución de datos en DynamoDB](HowItWorks.Partitions.md) 
+ [Prácticas recomendadas para diseñar claves de partición y utilizarlas con eficacia en DynamoDB](bp-partition-key-design.md) 
+ [Prácticas recomendadas sobre el uso de claves de clasificación para organizar datos en DynamoDB](bp-sort-keys.md) 
+ [Elección de la clave de partición de DynamoDB adecuada](https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/) 

Los índices secundarios suelen ser necesarios para admitir patrones de consulta adicionales en DynamoDB. Los índices secundarios son tablas sombra en las que los mismos datos se organizan mediante un esquema de claves distinto al de la tabla base. Un índice secundario local (LSI) comparte la misma clave de partición que la tabla base y permite tener una clave de clasificación alternativa con la que puede compartir la capacidad de la tabla base. Un índice secundario global (GSI) puede tener una clave de partición y un atributo de clave de clasificación diferentes a los de la tabla base, lo que significa que la administración del rendimiento de un GSI es independiente de la tabla base.

Para obtener más detalles sobre los índices secundarios y las prácticas recomendadas, puede consultar lo siguiente:
+ [Mejora del acceso con índices secundarios en DynamoDB](SecondaryIndexes.md) 
+ [Prácticas recomendadas para utilizar índices secundarios en DynamoDB](bp-indexes.md) 

Analicemos ahora el modelado de datos un poco más. El proceso de diseñar un esquema flexible y altamente optimizado en DynamoDB, o en cualquier base de datos NoSQL, puede ser una habilidad difícil de aprender. El objetivo de este módulo es ayudarlo a desarrollar un diagrama de flujo mental para diseñar un esquema que lo lleve del caso de uso a la producción. Empezaremos con una introducción a la elección fundamental de cualquier diseño: diseño de tabla única frente a diseño de tabla múltiple. A continuación, revisaremos la multitud de patrones de diseño (componentes) que se pueden utilizar para lograr diversos resultados organizativos o de rendimiento para la aplicación. Por último, incluimos una variedad de paquetes completos de diseño de esquemas para diferentes casos de uso y sectores.

![\[Imagen que muestra la relación conceptual entre los datos, los bloques que se encuentran debajo de ellos y, a continuación, la base que se encuentra debajo de los bloques.\]](http://docs.aws.amazon.com/es_es/amazondynamodb/latest/developerguide/images/DataModeling/SchemaDesign.png)


**Topics**
+ [Colecciones de elementos: cómo modelar relaciones de uno a varios en DynamoDB](WorkingWithItemCollections.md)
+ [Principios básicos del modelado de datos en DynamoDB](data-modeling-foundations.md)
+ [Componentes del modelado de datos en DynamoDB](data-modeling-blocks.md)
+ [Paquetes de diseño de esquemas de modelado de datos en DynamoDB](data-modeling-schemas.md)
+ [Prácticas recomendadas para modelar datos relacionales en DynamoDB](bp-relational-modeling.md)