firebase - 在多对多关系上使用 Firebase 对 SaaS 应用建模的最佳做法是什么
问题描述
我有两个集合:一个org
和一个user
。用户可以是 的普通用户,org A
也可以是 的管理员org B
。所以用户集合看起来像这样:
{
email: "john@example.com",
name: "John Doe",
access: [
{
org: "orgA",
role: "user"
},
{
org: "orgB",
role: "admin"
}
]}
将所有内容保存在同一个集合中的问题是我不喜欢管理员org A
更新access
数组和影响org B
。如果在显示每个集合的用户列表时将access
数组移动到集合下的子集合中/user
,我必须为每个用户调用以获取访问信息。我应该将用户 ID 保存在集合下子集合的数组中/org
吗?
我想我的目标是为这个问题找到一个最佳实践解决方案。
解决方案
我能想到的最简单的数据库结构是:
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)
通过这种方式,您可以简单地查询“用户”集合以获取某个组织的常规用户,以及管理员,甚至两者兼而有之。
推荐阅读
- react-native - 用 jest + 酶测试 react-native-navigation wix
- c - C整数到二进制转换,将结果分成两个二进制值
- javascript - 即使在清除实例后 Gojs 状态仍然存在
- c# - C#中数组的初始化
- python - 从烧瓶中的另一个 API 多次调用一个 API
- java - mockito '您不能在验证或存根之外使用参数匹配器。' 用java
- sql - 如果您需要较少的分组列,如何仅选择 max(id)
- c - Journalctl 从 C 程序到 .txt 文件
- reactjs - 使用图像覆盖(card-img-overlay)时,无法再在 chrome 开发工具中选择子元素
- php - Laravel 放弃依赖问题