为什么在对数据进行非规范化时使用对象?

时间:2013-04-18 00:20:55

标签: firebase

在最近的denormalising data博客文章中,它建议在每个用户下方记录所有用户的评论,如下所示:

comments: {
    comment1: true,
    comment2: true
}

为什么这不是这样的列表:

comments: [
    "comment1",
    "comment2",
]

有什么好处?有什么不同吗?虽然我在这里,你会如何为分布式应用程序生成这些评论的唯一引用?我想通过一个列表,我只是将它们推到最后,让数组处理索引。

1 个答案:

答案 0 :(得分:2)

Firebase只存储对象。 JS客户端使用索引作为键将数组转换为对象。因此,例如,如果使用set存储以下数组:

comments: [
  "comment1",
  "comment2"
]

在Forge(图形化调试器)中,它将显示为:

comments:
   0: comment1
   1: comment2

鉴于此,将注释的ID直接存储为密钥具有以下优势:您可以直接在安全规则中引用它,例如,使用如下表达式:

root.child('comments').hasChild($comment)

要为这些评论生成唯一参考,请使用pushhttps://www.firebase.com/docs/managing-lists.html):

var commentsRef = new Firebase("https://<example>.firebaseio.com/comments");
var id = commentsRef.push({content: "Hello world!", author: "Alice"});
console.log(id); // Unique identifier for the comment just added.