我是 firebase 新手,正在构建一个 Android 应用程序来练习。 我的应用程序非常简单。有可以创建事件的用户。其他用户可以接受或拒绝 Activity 邀请。 为了简单起见,每当创建 Activity 时,数据库中的所有用户都会被邀请参加该 Activity 。
我的数据库目前的结构如下:
我现在想要做的是,对于每个 Activity ,我想知道哪些用户已接受、拒绝或尚未回复邀请。
我不确定解决这个问题的最佳方法。以下是我的一些想法:
对于事件,创建 3 个子级,它们将存储每个响应选项的所有用户信息。 (已接受、已拒绝、待定)。
对于事件,创建一个子“响应”,其中每个用户 uid 作为键,值可以是“已接受”、“已拒绝”或“待处理”。
里>完全是别的东西。
选项 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/