具有Firebase身份验证用户的Firebase数据库数据结构

时间:2017-03-08 09:12:41

标签: android ios node.js firebase-realtime-database firebase-authentication

我的Firebase数据库中有一些(有些)大量的笑话,如下图所示。

Current jokes node

我将它们显示在我的Android应用中的列表中,类似于Feed。我还实现了使用Firebase身份验证登录的可能性,现在我想为已登录的用户添加选项(如)笑话并将其添加到收藏夹(收藏夹应该像私人书签一样)。我正在徘徊如何构建我的数据,我有两个提议:

  1. 添加名为“userJokes”的新根节点,其中子节点表示来自Firebase身份验证的用户UID。每个UID子节点都应该拥有来自“笑话”节点的每个笑话的副本,以及代表(dis)喜欢和喜欢的状态的其他布尔值。

    Suggestion 1

  2. 另一个解决方案是将每个用户UID添加到用户(dis)喜欢或添加到收藏夹的笑话中。

    Suggestion 2

  3. 第一种解决方案是合乎逻辑的,但如果以这种方式构建数据,我怎么能算出喜欢和不喜欢的数量?对于要在Feed中显示的每个用户,将每个笑话从“笑话”节点复制到“userJokes”节点的最佳方法是什么?第二个是不切实际的,因为在检索笑话时,我会得到有关(dis)喜欢或添加到收藏夹的每个用户的信息,这不是我需要的。哪种解决方案更好?还有别的吗?可以将Firebase身份验证中的用户UID添加到Firebase数据库中的数据库吗?

1 个答案:

答案 0 :(得分:1)

我认为第一个更受欢迎,虽然它需要一些调整:)

首先注意:如果您创建的数据仅用作关系(例如userJokes),那么只需向其添加简单值而不复制整个源数据(jokes数据),如下所示:

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

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

总结

  • 每个笑话数据仍在其源路径中(即jokes内)并且只将其ID复制到新创建的数据路径(userJokeLikeuserJokeFavorite

  • 如果您想搜索ID为randomUserId的用户喜欢的笑话,您应该检查userJokeLike\randomUserId。然后从你到达的每个笑话ID中,从源jokes路径中获取真实数据。

  • 如果您想搜索ID为randomUserId的用户所青睐的笑话,基本上,请执行与上述相同的操作。

  • 当你想要计算每个笑话的喜欢和喜欢时,只需使用以下内容:

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

你去了,希望这有帮助。

  

注意:我还没有检查最后一个代码,希望工作:p

修改

看起来我确实误解了:D

上面的解决方案是我认为最适合结构本身的解决方案。但是,如果我们需要一些简单而快速的东西,那么每种情况/情况都会有所不同。我认为这是最好的解决方案,如果你想包括喜欢和收藏夹的笑话(不需要创建另一个请求),那么你的结构应该是这样的:

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

当您请求likes数据时,它会包含favoritejokes。因此,您需要检查每个数据中的likes和/或favorite内是否存在当前用户的UID。而这样的计数器会更容易。

快乐编码:)