2016-04-25 65 views
0

冒着被重复标记的风险,这里就出现了。Firebase数据建模指南

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

我想列出标签作为一棵树,并在每个标签内的项目。

实质上,标签是项目的文件夹,除了项目可以位于多个位置。

这是正确的方法吗?

/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

+0

建模数据的正确方法取决于应用程序如何使用该数据。我们无法为您解答,尽管如果您有这个问题,我们可以为您提供具体的查询服务。除此之外,我建议阅读本文[NoSQL数据建模](https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/)。 –

+0

感谢您的链接。我认为我在描述如何使用数据时非常清楚 – tim

回答

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 

在这个例子中,

  • 项目可以有很多的标签
  • 每个标签可以是另一个标签的孩子(和家长:孩子的关系被跟踪)
  • 的标签列为树
  • 每个标签内的物品可以通过查询标签的物品找到

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

+0

感谢您花时间回答这个问题。我将不得不考虑如何最好地问。不想用不必要的细节来污染问题。 – tim