您将如何为Firebase中的用户和朋友模型建模?

时间:2017-07-07 15:00:38

标签: json firebase firebase-realtime-database nosql

我正在尝试使用Firebase创建数据库(json)。 我搜索了文档和网络,但找不到明确的方法开始。 我想拥有一个用户数据库。 每个用户(表示为UID)应该有一个昵称和一个朋友列表。

我尝试制作一个如下所示的.json文件:

{
  users:{

  }
}

并将其添加到Firebase控制台以开始使用但不起作用。 我该怎么办?

数据库应如下所示:

{
  users:{
       UID:{
          nickname: hello
          friends: UID2
       }
       UID2:{
          nickname: world
          friends: UID
  }
}

我不知道我是否做得对,所以我非常感谢你们在这个问题上能给我的任何帮助。 提前谢谢!

1 个答案:

答案 0 :(得分:9)

似乎是个好地方。我会做两处修改。

  1. 保持列表是朋友分开
  2. 将朋友保留为一组,而不是单个值或数组
  3. 保持列表是朋友分开

    使用Firebase数据库时的基本建议是保持数据结构浅/平。这有很多原因,你至少有两个。

    1. 使用您当前的数据结构,假设您要显示用户名列表。您只能通过收听/users来获取该列表。这意味着您不仅要获取每个用户的用户名,还要获取他们的朋友列表。您将向用户显示所有数据的机会很小,这意味着您只是浪费了一些带宽。

    2. 假设您希望每个人都能阅读用户名列表。但是您只希望每个用户都能够阅读他们自己的朋友列表。由于permission cascadesrules are not filters

    3. ,您当前的数据结构很难实现

      更好的结构是将用户个人资料列表(当前只是他们的名字)与每个用户的朋友列表分开。

      将朋友保持为一组

      您当前只有friends属性的单个值。当您开始构建应用程序时,您将需要存储多个朋友。最常见的是然后存储一个数组或UIDS列表:

      [ UID1, UID2, UID3 ]
      

      或者

      {
        "-K.......1": "UID1"
        "-K.......5": "UID2"
        "-K.......9": "UID3"
      }
      

      遗憾的是,这些数据结构的类型错误。数组和第二个集合都是列表:(可能)非唯一值的有序集合。但是不需要订购朋友集合, 是唯一的。我要么在收藏中,要么我不在那里,我不能在那里多次,订单通常无关紧要。这就是为什么您经常会使用上述模型查找friends.contains("UID1")ref.orderByValue().equalTo("UID1")操作的原因。

      更好的模型是将数据存储为一组。集合是无序值的集合,必须是唯一的。非常适合朋友聚会。要将其存储在Firebase中,我们使用UID作为集合的关键字。由于我们无法存储没有值的密钥,因此我们使用true作为虚拟值。

      所以这导致了这个数据模型:

      {
        users:{
           UID:{
             nickname: hello
           }
           UID2:{
             nickname: world
           }
        }
        friends:{
           UID:{
             UID2: true
           }
           UID2:{
             UID: true
           }
        }
      }
      

      对于一般的NoSQL数据建模和Firebase,还有很多话要说/了解。要了解这一点,我建议您阅读NoSQL data modeling并观看Firebase for SQL developers