在 many-to-many 关系上使用 Firebase 为 SaaS 应用程序建模的最佳实践是什么
What is best practice for modeling a SaaS app with Firebase on a many-to-many relationship
我有两个 collection:一个 org
和一个 user
。用户可以是 org A
的普通用户,但也可以是 org B
的管理员。所以用户 collection 看起来像这样:
{
email: "john@example.com",
name: "John Doe",
access: [
{
org: "orgA",
role: "user"
},
{
org: "orgB",
role: "admin"
}
]}
将所有内容保持不变的问题 collection 是我不喜欢 org A
的管理员更新 access
数组并影响 org B
。如果我在显示每个 collection 的用户列表时将 sub-collection 中的 sub-collection 数组移动到 /user
collection 下,我将不得不做一个要求每个用户获取访问信息。我应该将用户 ID 保存在 /org
collection 下的 sub-collection 数组中吗?
我想我的目标是找到这个问题的最佳实践解决方案。
你有两种做法,一种是在user中插入一个access的key,access中也一样。否则,您可以使用 Junction table,同时使用两者的 ID。没有确切的答案,正确的安全规则和性能几乎是一样的。然后根据您认为最适合您设计的方法来决定。
我能想到的最简单的数据库结构是:
Firestore-root
|
--- users (collection)
| |
| --- $uid (document)
| |
| --- email: "john@example.com"
| |
| --- name: "John Doe"
| |
| --- userOf (map)
| | |
| | --- orgA: true
| |
| --- adminOf (map)
| |
| --- orgB: true
|
--- organizations (collection)
|
--- $orgA (document)
| |
| --- users: ["uidOne", "uidTwo"] (array)
|
--- $orgB (document)
|
--- admins: ["uidThree", "uidFour"] (array)
通过这种方式,您可以简单地查询“用户”集合来获取某个组织的普通用户,以及管理员,甚至两者。
我有两个 collection:一个 org
和一个 user
。用户可以是 org A
的普通用户,但也可以是 org B
的管理员。所以用户 collection 看起来像这样:
{
email: "john@example.com",
name: "John Doe",
access: [
{
org: "orgA",
role: "user"
},
{
org: "orgB",
role: "admin"
}
]}
将所有内容保持不变的问题 collection 是我不喜欢 org A
的管理员更新 access
数组并影响 org B
。如果我在显示每个 collection 的用户列表时将 sub-collection 中的 sub-collection 数组移动到 /user
collection 下,我将不得不做一个要求每个用户获取访问信息。我应该将用户 ID 保存在 /org
collection 下的 sub-collection 数组中吗?
我想我的目标是找到这个问题的最佳实践解决方案。
你有两种做法,一种是在user中插入一个access的key,access中也一样。否则,您可以使用 Junction table,同时使用两者的 ID。没有确切的答案,正确的安全规则和性能几乎是一样的。然后根据您认为最适合您设计的方法来决定。
我能想到的最简单的数据库结构是:
Firestore-root
|
--- users (collection)
| |
| --- $uid (document)
| |
| --- email: "john@example.com"
| |
| --- name: "John Doe"
| |
| --- userOf (map)
| | |
| | --- orgA: true
| |
| --- adminOf (map)
| |
| --- orgB: true
|
--- organizations (collection)
|
--- $orgA (document)
| |
| --- users: ["uidOne", "uidTwo"] (array)
|
--- $orgB (document)
|
--- admins: ["uidThree", "uidFour"] (array)
通过这种方式,您可以简单地查询“用户”集合来获取某个组织的普通用户,以及管理员,甚至两者。