首页 > 解决方案 > 如何对 Firestore 数据建模?

问题描述

我是 Firestore 的新手,正在尝试为我的应用开发数据模型。

背景:我有一款约会类型的应用程序,用户可以通过 3 种主要方式相互交流。喜欢、拒绝和评论用户个人资料。用户喜欢和评论是私人的。换句话说,只有我可以看到谁喜欢或评论了我的个人资料(它不像社交媒体,每个人都可以看到谁喜欢了一个帖子)。我需要能够查询用户以了解谁取消了他们的个人资料,因此我不会再次向这些用户显示。我还需要知道谁喜欢/评论了用户个人资料,这样我就可以查询哪些用户互相喜欢/评论了(他们已经匹配)

我相信这意味着我需要likeUsers、dismissedUsers 和 commentedUsers的根集合

问题: 对于被解雇的用户,我认为我会将每个用户存储为dismissedUsers 根集合的文档,并将他们跳过的每个用户存储为一个字段/值对,就像这样......

解雇用户/用户/用户 1、用户 2、用户 3 等

以上将创建我想要的多对多关系,其中dismissedUsers 可以有很多用户,而用户可以有很多dismissedUsers。但是,我不相信它会随着用户文档变得太大而具有可扩展性。

问题:如何创建这种多对多关系,其中dismissedUsers 可以有很多用户,而用户可以有很多dismissedUsers,以便它具有可扩展性且成本最低?并查询它?

标签: iosswiftfirebasefirebase-realtime-databasegoogle-cloud-firestore

解决方案


首先,我会问自己为什么要使用 Firestore,作为文档数据库,而不是选择关系数据库。我个人喜欢 Firestore 并强烈推荐它。我们选择文档数据库是因为它在许多方面都更快、更容易使用。在其他方面,这是一个缺点,因为您的查询能力非常有限。在我看来,您的大脑正在努力实现关系数据库。

这是一种解决方案

首先,我会尽量避免将用户数据存储在多个位置以避免异常(当然是正确的)。我将拥有一组用户,在其中存储具有唯一 ID 的所有用户数据(最好使用 Firestore 分配的用户数据,这样我就不会发生冲突)。在每个用户文档中,我会链接一个子集合,用于解雇、喜欢、被其他人解雇、被其他人喜欢等。我会记录他们已经解雇、喜欢、被解雇的所有用户(只是用户 ID)通过,被喜欢等。这样我可以查找该用户喜欢或不喜欢谁的所有数据,并相应地向该用户显示我想要的任何内容。

缺点

您必须为每个喜欢写两次,关闭等。使用批量写入同时更新喜欢和喜欢的数据。


推荐阅读