【发布时间】:2018-02-07 16:33:18
【问题描述】:
如果我有 User 和 Profile 对象。鉴于可能发生以下情况,在 Firestore 中构建我的收藏的最佳方式是什么?
- 用户只有一个个人资料
- 用户可以更新他们的个人资料
- 用户可以保存其他用户的个人资料
- 用户可以删除他们保存的个人资料
- 同一个人资料不能保存两次
如果用户和配置文件是单独的集合,那么存储已保存配置文件的最佳方式是什么?
想到的一种方法是每个用户都有一个名为SavedProfiles 的子集合。每个文档的 id 是配置文件的 id。每个已保存的个人资料仅包含对其所属个人资料的用户的引用。
另一种选择是做同样的事情,但存储每个已保存配置文件的整个配置文件。
第一种方法的好处是,当用户更新他们自己的个人资料时,无需更新他们已保存的任何个人资料,因为它只是存储的参考。但是,尝试读取用户保存的配置文件可能需要两次读取操作(这很常见),一个是获取所有引用,然后使用这些引用查询所有配置文件(如果这可能吗???)。这似乎相当昂贵。
第二种方法似乎是正确的方法,因为它解决了读取所有已保存配置文件的问题。但是更新多个保存的配置文件似乎是一个问题,因为每个用户保存的配置文件可能是唯一的。我知道可以进行批量更新,但是是否有必要查询数据库中的每个用户以获取他们保存的配置文件并检查更新的配置文件是否存在,如果存在则更新它?我不太确定该走哪条路。我不太习惯 NoSQL 数据结构,而且似乎我做错了什么,因为我使用了子集合,因为建议尽可能保持一切非规范化,所以如果结构对我的整体来说,请告诉我db也是错的,这也是很有可能的……
请提供一些示例,说明如何获取和更新配置文件/保存的配置文件。
谢谢。
【问题讨论】:
标签: firebase nosql google-cloud-firestore