sql >> Base de Datos >  >> NoSQL >> MongoDB

El mejor modelo para representar relaciones de muchos a muchos con atributos en MongoDB

En muchos sentidos, la API de Meteor fomenta documentos relacionales planos, sin embargo, MongoDB es un almacén de datos no relacionales. Desafortunadamente, este conflicto se deja como un ejercicio para que el desarrollador lo resuelva.

La noción de estructura de esquema y combinaciones es un tema enorme para cubrir en una sola respuesta, por lo que intentaré ser lo más breve posible.

Razones por las que debería elegir un modelo relacional

Suponga que tiene datos de comentarios y publicaciones. Considere lo que sucedería si incrustara comentarios en sus publicaciones.

  • DDP opera en documentos. Todos los comentarios se enviarán cada vez que se agregue un nuevo comentario en la misma publicación.

  • allow y deny las reglas operan sobre los documentos. Puede que no sea razonable esperar que las mismas reglas se apliquen simultáneamente tanto a las publicaciones como a los comentarios.

  • Las publicaciones tienden a tener más sentido en términos de colecciones. En el escenario anterior, no podríamos publicar fácilmente una lista de comentarios independientes de sus publicaciones.

  • Las bases de datos relacionales existen por buenas razones. Uno de ellos es evitar el problema de modificación múltiple inherente a su segunda solución.

Razones por las que debería elegir un modelo integrado

  • Las uniones no son compatibles de forma nativa con MongoDB y no hay un paquete central para producir una unión reactiva.

Recomendaciones

Usa tu tercera solución. En mi experiencia, las razones para elegir un modelo relacional superan con creces las restricciones impuestas por el almacén de datos. Por supuesto, superar la falta de uniones no es fácil, pero es probable que el dolor se aísle a solo un puñado de funciones de publicación. Estos son algunos recursos que recomiendo encarecidamente:

  • Cómo publicar una relación de muchos a muchos en EventedMind. Chris cubre su caso de uso exacto en detalle, sin embargo, realiza manualmente la unión reactiva con devoluciones de llamada de observación, lo cual no recomiendo.

  • Uniones reactivas en meteoros de Discover Meteor Encyclopedia. Esto cubre los conceptos básicos de cómo y por qué se debe hacer una unión reactiva.

  • El capítulo de desnormalización de Discover Meteor. Esto cubre muchos de los puntos que mencioné anteriormente y también habla sobre cuándo y cómo desnormalizar algunos de sus datos.

  • Puede utilizar Publicar con relaciones para unir sus datos. Los paquetes alternativos incluyen:publicación inteligente, publicación compuesta y publicación simple.

Si necesita más información más allá de esto, comente a continuación y actualizaré mi respuesta.