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 incrustarlos en un subdocumento. Incrustar datos relacionados permite a la aplicación consultar los datos que necesita con una sola operación de lectura y evitar la 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 obtener más información sobre los beneficios de los datos y referencias integrados, consulte Vincular datos relacionados.

1

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

Considere las operaciones que identificó de la carga de trabajo de su aplicación en el paso "Identificar la carga de trabajo de la aplicación". Observe la información que estas operaciones escriben y devuelven, y qué información 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).

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

3

La decisión de incrustar datos o usar referencias depende de las consultas comunes de su aplicación. Revise las consultas identificadas en el primer paso del proceso de diseño del esquema y utilice las directrices mencionadas anteriormente en esta página para diseñar su esquema.

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

Considere el siguiente mapa de esquema para una aplicación de blog:

Mapa de esquema para una aplicación de blogs

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

Si su aplicación consulta principalmente artículos para obtener información como el título, incorpore la información relacionada en la colección articles para devolver todos los datos que necesita la aplicación en una sola operación.

El siguiente documento está optimizado para queries sobre artículos:

db.articles.insertOne(
{
title: "My Favorite Vacation",
date: ISODate("2023-06-02"),
text: "We spent seven days in Italy...",
tags: [
{
name: "travel",
url: "<blog-site>/tags/travel"
},
{
name: "adventure",
url: "<blog-site>/tags/adventure"
}
],
comments: [
{
name: "pedro123",
text: "Great article!"
}
],
author: {
name: "alice123",
email: "alice@mycompany.com",
avatar: "photo1.jpg"
}
}
)

Si su aplicación devuelve la información de los artículos y de los autores por separado, considere almacenar los artículos y los autores en colecciones separadas. Este diseño de esquema reduce el trabajo necesario para devolver la información del autor y le permite devolver solo la información del autor sin incluir campos innecesarios.

En el siguiente esquema, la colección articles contiene un campo authorId, que es una referencia a la colección authors.

db.articles.insertOne(
{
title: "My Favorite Vacation",
date: ISODate("2023-06-02"),
text: "We spent seven days in Italy...",
authorId: 987,
tags: [
{
name: "travel",
url: "<blog-site>/tags/travel"
},
{
name: "adventure",
url: "<blog-site>/tags/adventure"
}
],
comments: [
{
name: "pedro345",
text: "Great article!"
}
]
}
)
db.authors.insertOne(
{
_id: 987,
name: "alice123",
email: "alice@mycompany.com",
avatar: "photo1.jpg"
}
)

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