如何正确配置schema实现多用户共享菜单同步更新
你要实现的多用户共享菜单、修改双向同步的需求,单独建立独立菜单表是非常规范且高效的方案,比你之前在用户表加joined user字段的做法合理很多,具体实现逻辑如下:
核心表结构设计
- 单独建
menu菜单主表:存储菜单的所有核心属性(菜单唯一ID、菜单名称、配置项、创建时间等),所有共享同一份菜单的用户都关联该表的同一条记录,菜单内容的修改仅需要更新这一张表的对应数据,从根源保证所有关联用户看到的内容一致,不需要额外做数据同步。 - 新增
user_menu_rel用户菜单关联中间表:字段包含id(主键)、user_id(关联用户ID)、menu_id(关联菜单ID)、permission(可选,用于区分编辑/查看权限,方便后续扩展)、create_time(关联时间),所有用户和菜单的映射关系都存在这张表。 - 原有用户表移除菜单相关的关联字段,避免数据冗余。
该方案的优势
- 完全符合数据库第三范式设计,没有冗余数据,不存在多用户菜单数据不一致的问题
- 扩展性极强,支持单用户关联多份共享菜单、单份菜单共享给任意数量用户的场景,后续要加共享有效期、权限分级等需求都只需要调整中间表字段,不影响核心表结构
- 查询和修改效率更高,查询用户名下所有菜单仅需要关联中间表和菜单主表查询即可,修改菜单仅需要更新主表单条记录,远优于你之前在用户表存储关联用户再做联合查询的逻辑
你补充的优化后Schema思路和上述方案是一致的,是当前需求下的最优解。
内容的提问来源于stack exchange,提问作者Vahalaru
相关产品推荐
相关产品推荐

