web-dev-qa-db-fra.com

Comment organiser une relation plusieurs à plusieurs dans MongoDB

J'ai deux tables/collections; Utilisateurs et groupes. Un utilisateur peut être membre de n'importe quel nombre de groupes et un utilisateur peut également être propriétaire de n'importe quel nombre de groupes. Dans une base de données relationnelle, j'aurais probablement une troisième table appelée UserGroups avec une colonne UserID, une colonne GroupID et une colonne IsOwner.

J'utilise MongoDB et je suis sûr qu'il existe une approche différente pour ce type de relation dans une base de données de documents. Dois-je intégrer la liste des groupes et des groupes en tant que propriétaire dans la table Users sous la forme de deux tableaux d'ObjectID? Dois-je également stocker la liste des membres et des propriétaires dans la table Groupes sous la forme de deux tableaux, reflétant efficacement la relation, provoquant une duplication des informations sur la relation?

Ou est-ce qu'une table UserGroups de pontage est un concept légitime dans les bases de données de documents pour de nombreuses relations?

Merci

58
Typo Johnson

Ce que j'ai vu et ce que j'utilise actuellement, ce sont des tableaux intégrés avec des identifiants de nœud dans chaque document.

Le document user1 possède donc des groupes de propriétés: [id1, id2]

Et le document groupe1 a des utilisateurs de propriété: [utilisateur1]. Le groupe de documents 2 possède également des utilisateurs de propriété: [utilisateur1].

De cette façon, vous obtenez un objet Groupe et sélectionnez facilement tous les utilisateurs associés, et la même chose pour l'utilisateur.

Cela nécessite un peu plus de travail lors de la création et de la mise à jour de l'objet. Lorsque vous dites que 2 objets sont liés, vous devez mettre à jour les deux objets.

Il existe également un concept DBReferences dans MongoDB et selon votre pilote, il extraira automatiquement les objets référencés lors de la récupération d'un document.

http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef

35
Alexandru Petrescu

Au cas où quelqu'un serait intéressé, je suis tombé sur un très bon article publié sur le blog mongoDB. 6 règles générales pour la conception de schémas MongoDB . Il y a 3 parties dans cet article, après avoir lu les 3, vous aurez une bonne compréhension.

5
Mamun Sardar

Comprenons les relations plusieurs à plusieurs avec des exemples

  • livres aux auteurs
  • élèves aux enseignants

Les livres aux auteurs sont une relation peu à pe, donc nous pouvons avoir un tableau de livres ou d'auteurs dans le document d'un autre. Il en va de même pour les élèves et les enseignants. Nous pourrions également intégrer au risque de duplication. Cependant, cela exigera que chaque élève ait un enseignant dans le système avant l'insertion et vice versa. La logique d'application peut toujours ne pas le permettre. En d'autres termes, l'objet parent doit exister pour que l'objet enfant existe.

Mais lorsque vous avez une relation plusieurs à plusieurs, utilisez deux collections et établissez une véritable liaison.

2
student