关于Firebase非规范化博客文章的澄清

时间:2014-01-28 05:17:45

标签: firebase denormalization

我刚刚阅读了名为Denormalizing Your Data Is Normal的Firebase博文,我要求澄清。

在考虑因素段落之前,我一直在使用它。具体来说,以下内容:

“评论的修改很简单:只需将/ comments下的评论值设置为新内容。要删除,只需删除/ comments中的评论 - 并且每当您在代码中的其他地方遇到评论ID时存在于/ comments中,您可以假设它已被删除并正常进行“

对于修改,为什么我不必修改存储在/ links和/ users下的重复注释?

对于删除,我是否正确理解,一旦删除注释,我必须在所有阅读逻辑中使用逻辑来交叉检查/注释,以防它被删除?

谢谢!

1 个答案:

答案 0 :(得分:5)

博客文章中详述的结构不存储重复的注释。我们会在/comments下存储一次评论,然后将这些评论的name存储在/links/users下。这些函数用作指向实际注释数据的指针。

考虑帖子中的示例结构......

{
  users: {
    user1: {
      name: "Alice",
      comments: {
        comment1: true
      }
    },
  },
  comments: {
    comment1: {
      body: "This is awesome!",
      author: "user1"
    }
  }
}

请注意,实际评论数据仅存储一次。

如果我们修改/comments/comment1,我们无需更新任何其他内容,因为我们只会在name/links下存储评论的/users,而非实际评论内容。

如果我们删除/comments/comment1,则会删除评论数据的唯一存在。但是,我们仍然在comment1下对/users/user1/comments进行了这些“悬空”引用。

想象一下,我们删除了/comments/comment1,当我们尝试加载Alice的评论时,我们可以看到comment1不再存在。然后我们的应用程序可以通过以下方式做出相应的反应:a)删除引用或b)忽略引用而不是试图显示已删除的注释。