MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Meilleur modèle pour représenter les relations plusieurs à plusieurs avec des attributs dans MongoDB

À bien des égards, l'API de meteor encourage les documents relationnels plats, mais MongoDB est un magasin de données non relationnel. Ce conflit est, malheureusement, laissé comme un exercice à résoudre pour le développeur.

La notion de structure de schéma et de jointures est un sujet énorme à couvrir dans une seule réponse, je vais donc essayer d'être aussi succinct que possible.

Raisons pour lesquelles vous devriez choisir un modèle relationnel

Supposons que vous ayez des données de commentaire et de publication. Pensez à ce qui se passerait si vous incorporiez des commentaires dans vos publications.

  • DDP fonctionne sur des documents. Tous les commentaires seront envoyés chaque fois qu'un nouveau commentaire dans le même message est ajouté.

  • allow et deny les règles opèrent sur les documents. Il peut être déraisonnable de s'attendre à ce que les mêmes règles s'appliquent simultanément aux publications et aux commentaires.

  • Les publications ont tendance à avoir plus de sens en termes de collections. Dans le scénario ci-dessus, nous ne pouvions pas facilement publier une liste de commentaires indépendamment de leurs publications.

  • Les bases de données relationnelles existent pour de bonnes raisons. L'une d'elles consiste à éviter le problème de modification multiple inhérent à votre deuxième solution.

Raisons pour lesquelles vous devriez choisir un modèle intégré

  • Les jointures ne sont pas prises en charge nativement par MongoDB, et il n'existe pas de package de base pour produire une jointure réactive.

Recommandations

Utilisez votre troisième solution. D'après mon expérience, les raisons du choix d'un modèle relationnel l'emportent largement sur les restrictions imposées par le magasin de données. Bien sûr, surmonter le manque de jointures n'est pas facile, mais la douleur est susceptible d'être limitée à seulement une poignée de fonctions de publication. Voici quelques ressources que je recommande vivement :

  • Comment publier une relation plusieurs-à-plusieurs sur EventedMind. Chris couvre en détail votre cas d'utilisation exact, mais il effectue manuellement la jointure réactive avec des rappels d'observation, ce que je ne recommande pas.

  • Reactive rejoint le météore de l'encyclopédie Discover Meteor. Cela couvre les bases de comment et pourquoi on devrait faire une jointure réactive.

  • Le chapitre sur la dénormalisation de Discover Meteor. Cela couvre bon nombre des points que j'ai soulevés ci-dessus et explique également quand et comment dénormaliser certaines de vos données.

  • Vous pouvez utiliser Publier avec des relations pour joindre vos données. Les packages alternatifs incluent :la publication intelligente, la publication composite et la publication simple.

Si vous avez besoin de plus d'informations au-delà de cela, veuillez commenter ci-dessous et je mettrai à jour ma réponse.