MongoDB est une base de données de documents et ne maintient pas les 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.
// Document étudiant
{
"studentName": "Frodon Sacquet",
"numéro de téléphone": "987654321",
};
// Document d'adresse
{
"studentName": "Frodon Sacquet",
"street": "Bagshot Row",
"ville": "Hobiton",
}
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.
En rapport: Comment créer une base de données et une collection dans MongoDB
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.
{
"studentName": "Frodon Sacquet",
"numéro de téléphone": "987654321",
"adresse": [{
"street": "Bagshot Row",
"ville": "Hobiton"
}],
};
Pour récupérer l'adresse via le nom d'étudiant, utilisez cette requête.
db.student.findOne({"studentName":"Frodon Baggins"}, {"address":1})
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.
{
"studentName": "Frodon Sacquet",
"numéro de téléphone": "987654321",
"adresse": [
{
"street": "Bagshot Row",
"ville": "Hobiton"
},
{
"street": "Une autre ligne de bagshot",
"ville": "Hobiton2"
},
]
};
La requête ci-dessous renverra les adresses du nom d'étudiant spécifié.
db.student.findOne({studentName: "Frodon Baggins"}, {address: 1})
En rapport: Comment créer des documents dans MongoDB
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.
{
"studentName": "Frodon Sacquet",
"numéro de téléphone": "987654321",
"adresse": [
ID d'objet("61fa7bfeebdadf8ac71427ea"),
ID d'objet("61fa7d19ebdadf8ac71427eb")
]
};
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.
const étudiant = db.users.findOne({"name":"Frodon Baggins"},{"address":1})
adresses const = db.address.find({"_id":{"$in":student["address_ids"]}})
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 un 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.
Vous envisagez une approche différente des bases de données? Voici comment fonctionne la modélisation des données dans MongoDB.
Lire la suite
- La programmation
- La programmation
- base de données
Mary Gathoni est une développeuse de logiciels passionnée par la création de contenu technique non seulement informatif mais également engageant. Lorsqu'elle ne code pas ou n'écrit pas, elle aime passer du temps avec des amis et être à l'extérieur.
Abonnez-vous à notre newsletter
Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !
Cliquez ici pour vous abonner