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

时间:2018-03-04 14:46:17

标签: java android firebase firebase-realtime-database

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

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

Current database structure

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

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

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

  2. 对于活动,请创建一个孩子的回复'将每个用户的uid作为一个键,值可以是"接受","拒绝"或"等待"。

  3. 完全没事。

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

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

    非常感谢任何帮助或指导!!

3 个答案:

答案 0 :(得分: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 :(得分: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);

答案 2 :(得分:0)

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