MongoDB - Modelagem de Dados
Os dados no MongoDB têm um schema.documents flexível na mesma coleção. Eles não precisam ter o mesmo conjunto de campos ou estrutura. Os campos comuns em documentos de uma coleção podem conter diferentes tipos de dados.
Design de modelo de dados
O MongoDB fornece dois tipos de modelos de dados: - Modelo de dados incorporado e modelo de dados normalizado. Com base no requisito, você pode usar qualquer um dos modelos ao preparar seu documento.
Modelo de Dados Embutidos
Nesse modelo, você pode ter (incorporar) todos os dados relacionados em um único documento, também conhecido como modelo de dados desnormalizado.
Por exemplo, suponha que estamos obtendo os detalhes dos funcionários em três documentos diferentes, a saber, detalhes_pessoais, contato e endereço, você pode incorporar todos os três documentos em um único, conforme mostrado abaixo -
{
_id:
, Emp_ID: "10025AE336" Personal_details:{ First_Name: "Radhika", Last_Name: "Sharma", Date_Of_Birth: "1995-09-26" }, Contact: { e-mail: "[email protected]", phone: "9848022338" }, Address: { city: "Hyderabad", Area: "Madapur", State: "Telangana" } }
Modelo de Dados Normalizado
Neste modelo, você pode consultar os subdocumentos no documento original, usando referências. Por exemplo, você pode reescrever o documento acima no modelo normalizado como:
Employee:
{
_id: <ObjectId101>,
Emp_ID: "10025AE336"
}
Personal_details:
{
_id: <ObjectId102>,
empDocID: " ObjectId101",
First_Name: "Radhika",
Last_Name: "Sharma",
Date_Of_Birth: "1995-09-26"
}
Contact:
{
_id: <ObjectId103>,
empDocID: " ObjectId101",
e-mail: "[email protected]",
phone: "9848022338"
}
Address:
{
_id: <ObjectId104>,
empDocID: " ObjectId101",
city: "Hyderabad",
Area: "Madapur",
State: "Telangana"
}
Considerações ao projetar esquema no MongoDB
Projete seu esquema de acordo com os requisitos do usuário.
Combine objetos em um documento se você for usá-los juntos. Caso contrário, separe-os (mas certifique-se de que não haja necessidade de junções).
Duplique os dados (mas limitado) porque o espaço em disco é barato em comparação com o tempo de computação.
Faça junções durante a gravação, não na leitura.
Otimize seu esquema para os casos de uso mais frequentes.
Faça agregação complexa no esquema.
Exemplo
Suponha que um cliente precise de um design de banco de dados para seu blog / website e veja as diferenças entre o design de esquema RDBMS e MongoDB. O site possui os seguintes requisitos.
Cada postagem tem título, descrição e url exclusivos.
Cada postagem pode ter uma ou mais tags.
Cada postagem tem o nome de seu editor e o número total de curtidas.
Cada postagem tem comentários feitos pelos usuários junto com seu nome, mensagem, data e hora e curtidas.
Em cada postagem, pode haver zero ou mais comentários.
No esquema RDBMS, o design para os requisitos acima terá no mínimo três tabelas.
Enquanto estiver no esquema MongoDB, o design terá uma postagem de coleta e a seguinte estrutura -
{
_id: POST_ID
title: TITLE_OF_POST,
description: POST_DESCRIPTION,
by: POST_BY,
url: URL_OF_POST,
tags: [TAG1, TAG2, TAG3],
likes: TOTAL_LIKES,
comments: [
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
},
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
}
]
}
Portanto, ao mostrar os dados, no RDBMS você precisa juntar três tabelas e no MongoDB, os dados serão mostrados de apenas uma coleção.