【问题标题】:How to structure friendship data with firebase?如何使用 Firebase 构建友谊数据?
【发布时间】:2016-08-16 02:13:37
【问题描述】:

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

我不知道我的数据结构是否正常,但我想知道如果用户更改姓名,更新友谊中姓名的最佳方法是什么,我怎样才能轻松更新友谊中的引用(浏览每个节点?)?

如果有人能帮助我理解正确的做法,谢谢。

一个。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    您所遵循的数据库结构有点混乱,可能很难通过它导航,我可能会建议:-

      Users{
        userID_1 : {
          username : “Shelly Morgan”  ,     
          useremail : “sehlly1@yahoo.co.in”
           friends :{
            userID_2 : true,
            userID_3 : true,
            userID_4 : true,
                     } 
               },
        userID_2 : {
         username : “Mikael”  ,     
         useremail : “mike1232@gmail.com”
           friends :{
            userID_1 : true,
            userID_4 : true,
                     } 
               },
        userID_3 : {
         username : “Lenoard Narish”  ,     
         useremail : “leo_nar12@gmail.com”
          friends :{
            userID_1 : true,
            userID_2 : true,
            userID_4 : true,
                     } 
               },
        userID_4 : {
         username : “Rob Stark”  ,     
         useremail : “robStar781@gmail.com”
          friends :{
             userID_1 : true
                     } 
               }
    
    }
    

    通过这种方式,您只需将朋友的userID 存储在该用户数据库中,您所要做的就是仅更改friends_uid 节点中的值。要检索friends 数据库:-

    1.) 只需点击该Userfriends 节点

    2.) 聆听每一位朋友uid

    3.) 并使用所需的uid 访问数据库以检索各个friend 的数据库

    阅读此处的文档以检索数据:https://firebase.google.com/docs/database/android/retrieve-data

    【讨论】:

    • 我阅读了 firebase 文档并建议避免嵌套数据:firebase.google.com/docs/database/android/structure-data,您对此有何看法?
    • 是的,如果您打算将它用于实时数据库等等...例如用于聊天、发送通知等,但对于存储静态值,它很好。当您需要扁平化数据结构时需要像Search Engines 或如果您的数据结构需要Weighting 那样从父根到子根的紧密链接。我认为你的结构可以很好地处理这个
    • 好的,我现在明白了,谢谢你的帮助。
    【解决方案2】:

    你的结构几乎是好的,但我会将友谊节点更改为:

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

    这与 Dravidian 显示的类似,但取决于您有多少朋友,最好不要将用户好友列表存储在用户帐户详细信息节点下,因为如果您有 1000 多个好友,则必须下载1000 个孩子,即使你只是想得到一个像他名字这样的值。

    【讨论】:

    • 您将如何检索朋友数据,因为我猜用户节点的 .read 和 .write 仅限于实际用户。
    【解决方案3】:

    您不应将name 存储在friendships 结构中,而应仅存储用户名。所以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
            },
            ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 2015-09-14
      • 2015-01-27
      • 2016-09-11
      • 2015-12-12
      • 2015-12-22
      相关资源
      最近更新 更多