2017-09-12 1 views
0

utilisateurLecture des détails d'un utilisateur de groupe appartient à l'firebase

-userId 

    -Name 
    -age 
    -groups 

     groupId1:true 
     groupId2:true 

Groupe

-groupId 

    -name 
    -desc 
    -UserId 

     -UserId1:true 
     -UserId2:true 

Ce qui précède est ma structure de base de données ne firebase.I ont signé les utilisateurs Id. Je souhaite répertorier les détails de tous les groupes auxquels l'utilisateur appartient. Mon approche est,

  1. Trouver tous les groupes auxquels appartient mon utilisateur en vérifiant l'index de l'utilisateur. En utilisant la liste de groupid obtenue à l'étape 1, obtenez les détails du groupe à partir des groupes.

Y a-t-il une meilleure approche ou des suggestions?

+0

Je pense que cela est la meilleure solution trop –

Répondre

1

Avec votre structure de données actuelle, vous aurez en effet faire l'approche à deux gradins:

  1. charge la liste des GID
  2. charge les métadonnées (nom) de chaque groupe

Ceci est connu comme une jointure côté client et est assez commun avec Firebase.

Vous pouvez également dupliquer les informations les plus importantes sur chaque groupe sous les groupes de chaque utilisateur. Par exemple.

UserGroups 
    User1 
    Group1: "This is the first group" 
    Group2: "This is the second group" 

Comme vous le voyez dans cet exemple, nous avons remplacer le marqueur true par le nom du groupe. L'avantage de ceci est que pour un simple cas d'utilisation, il suffit de lire cette liste et de ne pas faire de jointure côté client. Un inconvénient est que vous devez décider si/comment conserver la synchronisation des données. J'ai écrit une réponse avec l'option pour cela ici: How to write denormalized data in Firebase

Notez que votre modèle de données n'est pas complètement aplati, puisque vous mélangez des types d'entité. Je recommande de séparer les métadonnées de chaque utilisateur (leur nom et leur description) de la "liste des groupes auxquels appartient l'utilisateur". Cela vous laisse avec quatre listes de haut niveau:

Users 
Groups 
UserGroups 
GroupUsers 

Ceci est un modèle commun pour beaucoup à plusieurs relations, que je décrit plus en détail ici: Many to Many relationship in Firebase

+0

Comme mon application a besoin de mettre à jour les informations de groupe à chaque fois qu'il change, je préfère aller avec la première approche de faire une recherche en 2 étapes. – django

+0

J'ai fait face à un showstopper en faisant l'approche ci-dessus.Could n'importe qui s'il vous plaît donner des conseils sur cette question https://stackoverflow.com/questions/46204767/accessing-array-in-component-from-ionic-view – django

0

Ci-dessous la méthode permet de récupérer les informations du groupe qui utilisateur appartient à.

self.usersPerGroupRef = [_rootRef child:@"Group"]; 
    [_usersPerGroupRef observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { 
    self.usersArray = [NSMutableArray new]; 
    for (snapshot in snapshot.children) { 
     NSMutableDictionary *groupDict = [NSMutableDictionary new]; 
     groupDict = snapshot.value[@"UserId"]; 
     if ([groupDict objectForKey:@"userID"]) { 
     NSLog(@"Group Name: %@",snapshot.value[@"name"]); 
     [self.usersArray addObject:snapshot.key]; 
     } 
    } 
    }];