主要起因是因为我最近在给一个新项目建立 RBAC 的模型
突然发现我们公司对这些连表的字段采取的手段缺只是从程序里面进行控制,不建立外键。而我读书的时候老师跟我们讲的是外键可以更好的管理和更规范,于是我突然就产生出了一个疑问,如果在实际企业中研发不使用的话,那外键的使用场景其实应该是在哪里
那么大家有对外键有什么看法吗?对外键看法是什么
1
chenset 2019-04-30 12:18:19 +08:00 2
不要使用数据库外键, 使用程序逻辑控制关系.
|
2
TommyLemon 2019-04-30 12:21:37 +08:00 2
麻烦,改下相关的表结构或记录,得把外键关联的字段或数据调整下,不适合敏捷开发,后面全删掉了。
#1 建议是很符合大部分互联网项目的需求的,需求不定,结构就经常调整,不适合用外键,在应用层关联更好。 |
3
zidian9 2019-04-30 12:22:55 +08:00 2
互联网我这儿完全没有外键,没有表之间的关系。已经不用关心底层存储是不是关系型数据库了。默认都是非关系的。
|
5
junbaor 2019-04-30 14:00:39 +08:00 via iPhone 3
互联网业务一般访问量比较大,倾向于让数据库少做事,因为出现瓶颈不好扩展。加外键会影响效率,在业务上保持结构一致就行了。还是老话:具体情况具体分析。
|
6
qlhai 2019-04-30 15:45:59 +08:00
DBA 不让用
|
7
passerbytiny 2019-04-30 16:05:56 +08:00 2
如果你要加一个技术上的约束,就要加一个由业务定义的、有效的约束。而很明显,外键既不是业务定义的,也无效。
要不是历史遗留( ER 图的关系部分没有对应的物理模型),外键早就应该消失了。 |
8
hsluoyz 2019-05-11 23:56:56 +08:00 1
我从另一个角度说说,也许可以不写 RBAC 数据库表,直接用 Casbin 来做 RBAC 权限管理即可: https://casbin.org/ ,原生支持多种数据库
|
9
johnsona 2020-04-27 18:24:55 +08:00
@TommyLemon 能否举个例子,比如,用户和角色,多对多关系,user 表,角色表,用户角色是中间表,中间表存用户 id 和角色 id,再互联网敏捷开发场景应该怎么改
|