在 Firebase 中复制数据的正确方法是什么?

What is the right way to duplicate data in Firebase?

我最近一直在重构我的代码以尝试对我的 Firebase 数据库进行非规范化。我知道一些重复和冗余是必要的,但我发现很难确定正确的重复级别。

例如,在我的项目中,我有 outfitsitems,其中一个 outfit 可能有很多 items 标记。

目前,我有这个设置:

outfits
  outfitId
    outfitName
    outfitDescription

items
  itemId
    itemName
    itemDescription
    itemBrand

itemsByOutfit
  outfitId
    itemId
      itemName
      itemDescription
      itemBrand
    itemId
      itemName
      itemDescription
      itemBrand

在UI中,我经常需要获取outfit个对象的列表,以及标记的项目。 itemsByOutfit 在这个意义上是一个方便的索引 - 因为我可以一次获得名称、描述和品牌。

但是当涉及到重命名项目或更改描述时,我也必须展开更新。

itemsByOutfit 限制为仅 itemId 值会更好吗?像这样:

itemsByOutfit
  itemId: true
  itemId: true

这似乎更易于维护,但在获取时需要更多工作。我大概必须使用所有 itemId 值进行第二次查询以获取名称、品牌等

我还有另一个索引 - itemsByBrand - 它遵循类似的复制模式。所有数据均按品牌复制和组织 - 例如:

itemsByBrand
  Nike
    itemId
      itemName
      itemDescription
      itemBrand

如果有任何想法或最佳实践可以帮助我构建更具可扩展性的解决方案,我将不胜感激。谢谢!

我的观点是您只持有一次商品数据(名称、描述、品牌)。在项目节点中。所有其他 itemby'x' 列表都是 itemId:bool 列表,您阅读这些列表以获取必要的项目,然后循环访问返回的列表以检索项目数据。应该不会有太大的性能开销,并且涉及的数据量很小。