我刚开始修复,并试图为我的应用程序开发一个数据模型。
背景:我有一个约会类型的应用程序,有3种主要的方式,用户可以相互交流。喜欢、拒绝和评论用户配置文件。用户喜欢和评论都是私人的。换句话说,只有我能看到谁喜欢我的个人资料或评论我的个人资料(这不像社交媒体,每个人都可以看到谁喜欢一个帖子)。我需要能够查询用户,知道谁拒绝了他们的个人资料,所以我不会再向那些用户显示。我还需要知道谁喜欢/评论一个用户配置文件,这样我就可以查询哪些用户喜欢/评论对方(他们已经匹配了)
。
我相信这意味着我需要一个likedUsers,dismissedUsers和commentedUsers的根集合
问题:对于被解雇的用户,我想将每个用户存储为dismissedUsers根集合的文档,并将他们跳过的每个用户存储为字段/值对,如下所示.
拒绝用户/用户/用户1、user2、user3等
上面的内容将创建我想要的许多关系,dismissedUsers可以有很多用户,用户可以有很多dismissedUsers。但是,我不相信它是可伸缩的,因为用户文档会变得太大。
问题:,我如何创建这么多的关系,dismissedUsers可以有很多用户,用户可以有很多dismissedUsers,这样就可以扩展和降低成本?然后质疑它?
发布于 2020-06-29 17:17:04
首先,我要问自己为什么要使用Firestore,它是一个文档数据库,而不是选择关系数据库。我个人喜欢Firestore,并极力推荐它。我们选择文档数据库是因为它在许多方面都更快、更容易使用。在其他方面,这是一个缺点,因为您的查询能力非常有限。在我看来,你的大脑正在致力于一个关系数据库的实现。
这里有一个解决方案
首先,我将尽量避免将用户数据存储在多个位置,以避免异常(当然是正确的)。我将有一个用户集合,在其中我使用唯一的id存储所有用户数据(最好使用Fi还原分配的id,这样我就不会有冲突了)。在每个用户文档中,我会链接到一个子集合,用于解说、喜欢、被其他人拒绝、被其他人喜欢等等。我会保存一个记录,所有的用户(只有用户身份),他们已经解散,喜欢,被解雇,被喜欢等。通过这种方式,我可以查找该用户喜欢或不喜欢的所有数据,并相应地向该用户显示我想要的任何内容。
缺点
你将不得不写两次喜欢,解散等。使用批次写入同时更新喜欢的和相似的数据。
发布于 2020-06-29 17:02:24
您不需要一组喜欢、拒绝或评论其他用户配置文件的用户。您可以拥有一个存储所有用户的用户集合。在每个用户文档中,您可以拥有三个用户ids数组,这些用户ids喜欢、评论和/或拒绝用户配置文件。只需确保用户集合中文档的文档ID与相应用户的用户id匹配即可。
https://stackoverflow.com/questions/62643015
复制相似问题