需要有关firebase数据结构的指导

时间:2016-07-13 02:35:59

标签: swift firebase firebase-realtime-database

我花了8个小时的时间用不同的方法来实现这个目标,我找不到一种效果很好/合理的方法。我想我可能会让它复杂化。非常感谢任何帮助。

一般要点是我有一个初始的tableview来加载来自所有用户/最终只是朋友的帖子。 用户可以通过点击特定单元格来“加入”帖子。 然后我需要另一个页面向用户显示他们加入的所有帖子,然后是最后一页,显示所有加入特定帖子的人员。

因此,当用户看到关于猫的帖子时,点击帖子,加入。进入另一个屏幕,猫现在将进入该tableview以及他们加入的任何其他帖子。单击猫细胞和所有加入猫的用户。

TableView1是所有帖子

TableView2是用户加入的帖子

TableView3是tableview2中所选单元格的“详细视图”,显示从TableView1返回该帖子的所有用户。

我绝对无法找到构建数据的好方法。

一种“捕获”是一个用户每天只能发一个帖子,所以在用户的​​帖子下永远不会有任何重复,但我很困惑,我甚至不知道这是否有所作为。

我基本上有类似的东西:

initiatedPosts:
    ABC123:
         Initiator : userUIDWhoDidIt
         text:       "talk about cats"
         timestamp:   2093840928309482
         PostsInResponseToThis:
                User: userwhodidit
                text: "cats suck"

users:   
    User1 
         (general user info)
         PostsJoinedInOn
              ABC123

这只是一个彻头彻尾的热点。我已经尝试了很多这样的事情,我忘记了我曾经尝试过的事情,所以一双新鲜的眼睛会很棒。

我基本上需要:

1)查询view1上所有发起的帖子

2)查询当前用户在视图2上加入的所有帖子

3)从视图2

中查询已加入所选帖子的所有人员

我知道如何运行这些查询并将其全部添加到tableviews中,我只是不知道如何设置我的数据库。

1 个答案:

答案 0 :(得分:1)

使用Firebase,您通常应该将数据结构和存储密钥展平,以便从任何节点查找所需的数据。这是一个适合所有用例的Bolt架构。

path /posts/{post_id} is Post {}

path /users/{user_id} is User {}

type PostID extends String {}
type UserID extends String {}

type Post {
  author_id: UserID
  text: String
  timestamp: Number
  reply_post_ids: Map<PostID, Boolean>
}

type User {
  post_ids: Map<PostID, Boolean>
  reply_post_ids: Map<PostID, Boolean>
}
  

查询view1上所有已发布的帖子

只需抓取/posts上的所有帖子。

  

2)查询当前用户在视图2上加入的所有帖子

/users/{user_id}/post_ids中查找每个帖子。您甚至可以在/users/{user_id}/reply_post_ids查找回复。

  

3)从视图2

中查询已加入所选帖子的所有人员

对于帖子,通过/users/{user_id}/reply_post_ids查找所有帖子,然后在这些帖子中查找用户。

虽然您可能觉得自己要进行大量往返Firebase的游览,但Firebase会根据需要智能地批量处理请求。有关详细信息,请参阅this StackOverflow question