2016-08-15 9 views
5

Jestem nowicjuszem z firebase i staram się uporządkować moje dane, aby przechowywać przyjaźń między użytkownikami mojej aplikacji.Jak skonstruować dane o przyjaźni z bazą ogniową?

moje dane są skonstruowane tak:

{ users: { 
     user_1: { 
      name: John 
     }, 
     user_2: { 
      name: Jack 
     }, 
     user_3: { 
      name: Georges 
     }, 
    }, 
    { friendships : { 
     user_1 : { 
     user_2: { 
      name: Jack 
      }, 
     user_3: { 
      name: Georges 
     }, 
     user_3: { 
     user_1: { 
      name: John 
     }, 
     user_2: { 
      name: Jack 
     } 
    } 
} 

Nie wiem, czy moja struktura danych jest OK, ale zastanawiam się, co jest najlepszym sposobem, aby zaktualizować nazwę w przyjaźniach, jeśli użytkownik zmieni swoje imię, jak mogę łatwo zaktualizować referencje w przyjaźni (przegląda każdy węzeł?)?

Dziękuję, jeśli ktoś może mi pomóc zrozumieć właściwą drogę.

A.

Odpowiedz

4

Twoja konstrukcja jest prawie dobrze, ale chciałbym zmienić węzeł przyjaźnie do tego:

{ users: { 
     user_1: { 
      name: John 
     }, 
     user_2: { 
      name: Jack 
     }, 
     user_3: { 
      name: Georges 
     }, 
    }, 
    { friendships : { 
     user_1 : { 
     user_2: true, 
     user_3: true, 
     user_3: { 
     user_1: true, 
     user_2: true 
    } 
} 

ten jest podobny do tego, co pokazał Dravidian, ale w zależności od tego, ile masz znajomych, być może jest to lepszy pomysł, aby nie przechowuj listę znajomych użytkowników w węźle szczegółów konta użytkownika, ponieważ gdybyś miał ponad 1000 znajomych, musiałbyś pobrać 1000 dzieci, nawet gdybyś chciał uzyskać pojedynczą wartość, taką jak jego imię.

+0

W jaki sposób odzyskasz dane znajomych, ponieważ domyślam się, że węzeł użytkownika będzie miał .read i .write ograniczone do rzeczywistego użytkownika. – Newbie

0

Nie należy przechowywać name w strukturze friendships tylko nazwy użytkowników. Więc friendships powinien wyglądać mniej więcej tak:

{ 
    friendships: { 
     user_1: [ 
      user_2, 
      user_3 
     ], 
     user_2: [ 
      user_1 
     ] 
    } 
} 

ten sposób po aktualizacji name, trzeba tylko aktualizować je w jednym miejscu (users). Możesz odwołać się do nazwy użytkownika od friendships za pomocą nazwy użytkownika w users, aby znaleźć name.

Również w przypadku korzystania push() na przyjaźnie, struktura zmieni się trochę, ale ta sama zasada:

{ 
    friendships: { 
     user_1: { 
      -KPE008BeSzNR5D3W7t3: user_2, 
      -KPE0nF4AW7Lj66xTLUu: user_3 
     }, 
     ... 
    } 
} 
5

Struktura bazy danych, które naśladują jest nieco niechlujny i może okazać się trochę ciężko poruszać się po nim, mogę zasugerować: -

Users{ 
    userID_1 : { 
     username : “Shelly Morgan” ,  
     useremail : “[email protected]” 
     friends :{ 
     userID_2 : true, 
     userID_3 : true, 
     userID_4 : true, 
       } 
      }, 
    userID_2 : { 
    username : “Mikael” ,  
    useremail : “[email protected]” 
     friends :{ 
     userID_1 : true, 
     userID_4 : true, 
       } 
      }, 
    userID_3 : { 
    username : “Lenoard Narish” ,  
    useremail : “[email protected]” 
     friends :{ 
     userID_1 : true, 
     userID_2 : true, 
     userID_4 : true, 
       } 
      }, 
    userID_4 : { 
    username : “Rob Stark” ,  
    useremail : “[email protected]” 
     friends :{ 
     userID_1 : true 
       } 
      } 

} 

w ten sposób tylko przechowywać userID przyjaciół w tej bazie danych użytkowników, a wszystko co musisz zrobić, to zmienić wartości w tylko friends_uid node.To odzyskać bazę friends: -

1.) po prostu hit węzeł friends tego User

2) słuchania dla każdego przyjaciółmi uid,

3) i uderzył w bazę danych z pożądane uid odzyskać bazę odpowiedniego friend

Przeczytaj dokumentację tu do pobierania danych: https://firebase.google.com/docs/database/android/retrieve-data

+0

Przeczytałem dokumentację bazy firewall i zalecam unikanie zagnieżdżonych danych: https://firebase.google.com/docs/database/android/structure-data, co o tym sądzisz? – aurevec

+1

Tak, jeśli zamierzasz używać go do bazy danych w czasie rzeczywistym lub ... na przykład do czatu, wysyłania powiadomień itp.ale do przechowywania wartości statycznych, jego Fine.Flatten DataStructures są potrzebne, gdy potrzebujesz mieć bliskie łącze do potomka z katalogu głównego, jak w 'Wyszukiwarkach' LUB jeśli twoja struktura danych wymaga' Ważenia'. Myślę, że twoja struktura byłaby w porządku z tym – Dravidian

+0

OK, teraz rozumiem lepiej, dziękuję za pomoc. – aurevec