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

Comment convertir la forme de relation plusieurs-à-plusieurs SQL en collection mongoDB ?

Je vois plusieurs solutions à votre problème :

Rarement mis à jour

Pour éviter les jointures, qui doivent être effectuées côté client dans les bases de données NoSQL, mettez tout dans une seule collection. Si vous ne mettez pas à jour très souvent, vous pourriez le faire

{
   _id,
   LastAccessDate,
   HasException,
   Account : {
        AccountID,
        UserName,
        Email },
   Device : {
        DeviceID,
        DeviceCode }
}

Cela se traduit par des données en double, mais si les performances (pas de jointures) passent avant l'efficacité de la mémoire, c'est probablement une solution appropriée pour vous. Comme les données sont stockées plusieurs fois, les mises à jour sont plus exigeantes pour le serveur. C'est à dire. la mise à jour de l'adresse e-mail ressemblerait à

db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "[email protected]"} });

Comme vous n'avez plus besoin de l'ID de compte et de l'ID de périphérique pour vous joindre, vous pouvez également supprimer ces deux champs.

Mises à jour fréquentes

Lorsque vous avez des mises à jour fréquentes, au lieu d'intégrer, vous pouvez utiliser des références. Je pense que vous devez les résoudre côté client. Vous disposez alors de trois collections :

Compte :

{
  _id,
  UserName,
  Email
}

Appareil :

{
  _id,
  DeviceCode
}

Association :

{
  _id,
  account : {
        "$ref" : "Account",
        "$id" : ... }
  device : {
        "$ref" : "Device",
        "$id" : ... }
}

Vous n'avez pas de doublon de cette façon, mais vous devez gérer les références.