java - 如何在 Firebase 中最好地存储其他数据库对象的 ID(例如 : Event with Users)

标签 java android firebase firebase-realtime-database

我是 firebase 新手,正在构建一个 Android 应用程序来练习。 我的应用程序非常简单。有可以创建事件的用户。其他用户可以接受或拒绝 Activity 邀请。 为了简单起见,每当创建 Activity 时,数据库中的所有用户都会被邀请参加该 Activity 。

我的数据库目前的结构如下:

Current database structure

我现在想要做的是,对于每个 Activity ,我想知道哪些用户已接受、拒绝或尚未回复邀请。

我不确定解决这个问题的最佳方法。以下是我的一些想法:

  1. 对于事件,创建 3 个子级,它们将存储每个响应选项的所有用户信息。 (已接受、已拒绝、待定)。

  2. 对于事件,创建一个子“响应”,其中每个用户 uid 作为键,值可以是“已接受”、“已拒绝”或“待处理”。

  3. 完全是别的东西。

选项 1 似乎可以工作,但这意味着用户数据将被复制到整个数据库。如果某个用户被邀请参加 1000 个 Activity ,则该用户的副本实际上会存在 1000 次,每个 Activity 中都会有一次。

选项 2 对我来说似乎很合乎逻辑,但是我尝试实现它,但在构建 firebase 查询时遇到困难。如果我想要所有接受的用户,我需要获取“acceptedUsers”子节点的所有 uid,然后从“users”节点中提取与这些 uid 匹配的所有子节点。这似乎不可能......?

任何帮助或指导将不胜感激!!

最佳答案

选项 2 对我来说似乎最直接:

responses
  eventid
    uid1: "accepted"
    uid2: "rejected"
    uid3: "pending"

您确实必须在客户端加载每个用户的附加信息。由于请求可以通过单个连接进行管道传输,因此效果很好,并且性能比大多数开发人员预期的要好得多。有关这方面的更多信息,请参阅我的回答:http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786

如果您确实不想执行客户端连接,您可以为每个响应存储附加数据,以便您显示它。如果要显示用户名:

responses
  eventid
    uid1
      status: "accepted" 
      displayName: "Ryan Saffar"

这更接近 Peter 的答案,但在这里我们将它们与事件 id 和 uid 分开。

关于java - 如何在 Firebase 中最好地存储其他数据库对象的 ID(例如 : Event with Users),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49096601/

相关文章:

java - 使用 apache poi 从 Excel 读取下拉列表内容

android - GCM(现在的 FCM)是否有任何限制?

java - Firebase RecyclerView - 如何只显示过滤后的数据?

java - 在被调用方法内分配一个对象,将其作为参数传递后,对调用方法没有任何影响

java - 什么是 csv 文件以及如何使用 java 代码解析它?

java - 在带有分隔符的 ListView 中显示 JSON

Android 相当于 Xcode 中的 UIWebView

java - 如何知道多部分请求中该部分的真实内容类型是什么

java - 未找到类 "com.google.android.gms.common.app.GmsApplication"

ios - pod firebase 到 Xcode 时出错