Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Mapeamento de relacionamentos de esquema

Nesta página

  • Sobre esta tarefa
  • Antes de começar
  • Passos
  • Identificar dados relacionados em seu esquema
  • Crie um mapa de esquema para seus dados relacionados
  • Escolha se deseja incorporar dados relacionados ou usar referências
  • Exemplos
  • Otimizar queries de artigos
  • Otimizar queries de artigos e autores
  • Próximos passos
  • Saiba mais

Ao projetar seu esquema, pense em como seu aplicativo precisa executar queries e retornar dados relacionados. A forma como você mapeia relacionamentos entre entidades de dados afeta o desempenho e a escalabilidade do aplicativo.

A maneira recomendada de lidar com dados relacionados é incorporá-los em um subdocumento. A incorporação de dados relacionados permite que seu aplicação consulte os dados necessários com uma única operação de leitura e evite operações $lookup lentas.

Para alguns casos de uso, você pode usar uma referência para ponto para dados relacionados em uma coleção separada.

Para determinar se você deve incorporar dados relacionados ou usar referências, considere a importância relativa das seguintes metas para seu aplicativo:

Melhorar as consultas sobre dados relacionados
Se seu aplicativo frequentemente query uma entidade para retornar dados sobre outra entidade, incorpore os dados para evitar a necessidade de operações frequentes de $lookup.
Melhorar os dados retornados de diferentes entidades
Se o seu aplicativo retornar dados de entidades relacionadas em conjunto, incorpore os dados em uma única coleção.
Melhore o desempenho da atualização
Se o seu aplicativo atualiza frequentemente os dados relacionados, considere armazenar os dados em sua própria coleção e usar uma referência para acessá-los. Ao usar uma referência, você reduz a carga de trabalho de gravação do seu aplicativo, pois só precisa atualizar os dados em um único local.

Para saber mais sobre os benefícios dos dados e referências incorporados, consulte Dados incorporados versus referências.

O mapeamento de relacionamentos é a segunda etapa do processo de projeto do esquema. Antes de mapear relacionamentos, identifique a carga de trabalho do seu aplicativo para determinar os dados necessários.

1

Identifique os dados que sua aplicação consulta e como as entidades se relacionam entre si.

Leve em consideração as operações que você identificou da carga de trabalho do seu aplicativo na primeira etapa do processo de projeto de esquema. Observe as informações que essas operações gravam e retornam, além de quais informações se sobrepõem entre várias operações.

2

Seu mapa de esquema deve mostrar campos de dados relacionados e o tipo de relação entre esses campos (um-para-um, um-para-muitos, muitos-para-muitos).

Seu mapa de esquema pode se assemelhar a um modelo entidade-relacionamento do .

3

A decisão de incorporar dados ou usar referências depende das queries comuns do seu aplicativo. Revise as queries identificadas na etapa Identificar carga de trabalho do aplicativo e use as diretrizes mencionadas anteriormente nesta página a fim de projetar seu esquema para oferecer suporte a a queries importantes e frequentes.

Configure seus bancos de dados, coleções e a lógica de seus aplicativos de acordo com a abordagem que você escolher.

Considere o seguinte mapa de esquema para um aplicativo de blog:

Mapa de esquema para um aplicativo de blog

Os exemplos a seguir mostram como otimizar seu esquema para diferentes queries, dependendo das necessidades de sua aplicação.

Se sua aplicativo query principalmente artigos em busca de informações como título, incorpore informações relacionadas na coleção articles para retornar todos os dados necessários à aplicativo em uma única operação.

O seguinte documento está otimizado para query em artigos:

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"
}
}
)

Se seu aplicativo retornar informações de artigo e informações de autor separadamente, considere armazenar artigos e autores em coleções separadas. Esse design de esquema reduz o trabalho necessário para retornar informações do autor e permite que você retorne apenas informações do autor sem incluir campos desnecessários.

No esquema seguinte, a coleção articles contém um campo authorId, que é uma referência à coleção 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"
}
)

Depois de mapear os relacionamentos dos dados do seu aplicativo, a próxima etapa no processo de design do esquema é aplicar padrões de design para otimizar seu esquema. Consulte Aplicar padrões de design.

Voltar

Identificar o volume de trabalho