MongoDB - Relations

Bonjour, futurs programmeurs ! Aujourd'hui, nous allons plonger dans le monde fascinant des relations MongoDB. En tant que votre enseignant de sciences informatiques du coin, je suis excité de vous guider dans ce voyage. Ne vous inquiétez pas si vous êtes nouveau dans la programmation - nous allons commencer par les bases et progresser pas à pas. Alors, prenez une tasse de café (ou votre boisson favorite) et mettons-nous en route !

MongoDB - Relationships

Comprendre les Relations MongoDB

Avant de nous lancer dans les détails, parlons de ce que signifient les relations dans le contexte des bases de données. Imaginez que vous organisez une grande réunion de famille. Vous avez des informations sur les membres de la famille, leurs adresses et les plats qu'ils apportent au potluck. Comment organiseriez-vous toutes ces données ? C'est là que les relations entrent en jeu !

Dans MongoDB, nous avons deux principales façons de représenter les relations entre les données :

  1. Relations Embaillées
  2. Relations Référencées

Explorons chacune de ces méthodes en détail.

Modéliser les Relations Embaillées

Les relations embaillées sont comme des poupées russes - vous mettez des morceaux d'information plus petits à l'intérieur des plus grands. Cette approche est parfaite lorsque vous avez des données étroitement liées et souvent consultées ensemble.

Exemple : Membres de la Famille et Leurs Animaux de Compagnie

Disons que nous voulons stocker des informations sur les membres de la famille et leurs animaux de compagnie. Voici comment nous pourrions le faire en utilisant des relations embaillées :

db.familyMembers.insertOne({
name: "John Doe",
age: 35,
pets: [
{ name: "Fluffy", type: "Chat", age: 3 },
{ name: "Rex", type: "Chien", age: 5 }
]
})

Dans cet exemple, nous avons intégré les informations sur les animaux de compagnie directement à l'intérieur du document du membre de la famille. Décomposons cela :

  • Nous insérons un document dans la collection familyMembers.
  • Le document contient des informations de base sur John Doe.
  • Le champ pets est un tableau contenant des documents pour chaque animal de John.

Cette structure est géniale car nous pouvons facilement récupérer toutes les informations sur John et ses animaux de compagnie en une seule requête :

db.familyMembers.findOne({ name: "John Doe" })

Quand Utiliser les Relations Embaillées

Les relations embaillées sont idéales lorsque :

  1. Les données embaillées sont toujours consultées ensemble avec le document parent.
  2. Les données embaillées sont spécifiques au parent et n'ont pas besoin d'être interrogées indépendamment.
  3. Les données embaillées sont relativement petites et ne croissent pas de manière illimitée.

Souvenez-vous, dans MongoDB, un document unique ne peut pas dépasser 16 Mo. Donc, si vous traitez des quantités potentiellement grandes de données embaillées, vous pourriez vouloir envisager des relations référencées à la place.

Modéliser les Relations Référencées

Les relations référencées sont comme créer une liste d'invités pour votre réunion de famille. Au lieu de mettre toutes les informations en un seul endroit, vous gardez des listes séparées et vous les référez lorsque cela est nécessaire.

Exemple : Membres de la Famille et Leurs Adresses

Modélisons un scénario où nous voulons stocker des membres de la famille et leurs adresses, mais nous nous attendons à ce que les adresses puissent être partagées entre plusieurs membres de la famille :

// Premièrement, insérons une adresse
db.addresses.insertOne({
_id: ObjectId(),
street: "123 Rue Principale",
city: "Villebidon",
state: "CA",
zipCode: "12345"
})

// Maintenant, insérons un membre de la famille avec une référence à l'adresse
db.familyMembers.insertOne({
name: "Jane Doe",
age: 32,
addressId: ObjectId("...") // L'ObjectId du document d'adresse
})

Dans cet exemple :

  1. Nous insérons d'abord une adresse dans la collection addresses.
  2. Ensuite, nous insérons un membre de la famille dans la collection familyMembers, en stockant uniquement l'ObjectId de l'adresse.

Pour récupérer l'ensemble des informations de Jane, y compris son adresse, nous devrions effectuer une recherche :

db.familyMembers.aggregate([
{ $match: { name: "Jane Doe" } },
{ $lookup: {
from: "addresses",
localField: "addressId",
foreignField: "_id",
as: "address"
}}
])

Cette requête :

  1. Correspond au document pour Jane Doe.
  2. Effectue une recherche pour joindre les informations d'adresse.

Quand Utiliser les Relations Référencées

Les relations référencées sont bénéfiques lorsque :

  1. Les données liées sont grandes et pourraient dépasser la limite de taille de document de 16 Mo si elles sont emballées.
  2. Les données liées sont partagées entre plusieurs documents et doivent être mises à jour à plusieurs endroits.
  3. Vous avez besoin de consulter les données liées indépendamment.

Comparaison des Relations Embaillées vs Référencées

Résumons les différences clés dans un tableau pratique :

Aspect Relations Embaillées Relations Référencées
Emplacement des Données Dans le même document Documents séparés
Performance des Requêtes Plus rapide pour récupérer les données liées Nécessite des recherches supplémentaires
Duplication des Données Peut entraîner une duplication des données Réduit la duplication des données
Complexité des Mises à Jour Mises à jour plus simples dans un document Peut nécessiter des mises à jour sur plusieurs documents
Flexibilité Moins flexible pour les données partagées Plus flexible pour les données partagées entre les documents
Taille du Document Limité par la taille de document de 16 Mo Peut gérer des jeux de données liés plus grands

Conclusion

Et voilà, amis ! Nous avons traversé le pays des relations MongoDB, en explorant à la fois les relations embaillées et référencées. Souvenez-vous, il n'y a pas de solution unique - la meilleure approche dépend de votre cas d'utilisation spécifique.

Pendant que vous continuez votre aventure MongoDB, gardez ces concepts à l'esprit :

  1. Les relations embaillées sont excellentes pour les données étroitement liées et souvent consultées ensemble.
  2. Les relations référencées brillent lorsqu'il s'agit de datasets partagés ou volumineux.
  3. Toujours considérez vos modèles de requêtes et la croissance des données lorsque vous choisissez entre les deux.

La pratique rend parfait, alors n'ayez pas peur d'expérimenter avec différents modèles. Qui sait ? Vous pourriez devenir l'expert en organisation des données de la famille pour votre prochaine réunion !

Bonne programmation, et que vos bases de données soient toujours en parfaite harmonie !

Credits: Image by storyset