Docs Menu
Docs Home
/ /

Se puede aplicar la coherencia de los datos mediante incrustación

Si su esquema almacena los mismos datos en varias colecciones, puede incrustar datos relacionados para eliminar la duplicación. El esquema actualizado y desnormalizado mantiene la coherencia de los datos al mantener los valores en una única ubicación.

Incrustar datos relacionados simplifica el esquema y garantiza que el usuario siempre lea los datos más actualizados. Sin embargo, la incrustación puede no ser la mejor opción para representar relaciones complejas como las de muchos a muchos.

La forma óptima de integrar datos relacionados depende de las consultas que ejecute su aplicación. Al integrar datos en una sola colección, considere los índices que permiten consultas de alto rendimiento y estructure su esquema para que permitan índices lógicos y eficientes.

Para comparar los beneficios de incrustar documentos y referencias, consulte Enlace de datos relacionados.

Revise los diferentes métodos para garantizar la consistencia de los datos y garantizar que la incrustación sea la mejor opción para su aplicación. Para más información, consulte Consistencia de datos.

Actualizar el almacenamiento de datos en su base de datos puede afectar los índices y las consultas existentes. Al actualizar su esquema, actualice también los índices y las consultas de su aplicación para tener en cuenta los cambios.

El siguiente ejemplo refuerza la consistencia de los datos en una aplicación de comercio electrónico. En el esquema inicial, la información del producto se duplica en el products y sellers colecciones. El sellerId campo en la products colección es una referencia a la sellers colección y vincula los datos.

// products collection
[
{
_id: 111,
sellerId: 456,
name: "sweater",
price: 30,
rating: 4.9,
color: "green"
},
{
_id: 222,
sellerId: 456,
name: "t-shirt",
price: 10,
rating: 4.2,
color: "blue"
},
{
_id: 333,
sellerId: 456,
name: "vest",
price: 20,
rating: 4.7,
color: "red"
}
]
// sellers collection
[
{
_id: 456,
name: "Cool Clothes Co",
location: {
address: "21643 Andreane Shores",
state: "Ohio",
country: "United States"
},
phone: "567-555-0105",
products: [
{
id: 111,
name: "sweater",
price: 30
},
{
id: 222,
name: "t-shirt",
price: 10
},
{
id: 333
name: "vest",
price: 20
}
]
}
]

Para desnormalizar el esquema y garantizar la coherencia, incorpore la información del producto dentro de la colección sellers:

db.sellers.insertOne(
{
_id: 456,
name: "Cool Clothes Co",
location: {
address: "21643 Andreane Shores",
state: "Ohio",
country: "United States"
},
phone: "567-555-0105",
products: [
{
id: 111,
name: "sweater",
price: 30,
rating: 4.9,
color: "green"
},
{
id: 222,
name: "t-shirt",
price: 10,
rating: 4.2,
color: "blue"
},
{
id: 333,
name: "vest",
price: 20,
rating: 4.7,
color: "red"
}
]
}
)

El esquema actualizado devuelve toda la información del producto cuando un usuario consulta a un vendedor específico. No requiere lógica ni mantenimiento adicionales para mantener la coherencia de los datos, ya que se desnormalizan en una sola colección.

Después de reestructurar el esquema, puede crear índices para admitir consultas comunes. Por ejemplo, si los usuarios suelen consultar productos por color, puede crear un índice en el campo products.color:

db.sellers.createIndex( { "products.color": 1 } )

Volver

Usa transacciones

En esta página