Travailler avec les relations de données dans MongoDB
MongoDB est une base de données de documents et ne maintient pas de relations entre les documents comme les bases de données relationnelles telles que PostgreSQL.
Pourtant, MongoDB vous permet de créer des relations entre les documents. Ces relations peuvent être modélisées par des approches intégrées ou référencées. Regardons de plus près.
Relations intégrées vs relations de référence
Dans une approche intégrée, un document est directement inséré dans un autre document, ce qui donne des données imbriquées. Le processus est également appelé « dénormalisation ».
L’approche de référence, d’autre part, utilise des références de document pour pointer d’un document à un autre. Cette approche est également appelée « normalisation ».
MongoDB : relations individuelles avec les documents intégrés
Vous pouvez créer une relation un à un entre des documents à l’aide de l’approche intégrée. Cette relation se produit lorsqu’un objet document ne peut être lié qu’à un seul autre document.
Envisagez une base de données d’étudiants. Cette base de données contient les collections d’étudiants et d’adresses avec les documents suivants.
Dans cette base de données, un étudiant n’est autorisé à avoir qu’une seule adresse. Pour récupérer l’adresse, vous devrez interroger la collection d’adresses à l’aide du nom de l’élève.
Dans les cas où l’adresse est utilisée en tandem avec d’autres détails tels qu’un nom d’étudiant , vous devrez interroger la base de données plusieurs fois. L’inconvénient est un nombre élevé d’opérations de lecture et, par conséquent, une faible performance des requêtes.
En utilisant l’approche intégrée, vous pouvez insérer les données d’adresse directement dans le document de l’étudiant et n’utiliser qu’une seule requête pour obtenir les données.
Pour récupérer l’adresse via le nom d’étudiant utilisez cette requête.
Relations un-à-plusieurs avec des documents intégrés dans MongoDB
Considérez une situation où un étudiant a plusieurs adresses. La relation entre l’élève et les adresses devient un-à-plusieurs.
Le modèle intégré vous permet d’ajouter plusieurs adresses au document de l’étudiant. Comme dans la relation un-à-un utilisant des documents intégrés, cette approche a une performance de requête relativement élevée.
La requête ci-dessous renverra les adresses du nom d’étudiant spécifié.
Maintenant, si vous avez plus d’adresses et continuez à les ajouter au champ d’adresse, le document peut devenir encombré assez rapidement. Une solution consiste à utiliser des références de documents.
MongoDB : relations un-à-plusieurs avec des références de documents
Vous pouvez également modéliser une relation un-à-plusieurs à l’aide de l’approche de référence. Dans ce modèle de données, les données sur les étudiants et les adresses seront conservées dans des collections distinctes. Pour associer l’étudiant à son adresse, ajoutez un champ contenant les identifiants d’adresse au document de l’étudiant.
Obtenir les détails de l’adresse d’un étudiant implique de récupérer les identifiants d’adresse à partir du document de l’étudiant et d’utiliser ces identifiants pour récupérer les adresses réelles de la collection.
Choisir entre les approches embarquées et de référence
Les modèles d’intégration et de référencement ont tous deux leurs avantages et leurs inconvénients, et vous devrez tenir compte de quelques éléments avant de faire votre choix. . Pour commencer, vous devrez considérer le cas d’utilisation. Si les données ne seront liées qu’à un seul document, l’intégration pourrait être votre meilleure option.
Pour créer des relations un-à-plusieurs, vous pouvez utiliser le modèle de référence ou le modèle intégré. Le référencement donne un document propre et cohérent puisque vous n’ajoutez que l’ID de référence du document auquel vous souhaitez vous associer.
Cependant, le nombre d’opérations de lecture nécessaires pour récupérer les données connectées est relativement élevé et peut avoir un impact sur les performances. L’incorporation du document peut augmenter les performances, mais avec de nombreux documents imbriqués, vous risquez de vous retrouver avec une collection encombrée.
Le choix de la manière d’implémenter les relations entre les données dans votre document vous appartient donc entièrement. Réfléchissez à la manière dont vous utiliserez le document, au niveau de performances des requêtes que vous visez et aux compromis que vous êtes prêt à faire.