zoukankan      html  css  js  c++  java
  • 关于阿里巴巴开发手册"不得使用外键与级联,一切外键概念必须在应用层解决"的疑惑

    原文地址:http://www.codes51.com/itwd/4517194.html

    问题: 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑
    描述:
    原文如下:

    【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
    说明:以学生和成绩的关系为例,学生表中的 student id 是主键,那么成绩表中的 student id
    则为外键。如果更新学生表中的 student id ,同时触发成绩表中的 student id 更新,即为
    级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群 ; 级联更新是强阻
    塞,存在数据库更新风暴的风险 ; 外键影响数据库的插入速度。

    请问各位数据库是每个表都增加一个业务的编码字段做关联还是直接通过id关联呢?
    我的看法是:如果是小项目单库的话用id关联更方便,自动有主键索引,如果是分布式数据库项目每个表都建一个业务编码字段,通过业务编码字段关联,但是这样需要手动建索引提高查询效率.因为没有大项目的数据库经验,所以想问一下大中型的项目数据库业务关联是直接通过id关联还是增加一个业务编码字段关联呢?

    解决方案1:
    试试通过id关联,只是不在数据库上去约束

    解决方案2:
    就是不让用外键呗。 这个应该大多互联网项目 都不用外键了吧。我09年开始做互联网的项目,就没用过外键了。 至于为什么,楼上回答的好啊, 业务变动,修改数据库的成本很高。最重要的原因 文中说的也很清楚,分布式、高并发集群环境下,容易产生更新风暴。外键影响数据库的插入速度
    不用外键后, 各个数据表的关系维护,通过应用程序来解决。

    解决方案3:
    数据库表的关联,应该按照表的内部id做关联,不推荐用业务编码做主键。
    业务规则的变化是不可预测的,如果因为业务规则的变化导致数据库结构大的变动,甚至还要做数据更新,我认为是失败的设计方案。

    以上介绍了“ 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑”的问题解答,希望对有需要的网友有所帮助。

  • 相关阅读:
    安装SQL sever2008时显示重新启动计算机规则失败,应该怎么解决?
    C#获取当前日期时间(转)
    使用JQUERY实现页面局部刷新
    Metal渲染:实现画面比例功能
    Metal渲染:实现旋转/翻转功能
    依赖注入浅析
    iOS 消息推送实现 APNS
    使用#pragma阻止一些warnings
    github 多帐户使用
    Swift 实现Bitmask Option(Enum)
  • 原文地址:https://www.cnblogs.com/wei1/p/9582038.html
Copyright © 2011-2022 走看看