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

Json 在Firebase中复制数据的正确方法是什么?,json,firebase,firebase-realtime-database,database-design,relational-database,Json,Firebase,Firebase Realtime Database,Database Design,Relational Database,我最近一直在重构我的代码,试图去规范化我的Firebase数据库。我知道有些重复和冗余是必要的,但我发现很难确定正确的重复级别 例如,在我的项目中,我有装备和项目,其中装备可能有许多项目 目前,我有以下设置: outfits outfitId outfitName outfitDescription items itemId itemName itemDescription itemBrand itemsByOutfit outfitId

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

例如,在我的项目中,我有
装备
项目
,其中
装备
可能有许多
项目

目前,我有以下设置:

outfits
  outfitId
    outfitName
    outfitDescription

items
  itemId
    itemName
    itemDescription
    itemBrand

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

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

itemsByOutfit
仅限于
itemId
值是否更好?像这样:

itemsByOutfit
  itemId: true
  itemId: true
这似乎更容易维护,但在获取时需要做更多的工作。我可能需要使用所有
itemId
值进行第二次查询,以获取名称、品牌等

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

itemsByBrand
  Nike
    itemId
      itemName
      itemDescription
      itemBrand

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

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