【发布时间】:2020-09-14 14:25:25
【问题描述】:
我最近一直在重构我的代码,以尝试对我的 Firebase 数据库进行非规范化。我知道一些重复和冗余是必要的,但我发现很难确定正确的重复水平。
例如,在我的项目中,我有outfits 和items,其中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