【问题标题】:Firebase data modeling guidanceFirebase 数据建模指南
【发布时间】:2017-09-04 13:19:24
【问题描述】:

冒着被标记为重复的风险,来吧。

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

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

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

这是正确的方法吗?

/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,item可以在多个tag中。这里的显示与文件浏览器中的完全一样,真的。除了这里,项目可以位于多个位置,即它们可以关联多个标签。

像这个例子一样,item 334 位于多个位置:

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

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

关于 SO 的其他答案描述了为事物创建索引的方法,这就是我将标签引用存储在我的项目对象中的原因。我正在为这方面的细节而苦苦挣扎。

我想得越多,我就越倾向于将所有内容简单地存储在一个大的嵌套对象中,但我认为这应该不是一个好主意。如果我这样做了,我特别不喜欢多次存储一个项目的想法。

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

【问题讨论】:

  • 对数据建模的正确方法取决于您的应用需要如何使用该数据。我们无法为您回答这个问题,但如果您有具体问题,我们可以提供帮助。除此之外,我建议在NoSQL Data Modeling阅读这篇文章。
  • 感谢您的链接。我认为我在描述中很清楚它将如何使用数据

标签: firebase firebase-realtime-database nosql


【解决方案1】:

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

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

在这个例子中,

  • 物品可以有很多标签
  • 每个标签都可以是另一个标签的子标签(并且会跟踪父子关系)
  • 标签被列为树
  • 可以通过查询该标签的项目来找到每个标签内的项目 号码

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

【讨论】:

  • 感谢您抽出宝贵时间回答这个问题。我将不得不考虑如何最好地问。不想用不必要的细节污染问题。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 2021-12-16
  • 2015-11-19
  • 2016-11-25
相关资源
最近更新 更多