0

我的Firebase数据库中有(大量)大量笑话,如下图所示。使用Firebase身份验证用户的Firebase数据库数据结构

Current jokes node

我在我的Android应用程序类似的资讯提供,列表中显示。我还实现了使用Firebase身份验证进行登录的可能性,现在我想为登录的用户添加选项(像笑话一样)并将它们添加到收藏夹(收藏夹应该与私人书签一样)。我徘徊,我怎么能组织我的数据,我有两个建议:

  1. 添加一个名为“userJokes”与代表从火力地堡身份验证用户的UID子节点新的根节点。每个UID子节点都应该有来自“笑话”节点的每个笑话的副本,其中包含代表(喜欢)和喜欢的状态的其他布尔值。

    Suggestion 1

  2. 另一个解决方案是每一个用户的UID添加到一个玩笑用户(DIS)喜欢或添加到收藏。

    Suggestion 2

第一方案是合理的,但我怎么能指望喜欢的号码和不喜欢,如果我的数据结构的这种方式?将每个笑话从“笑话”节点复制到“userJokes”节点以便每个用户在Feed中显示的最佳方法是什么?其次是不切实际的,因为虽然检索笑话,我会得到每个有(不喜欢)或添加到收藏夹的用户的信息,这不是我所需要的。哪种解决方案更好?还有其他吗?将Firebase身份验证中的用户UID添加到Firebase数据库中的数据库可以吗?

回答

1

我第一个想到的是比较公认的,尽管它需要一些好办法:)

首先要注意:如果你创建的数据只被用来作为关系(如userJokes),最好是只加简单值,它不复制整个源数据(jokes数据),就像这样:

userJokes: { 
    randomUserId: { 
     randomJokeId:true, 
     anotherRandomJokeId:true 
    } 
    awesomeUser: { 
     randomJokeId:true 
    } 
} 

秒注意:如果你想实现两个功能(喜欢和喜欢),我认为你应该把它作为不同的数据。所以它会是userJokeLikeuserJokeFavorite(或类似的东西)。每个人的结构应与我在第一个注释中提到的相同。


总之

  • 每一个笑话数据仍然在他们的源路径(即内部jokes),只有它们的ID被复制到新创建的数据路径(userJokeLikeuserJokeFavorite

  • 如果您想搜索带有编号为randomUserId的用户的笑话,请检查userJokeLike\randomUserId。然后从每个笑话ID到达那里,从源jokes的路径中获取真实数据。

  • 当您想搜索由用户编号为randomUserId的用户所喜欢的笑话时,基本上可以按上述方法进行操作。

  • 当你要计算的喜好和每一个笑话的最爱,只是用这样的:

    FirebaseDatabase.getInstance().getReference("userJokeLike") 
        .orderByChild().equalsTo("randomJokeId") 
        .addListenerForSingleValueEvent(new ValueEventListener() { 
         ... onDataChange(DataSnapshot dataSnapshot) { 
          int jokeCount = dataSnapshot.getChildrenCount(); 
         } 
        }); 
    

而且你去那里,希望这有助于。

注:我没有检查的最后一个代码,希望工作:对

编辑:

貌似我没有误会:d

上述解决方案是我认为最好的为了结构本身。但是如果我们需要简单而快速的事情,那么每种情况都会有所不同。我认为最好的解决办法,如果你想获得笑话的喜好和收藏包括(无需创建另一个请求),那么你的结构应该是这样的:

jokes: { 
    randomJokeId: { 
     // joke data here 
     likes:{ 
      randomUserId:true, 
      anotherUserId:true 
     }, 
     favorites:{ 
      randomUserId:true 
     } 
    } 
} 

它包括likesfavorite当你请求jokes数据。因此,在每个数据中,您只需检查当前用户的UID是否存在于likes和/或favorite内。而柜台会更容易这样。

快乐编码:)

+0

我可能错过了我的问题中的一点。我想在任何社交应用程序的列表中显示笑话。在显示笑话的同时,我还想立即显示喜欢,不喜欢和喜欢的相应图标,具体取决于用户已经完成了什么。就像Instagram的Feed一样,在已经喜欢的图像上显示红色的心脏。所以,我希望这些数据已经存在,而无需进行新的查询。这就是为什么我提出了第一个解决方案,我将每个笑话都保存在用户UID密钥下,并附加了代表喜欢,不喜欢和喜好的信息。 – lagoman

+0

我编辑了我的答案,希望这一次我明白了:D – koceeng

相关问题