在数据库中组织用户/帖子关系

时间:2018-02-12 20:49:36

标签: firebase firebase-realtime-database

使用Firebase数据库我需要决定如何组织用户/帖子(例如推文)关系。两个常见的阅读任务包括: -

  1. 显示用户帖子的概述
  2. 根据内容过滤和选择特定帖子
  3. 我目前使用它:

    posts
        randproject1234jdfs
             user_uid: randomUserName1234,
             content: "example"
    
    users
         randomUserName1234
             posts 
                  project_id: randproject1234jdfs
             nickname: "Mr Example"
    

    这两次存储相同的信息:

    1. 在posts / randstring1234jdfs / user_uid中,该值指向用户。
    2. 在users / 1234 / posts中,project_id指向帖子。
    3. 删除其中一个会导致数据读取速度明显变慢(必须遍历整个文件夹以查看user_uid / project_id是否与给定的帖子/用户匹配)?

      或者以完全不同的方式组织数据会更好(例如删除用户/帖子分割)?

1 个答案:

答案 0 :(得分:1)

您想要执行以下操作:

  

显示用户帖子的概述

     

根据内容过滤和选择特定帖子

你可以这样做:

posts
   randomid
     user_uid: randomUserName1234,
     content: "example"
     posttitle: "English"
   randomid2
     user_uid: randomUserName1235,
     content: "examples"
     posttitle: "Math"

users
 randomUserName1234 <-------------------- userid
          email: email@gmail.com
          nickname: "Mr Example"
 randomUserName1235<--------------------anotheruserid
           email: email@gmail.com
           nickname: "Mr Awesome"

由于您想要显示用户的帖子,那么您只需查询节点posts,就像这样:orderByChild(user_uid).equalTo(randomUserName1234)使用它可以检索我猜的帖子内容

要使用上述内容根据内容检索任何用户的帖子,您可以这样做:

orderByChild("posttitle").equalTo("English")然后检索我认为他们是帖子的节点content

记住非规范化是正常的,这很重要,否则你将很难进行查询。 https://firebase.googleblog.com/2013/04/denormalizing-your-data-is-normal.html

用户节点让它拥有此应用程序中的用户列表。

帖子节点将如上所示,它将通过如上所示user_uid: randomUserName1235连接到用户。