V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HolmLoh
V2EX  ›  程序员

大家会使用外键吗?例如在建立数据库表使用 RBAC 模型时中间表是否会使用外键

  •  1
     
  •   HolmLoh · 2019-04-30 12:14:49 +08:00 · 3252 次点击
    这是一个创建于 2028 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主要起因是因为我最近在给一个新项目建立 RBAC 的模型

    突然发现我们公司对这些连表的字段采取的手段缺只是从程序里面进行控制,不建立外键。而我读书的时候老师跟我们讲的是外键可以更好的管理和更规范,于是我突然就产生出了一个疑问,如果在实际企业中研发不使用的话,那外键的使用场景其实应该是在哪里

    那么大家有对外键有什么看法吗?对外键看法是什么

    9 条回复    2020-04-27 18:24:55 +08:00
    chenset
        1
    chenset  
       2019-04-30 12:18:19 +08:00   ❤️ 2
    不要使用数据库外键, 使用程序逻辑控制关系.
    TommyLemon
        2
    TommyLemon  
       2019-04-30 12:21:37 +08:00   ❤️ 2
    麻烦,改下相关的表结构或记录,得把外键关联的字段或数据调整下,不适合敏捷开发,后面全删掉了。
    #1 建议是很符合大部分互联网项目的需求的,需求不定,结构就经常调整,不适合用外键,在应用层关联更好。
    zidian9
        3
    zidian9  
       2019-04-30 12:22:55 +08:00   ❤️ 2
    互联网我这儿完全没有外键,没有表之间的关系。已经不用关心底层存储是不是关系型数据库了。默认都是非关系的。
    many2333
        4
    many2333  
       2019-04-30 13:42:32 +08:00
    @chenset 我以前的公司也是这么规定的 这样有什么特别的好处吗请问? 我不太明白为什么
    junbaor
        5
    junbaor  
       2019-04-30 14:00:39 +08:00 via iPhone   ❤️ 3
    互联网业务一般访问量比较大,倾向于让数据库少做事,因为出现瓶颈不好扩展。加外键会影响效率,在业务上保持结构一致就行了。还是老话:具体情况具体分析。
    qlhai
        6
    qlhai  
       2019-04-30 15:45:59 +08:00
    DBA 不让用
    passerbytiny
        7
    passerbytiny  
       2019-04-30 16:05:56 +08:00   ❤️ 2
    如果你要加一个技术上的约束,就要加一个由业务定义的、有效的约束。而很明显,外键既不是业务定义的,也无效。

    要不是历史遗留( ER 图的关系部分没有对应的物理模型),外键早就应该消失了。
    hsluoyz
        8
    hsluoyz  
       2019-05-11 23:56:56 +08:00   ❤️ 1
    我从另一个角度说说,也许可以不写 RBAC 数据库表,直接用 Casbin 来做 RBAC 权限管理即可: https://casbin.org/ ,原生支持多种数据库
    johnsona
        9
    johnsona  
       2020-04-27 18:24:55 +08:00
    @TommyLemon 能否举个例子,比如,用户和角色,多对多关系,user 表,角色表,用户角色是中间表,中间表存用户 id 和角色 id,再互联网敏捷开发场景应该怎么改
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6141 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 02:40 · PVG 10:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.