Docs Menu
Docs Home
/ /

Asignar relaciones de esquemas

La manera en que usted asigna las relaciones entre las entidades de datos afecta el rendimiento y la escalabilidad de su aplicación.

La forma recomendada de gestionar datos relacionados es incorporarlos en un subdocumento. La inserción de datos relacionados permite que tu aplicación haga una query de los datos que necesita con una única operación de lectura y evite lentitud $lookup operaciones.

Para algunos casos de uso, puede utilizar una referencia para señalar datos relacionados en una colección separada.

Para determinar si debe incrustar datos relacionados o usar referencias, considere la importancia relativa de los siguientes objetivos para su aplicación:

Mejorar queries en datos relacionados
Si su aplicación consulta frecuentemente a una entidad para devolver datos sobre otra entidad, incruste los datos para evitar la necesidad de tener operaciones $lookup frecuentes.
Mejorar los datos devueltos por diferentes entidades
Si su aplicación devuelve datos de entidades relacionadas juntas, incruste los datos en una única colección.
Mejorar el rendimiento de actualización
Si su aplicación actualiza con frecuencia datos relacionados, considere almacenar los datos en su propia colección y utilizar una referencia para acceder a ellos. Cuando utiliza una referencia, reduce la carga de trabajo de guardado de su aplicación al necesitar actualizar los datos solo en un único lugar.

Para aprender más sobre los beneficios de los datos incrustados y las referencias, consulta Enlazar datos relacionados.

1

Identifique los datos que su aplicación consulta y cómo se relacionan las entidades entre sí.

Considera las operaciones que identificaste en la carga de trabajo de tu aplicación en el paso Identificar la carga de trabajo de la aplicación. Toma nota de la información que estas operaciones escriben y devuelven, así como de la información que se superpone entre varias operaciones.

2

El mapa de su esquema debería mostrar los campos de datos relacionados y el tipo de relación entre esos campos (uno a uno, uno a muchos, muchos a muchos).

Tu mapa de esquema puede parecerse a un modelo entidad-relación.

3

La decisión de incrustar datos o utilizar referencias depende de las consultas comunes de tu aplicación. Revisa las queries que identificaste en el primer paso del proceso de diseño de esquema y utiliza las pautas mencionadas anteriormente en esta página para diseñar tu esquema.

Configure sus bases de datos, colecciones y lógica de aplicaciones para que coincidan con el enfoque que elija.

Los siguientes ejemplos muestran cómo optimizar su esquema para diferentes queries, según las necesidades de su aplicación.

Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.

Si tu aplicación consulta películas para campos como title, inserta la información relacionada en la colección movies. La incrustación de datos devuelve todo lo que la aplicación necesita en una sola operación.

El siguiente documento optimiza las consultas sobre películas:

db.movies.insertOne( {
title: "The Brutalist",
year: 2024,
runtime: 215,
genres: [ "Drama", "History" ],
comments: [
{
name: "joel_m",
email: "joel_m@gameofthron.es",
text: "Visually stunning!"
}
],
user: {
name: "Joel M",
email: "joel_m@gameofthron.es"
}
} )

Si tu aplicación devuelve la información sobre películas y la información del usuario por separado, considera almacenar las películas y los usuarios en colecciones diferentes. Este diseño de esquema reduce el trabajo necesario para devolver la información del usuario y permite devolver solo la información del usuario sin incluir campos innecesarios.

En el siguiente esquema, la colección movies contiene un campo userId, que es una referencia a la colección users.

db.movies.insertOne( {
title: "A Complete Unknown",
year: 2024,
runtime: 141,
genres: [ "Biography", "Drama", "Music" ],
userId: 987
} )
db.users.insertOne( {
_id: 987,
name: "Joel M",
email: "joel_m@gameofthron.es"
} )

Después de asignar las relaciones para los datos de su aplicación, el siguiente paso en el proceso de diseño de esquema es aplicar patrones de diseño para optimizar su esquema. Vea Aplicar patrones de diseño.

Volver

Identificar la carga de trabajo

Obtén una insignia de habilidad

¡Domina el "Modelo relacional orientado a documentos" gratis!

Más información

En esta página