请教一个数据库表设计的问题

2021-06-17 20:00:04 +08:00
 MadDoggy

项目要实现一个授权功能,分为对用户授权和对组织授权,对组织授权同时会对组织下所有用户授权。 最简单的想法是一张用户授权表,一张组织授权表和一张组织用户对应表,但这样会有两个问题,一是在更新组织用户的时候要么就增量式更新,速度很慢;要么就删除后重新插入,频繁读写 IO 负荷会大。二是查询用户是否有授权的时候同时会去查他的组织的授权情况,这样复杂度会到组织数 x 组织授权记录数,效率也很低。有什么好的方法能改进这个情况,谢谢。

2104 次点击
所在节点    MySQL
12 条回复
akira
2021-06-17 20:14:54 +08:00
除非你数据量非常大,不然这 2 个都不需要去考虑。
ccde8259
2021-06-17 21:50:18 +08:00
问题类似于 feed 流的写扩散和读扩散
totoro52
2021-06-17 21:57:44 +08:00
如果数据量不大完全不用在乎这点 IO 符合
admin7785
2021-06-17 23:22:53 +08:00
RBAC 模型?感觉这俩都可以
xuanbg
2021-06-17 23:52:42 +08:00
RBAC,对角色授权。然后角色可以直接关联用户,也可以关联组织,也就是通过组织和用户的关系间接关联用户。
crclz
2021-06-18 00:03:46 +08:00
“一是在更新组织用户的时候要么就增量式更新,速度很慢;要么就删除后重新插入,频繁读写 IO 负荷会大。”

评:这句话我没看懂。

“二是查询用户是否有授权的时候同时会去查他的组织的授权情况,这样复杂度会到组织数 x 组织授权记录数,效率也很低”

评:你仔细算算这个的复杂度。
dnnta
2021-06-18 00:47:19 +08:00
1. 用户表里带上 org_id 就行了,没必要单独的组织用户表。
2. 最多也就两条 sql 吧
yeqizhang
2021-06-18 01:06:34 +08:00
和 6 一样的想法。
一般用户在组织下是在一个,其次就算好几个,数据库对这一点点的查询毫无压力
yeqizhang
2021-06-18 01:08:02 +08:00
@dnnta 还是建个中间表比较好
fkname
2021-06-18 09:28:25 +08:00
1.用户组织关系一般不会频繁变动,也就没有频繁读写的问题
2.用户组织这种一对多的关系在用户表新增一个组织字段就行,查询的时候连表查询下取最高权限
MadDoggy
2021-06-18 10:31:50 +08:00
@dnnta 用户组织是多对多的
MadDoggy
2021-06-18 10:33:02 +08:00
@fkname 用户组织是多对多的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/784052

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX