现在搞开发为什么还要用关系型数据库?

2019-07-01 13:18:39 +08:00
 Hanggi

最近做一个项目,有一个权限管理模块。 因为数据库用的是 MYSQL,所以本人建议基于 RBAC 做一个功能比较完善的权限管理系统以绝后患。 这个系统最基础结构就是 User-Role-Permission 中间用关系表连接的 5 表结构,不管是权限管理还是特权管理感觉都是很好很流行的方案。 结果公司里人说表太多了,把 permission 表去掉然后把特权用 JSON 数组连接放进 Role 表里这样就能省 2 个表了。

我就不理解了,现在的人是 nosql 用太多了还是怎么了,整天想着把数据放进 JSON 字段里,那还用关系型数据库干什么呢?

哪位大佬帮我分析分析利弊。

23523 次点击
所在节点    MySQL
113 条回复
jedrek
2019-07-01 13:38:52 +08:00
“结果公司里人说表太多了,把 permission 表去掉然后把特权用 JSON 数组连接放进 Role 表里这样就能省 2 个表了”
———————
这样有何不好呢?
rogwan
2019-07-01 13:40:06 +08:00
用到事务和多表联合查询,关系型数据库的优势就体系出来的,“关系”这两个字已经自己表态了。
chendy
2019-07-01 13:40:10 +08:00
如果用的是支持 json 字段的 mysql 还可以考虑
否则为了”省几张表“而做这种事情都是给自己挖坑
dajj
2019-07-01 13:40:32 +08:00
其实吧。。。也行 。 谁设计以后需求变更了谁来改。
buxudashi
2019-07-01 13:41:25 +08:00
公司里的人,比较聪明的一个。一下就找到了优化方法。
省也只是省一个表吧。
loading
2019-07-01 13:43:17 +08:00
mysql 存 json 吗?我只有魔改第三方系统的时候用过几次。
zidian9
2019-07-01 13:43:57 +08:00
数据库表数据一大,根本不敢用关系型数据库的特性 [锁表,连表查]
要不是非关系型数据库的可靠性还不够,管理起来不够方便,早就用非关系型数据库了
HuHui
2019-07-01 13:44:03 +08:00
今天省下的用明天来补上
Hanggi
2019-07-01 13:47:26 +08:00
@jedrek 现在所有权限都在 JSON 里,接下来你要给一个 Role 添加新的特权你要怎么做?手动填写并加进 JSON 数组里吗?
如果需要列出现在所有的特权,你要怎么做?遍历整个 Role 表里的 JSON 然后合并,再列出来吗?
如果需要找出对项目 1 有改权限的所有 Role 甚至是用户你要怎么做?再遍历一遍 Role 表从那么多的 JSON 数组里找指定字符串并且寻找对应的用户吗?
请解释下怎么实现?
est
2019-07-01 13:50:40 +08:00
我比较好奇为什么 RBAC 需要 5 个表。。。
est
2019-07-01 13:51:35 +08:00
@Hanggi mysql 可以做 generated column,pg 可以做 function index。不存在遍历 role 表的 json 的问题。现在 db 溜得很。json 可以放心用。
zidian9
2019-07-01 13:52:30 +08:00
放 JSON 可不是那么方便
比如,2 个线程同时更新这个 JSON,
进程 1 读取 JSON
进程 2 读取 JSON
进程 1 添加权限 A
进程 2 添加权限 B
进程 1 写 JSON 到 DB
进程 2 写 JSON 到 DB

那么最终 JSON 里面只有权限 B,还得给它加个乐观锁
cherryas
2019-07-01 13:52:43 +08:00
负责人是前端出身?
LudwigWS
2019-07-01 13:53:30 +08:00
感觉数据库表设计还是比较高端的技术。
Hanggi
2019-07-01 13:54:01 +08:00
@est 用户表( User ),角色表( Role ),特权表( Permission ),然后是用户角色关系表和角色特权关系表。比较完整的结构?有更好的实现吗?可以支持交叉授权。
Hanggi
2019-07-01 13:55:53 +08:00
@cherryas 那个人就是 mongoDB 用太多了我觉得。啥都想做成 JSON。。。
laojiaqing
2019-07-01 13:58:08 +08:00
其实我也一直在思考这个问题
xkeyideal
2019-07-01 13:58:24 +08:00
使用什么数据库根据需求和开发人员技术熟练度,加上公司运维条件来定。

nosql === json,这个表述有问题,楼主的理解也有问题,mongodb 的 bson 结构也能支持复杂的查询。

再说说权限管理,RBAC 真的很过时,只能解决路由的权限问题,数据的归属权限无法解决,随着需求的迭代,暴露的问题会越来越多
limuyan44
2019-07-01 13:58:51 +08:00
你不理解,为什么不当面问问公司里说的那个人呢。。
TobiahShaw
2019-07-01 13:59:32 +08:00
这个违反了一范式吧,数据失去了结构性

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

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

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

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

© 2021 V2EX