首页 > 解决方案 > 在 Firebase 中复制数据的正确方法是什么?

问题描述

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

例如,在我的项目中,我有outfitsand items,其中 anoutfit可能有很多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

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

标签: jsonfirebasefirebase-realtime-databasedatabase-designrelational-database

解决方案


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


推荐阅读