如何在Firebase中最好地存储其他数据库对象的ID(例如:用户事件)

问题描述 投票:0回答:3

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

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

Current database structure

我现在要做的是每个活动,我想知道哪些用户已接受,拒绝或尚未响应邀请。

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

  1. 对于事件,创建3个子项,这些子项将存储每个响应选项的所有用户信息。 (接受,拒绝,待定)。
  2. 对于一个事件,创建一个子“响应”,将每个用户的uid作为一个键,该值可以是“已接受”,“已拒绝”或“待定”。
  3. 还有别的东西。

选项1似乎可以工作,但这意味着将在整个数据库中复制用户数据。如果邀请用户参加1000个活动,那么每个活动中将有一次该用户的副本1000次。

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

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

java android firebase firebase-realtime-database
3个回答
2
投票

选项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"

这更接近彼得的答案,但在这里我们将它们与事件id和uid联系起来。


1
投票

试试这个:

Events
  eventid1
     createdby: userx
     eventname: Party
   eventid2
      createdby: usery
      eventname: Meetup


  AttendancetoEvent
        eventid1
            username: userf
            response: accepted
        eventid1
             username: userg
             response: rejected
         eventid2
             username: userg
             response: accepted

然后要获得接受的用户,请执行以下操作:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("AttendancetoEvent");
Query queries=ref.child("eventid1").orderByChild("username").equalTo(accepted);

0
投票

嗯,你说的一切正常,只是说。对于Events节点,可以使用.push()函数作为随机分支名称。那么让我们开始吧,每个用户都有一个UID,好吗?用户的数据特别存储在那里,包括他们的名字,已完成。现在,用户发布了一个事件,因此将该事件推送到Events,现在在UID节点中创建一个用户事件的arrayList。因此,当您上传该事件时,您将获得它的引用并将其存储在UID分支中,以便用户可以检索他的所有事件。对于已接受,待决或拒绝的选择,我希望您正在构建的任何内容都具有这些功能的按钮。所以现在onClickListener()将用户的Uid存储在arrayList中,用于任何选择,并将其上传到检索到的Event的分支。为此,在Event模型类中为路径引用添加一个String,以便您可以在那里上传选项。全部完成。现在,如果想知道谁接受,拒绝或有待决选择的用户,您可以使用来自arrayList的UID显示用户名。我建议使用uid,因为如果事件上传者想要获得更多选择任何选项的用户数据。我认为这样可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.