You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore师生用户公私数据结构最佳实践咨询

数据库结构设计最佳实践咨询

我刚接触NoSQL数据库,针对以下场景咨询最佳实践:

用户类型与权限规则

我有两类用户:Teachers(教师)和Students(学生),每类用户均包含公开数据与私有数据,权限规则如下:

  • 师生的公开数据可被所有用户读取;
  • 学生的私有数据仅订阅该学生的教师可读取,其他学生、未登录用户及未订阅的教师无访问权限;
  • 教师的私有数据仅已登录的师生可读取。

我的数据库结构设计方案

我认为可行的设计方案如下:

1. 登录用户专属集合(共2个)

仅用于当前登录用户访问自身信息,不对外展示,权限为仅授权用户且为当前用户可读写:

teacherUser : {
   "{uid}" : {
         "name": "John Smith",
         "email": "smith@gmail.com",
         "role": "Teacher!" 
   }
}

studentUser: {
   "{uid}" : {
         "name": "Jimmy",
         "email": "jimmy@gmail.com",
         "role": "Student!",
         "differentFieldsBecauseImStudent": "BLAH"
   }
}

2. 公开/私有资料集合(共4个)

权限配置:

  • 公开数据:所有人可读;
  • 公开/私有数据:仅授权用户且为当前用户可写;
  • 学生私有数据:仅订阅该学生的教师可读;
  • 教师私有数据:仅已授权用户可读。
teacherUserPublicProfile : {
  "{uid}" : {
        "name": "John Smith"
  }
}
teacherUserPrivateProfile : {
  "{uid}" : {
        "email": "smith@gmail.com"
  }
}

studentUserPublicProfile : {
  "{uid}" : {
        "name": "Jimmy"
  }
}
studentUserPrivateProfile : {
    "{uid}" : {
        "email": "jimmy@gmail.com",
        "role": "Student!",
        "differentFieldsBecauseImStudent": "BLAH"
    }
}

方案分析

该方案优势在于便于查询公开资料,同时能区分两类用户的不同数据与业务逻辑;缺点是更新资料需三次独立写入,存在较多数据冗余,但了解NoSQL数据库通常允许此类情况,想咨询该方案是否为最佳实践。

内容的提问来源于stack exchange,提问作者Jesse Yentsch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:23:14