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
相关产品推荐
相关产品推荐

