2016-08-15 35 views
5

我是firebase的新手,我尝试构建我的数据以存储我的应用程序用户之间的友谊。如何构建与firebase的友谊数据?

我的数据结构是这样的:

{ 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 
     } 
    } 
} 

我不知道如果我的数据结构是确定的,但我不知道什么是如果用户更改以更新的友谊名的最好办法了名称,我如何轻松更新友谊中的引用(浏览每个节点?)?

谢谢,如果有人能帮助我理解正确的方式来做到这一点。

A.

回答

4

您的结构几乎是好的,但我想改变的友谊节点到这一点:

{ 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 
    } 
} 

这类似于德拉威表现,但取决于你有多少朋友们,这可能是一个更好的主意,不将用户好友列表存储在用户帐户详细信息节点下,因为如果您有1000个以上的朋友,则即使您只想获得像他的姓名一样的单个值,您也必须下载1000个孩子。

+0

你会如何检索好友数据,因为我猜测用户节点将.read和.write限于实际用户。 – Newbie

0

你不应该存储namefriendships结构,只有用户名。所以friendships应该看起来更像是这样的:

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

这样,如果你更新name,你只需要在一个地方(users)来更新它。您可以将用户名friendships与用户名users进行对照,查找name

而且如果你使用push()的友谊,结构将变化不大,但同样的原则也适用:

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

您所关注的数据库结构是有点乱,可能证明是有点硬通过它来导航,我可能会建议: -

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 
       } 
      } 

} 

这样你只存储在用户数据库的朋友userID,所有你需要做的就是改变只有friends_uid值node.To检索friends数据库: -

1)刚打的那个User

2. friends节点)监听每朋友uid

3),并用打数据库所需uid检索的各个friend

数据库的阅读这些文档检索数据:https://firebase.google.com/docs/database/android/retrieve-data

+0

我阅读了firebase文档,并且建议避免嵌套数据:https://firebase.google.com/docs/database/android/structure-data,您对此有何看法? – aurevec

+1

是的,如果你打算使用它的实时数据库左右......比如聊天,发送通知等。但是为了存储静态值,当你需要像'Search Engines''中或者你的数据结构需要'Weighting'那样需要从父根关联到子项时,需要使用它的fine.Flatten DataStructures。我认为你的结构可以正常工作 – Dravidian

+0

好吧,我现在明白了,谢谢你的帮助。 – aurevec