存储用户与组之间的关联的最佳方式是什么? NoSQL

问题描述 投票:0回答:1

我陷入了困境,问题是我有一个应用程序,其中用户存储在名为

users
的集合中。然后,我将组存储在名为
groups
的集合中。在较高级别上,用户始终是一个组的一部分,事实上,当您登录时,系统会要求您加入或创建一个组。

我遇到的问题是,当您注册时,我将 groupId 存储为

shared preferences
(这是快乐的路径)。如果您有一个全新的设备并且已经有一个帐户,这就是我遇到问题的地方,因为显然,设备商店不会保存 groupId。

我最初的想法是将

groupId
作为用户模型的一部分,这样当我在登录时检索帐户详细信息时,我可以指向特定的组。我有点不喜欢这个,因为如果你将来想成为 2 个或更多团体的一部分怎么办? (可能是想多了)

来自 SQL 世界,我很想拥有一个 homeUsers 集合,但这违背了 NoSQL 的目的,不是吗?

事实上,我在组内有一个用户集合,即组 -> groupId -> users。这只是允许我显示用户而不进行不必要的查询。

你会做什么?

提前致谢。

firebase google-cloud-firestore firebase-realtime-database database-design nosql
1个回答
0
投票

我最初的想法是将

groupId
作为用户模型的一部分,这样当我在登录时检索帐户详细信息时,我可以指向特定的组。

是的,这是一种常见的方法,但仅当用户属于单个组时才有效。

我有点不喜欢这个,因为如果你将来想成为 2 个或更多小组的一部分怎么办?

在这种情况下,您可以将其另存为数组类型字段中的值,而不是将

groupId
保存为文档内的单独字段。这样,您就可以根据需要添加任意数量的组 ID。您还可以根据组 ID 在安全规则中限制访问。

来自 SQL 世界,我很想拥有一个

homeUsers
集合,但这违背了 NoSQL 的目的,不是吗?

这也是一个解决方案,但它会有点昂贵,因为当您阅读整个子集合时,您需要为下载的每个文档支付读取操作费用。使用之前的解决方案,您只需为单次阅读付费。

事实上,我在组内确实有一个“用户”集合,即组 -> groupId -> users。这只是允许我显示用户而不进行不必要的查询。

如前所述,这种方法也有效,但您必须进行数学计算,看看哪种解决方案对于您将执行的查询来说更经济实惠。

© www.soinside.com 2019 - 2024. All rights reserved.