【问题标题】:What is the right way to duplicate data in Firebase?在 Firebase 中复制数据的正确方法是什么?
【发布时间】:2020-09-14 14:25:25
【问题描述】:

我最近一直在重构我的代码,以尝试对我的 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

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

【问题讨论】:

    标签: json firebase firebase-realtime-database database-design relational-database


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 1970-01-01
      • 2020-12-18
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      相关资源
      最近更新 更多