在Firebase中存储关系“类型”或“类别”数据,而无需更新多个位置

时间:2013-08-28 01:53:50

标签: firebase

我正在努力掌握如何在Firebase中构建关系数据。我知道数据模型非常不同,但我在关系数据库方面有很长的历史。今天,我正在努力解决一个简单的问题。

在MySQL中,我有一个Node表和一个NodeType表:

节点表

  • 节点ID
  • 节点名称
  • 输入ID

节点类型表

  • 输入ID
  • 类型名称
  • 输入元数据

我的问题是我想为每个节点类型存储一组特定的元数据,但我只想将它存储在一个地方。我希望能够更改节点类型A 的元数据,并让它自动应用于属于该类型的所有节点。

在Firebase中构建此内容的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

这篇博客文章介绍了如何重构Firebase中的关系数据:https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html,我建议您阅读它以更好地理解问题。

对于您的特定用例,您应该只需将节点和节点类型存储在节点元数据中的单独顶级键和引用节点类型下。例如:

/节点   /     名称:     类型: /类型   /     名称:     元数据:

您可以使用push方法自动为节点生成ID。对于节点类型,您可以使用相同的推送方法,或为类型提供手动ID。

var ref = new Firebase("https://<my-firebase>.firebaseio.com/");
ref.child("types").child("type-a").set({name: "Type A", metadata: "About Type A"});
ref.child("nodes").push({name: "Some node", type: "type-a"});

您可以使用.once('value')

检索特定类型的类型信息
ref.child("types/type-a").once("value", function(snapshot) {
  console.log("Metadata for Type A is: " + snapshot.val().metadata);
});