首页 > 解决方案 > 在多对多关系上使用 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吗?

我想我的目标是为这个问题找到一个最佳实践解决方案。

标签: firebasegoogle-cloud-firestoredata-modeling

解决方案


我能想到的最简单的数据库结构是:

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)

通过这种方式,您可以简单地查询“用户”集合以获取某个组织的常规用户,以及管理员,甚至两者兼而有之。


推荐阅读