Firebase数据建模指南

时间:2016-04-25 06:12:42

标签: firebase firebase-realtime-database nosql

冒着被标记为重复的风险,这里就是。

我有物品和标签。项目可以包含许多标记,每个标记可以是另一个标记的子标记。

我想将标签列为树,以及每个标签内的项目。

本质上,标签是商品的文件夹,但商品可以位于多个位置。

这是正确的方法吗?

/items/

i123 : {
     Label : "i am an item",
     Tags  : { tagid: t234}
}

/tags/

t234 : {
     Label : "i am a Tag",
     Parent: {tagid: t567}
}

我有点不确定我做对了。我当然读过firebase的士气低落的文档和教程,我确实看过其他类似的问题。

我陷入了RDBMS的困境 - 似乎无法理解nosql概念,这就是为什么我希望在这里为这个用例获得一些指导。

感谢。

来自评论者的请求,有关用例的更多信息。

我试图显示标签树,比如

I am tag One
I am second tag
    this is a child tag
         here is a child's child tag
    another child tag
I am a root level tag again
// etc... you get the idea

还有项目,项目可以在多个标签中。这里的显示与文件浏览器完全一样。除此之外,项目可以位于多个位置,即它们可以关联多个标签。

就像这个例子一样,item 334位于多个地方:

tag 1
item 209
tag 2
    tag 21
    item 11
    item 334
tag 3
item 334
item 586

现在,我想我可以将整个事物存储在一个JSON对象中,并根据需要进行更新,但我有兴趣通过标签和项目标签进行搜索。所以在我虚弱的新手心目中,我认为我应该能够拥有一个我可以遍历的URL /tags/来获取与标签匹配的项目。同上/items/所以我可以在标签上进行关键字匹配。

关于SO的其他答案描述了为事物创建索引的方法,这就是我在项目对象中存储标记引用的原因。我正在努力解决这方面的细节。

我越是想到它,我就越倾向于将所有东西都存储在一个大的嵌套对象中,但我认为这应该不是一个好主意。如果我这样做,我特别不喜欢多次存储物品的想法。

RDB世界的生活更轻松,因为我知道自己在做什么:P

1 个答案:

答案 0 :(得分:2)

此结构符合您的问题标准,但问题中确实没有信息可以将答案放在一起。

items
 item_00
   tag_00
   tag_01
   tag_02
 item_01
   tag_02
 item_02
   tag_01

tags
 tag_00
   parent: false
   child: tag_01
 tag_01
   parent: tag_00
   child: false
 tag_02
   parent: false
   child: false

在此示例中,

  • 项目可以有多个标签
  • 每个标记可以是另一个标记的子标记(并且跟踪父标记:子关系)
  • 标签列为树
  • 通过查询标签的项目可以找到每个标签内的项目 编号

使用更多数据更新问题,我(我们)可以优化答案)