MySQL中尽量少使用外键的原因

mysql设置外键的好处

阻止执行
    从表插入新行,其外键值不是主表的主键值便阻止插入;
    从表修改外键值,新值不是主表的主键值便阻止修改;
    主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
    主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。

级联执行
    主表删除行,连带从表的相关行一起删除;
    主表修改主键值,连带从表相关行的外键值一起修改。两种方法提供给用户选择。无论选取哪种方法,从表里都不会有多余行。从另一个角度理解,用拒绝同一事物在从表中的标志与主表不一致来实现与主表中的标志一致。

优势:

  设置外键可以保证数据的完整性与关联性,杜绝数据冗余

                    级联操作方便,比如涉及一个离职用户的所有相关信息,可以直接删除这个用户就能做到所有信息一起删除的操作

 缺点:

        主表进行修改或变更,会波及一大片从表,顿时会使公司部分业务处于不可用的状态,不利中小公司的设计,一般中小型公司都没有dba,开发人员对数据库了解的不够深,容易误操作,所以建议不用使用过多的外键来操作相关业务表

      而且对于insert,   update,   delete等操作时都会先检查外键的约束条件再操作,性能有所下降

    

个人对于数据库表的设计与理解:

       由于个人喜好原因,我设计表的时候并不会考虑外键的添加来增加对数据库操作的复杂性,也不考虑用触发器去解决级联操作的问题,因为触发器的对于表设计而言有一定的隐蔽性,对于后期维护而言有一定的弊端;

        程序设计上,属于一张表一个mapper接口服务,这样的弊端是会增加很多的代码量

                        解决方案之一:不考虑代码量的基础上,使用代码生成器来产生模板代码

                        解决方案之二:可以使用抽象工厂来生产和适配不同表的接口                        


-----修改mysql的表结构 

--修改自增的初始值  使用alter

alter table mytablename auto_increment=1;
由于在数据库存储的数据是在硬盘上,相比较于内存的运行速率是要慢很多的,因此,可以选择使用代码在逻辑上实现的功能就尽量不要过多地使用外键。在实际开发中,很少会使用到外键约束,会极大的降低表更新的效率。[58到家数据库30条军规解读](https://mp.weixin.qq.com/s/Yjh_fPgrjuhhOZyVtRQ-SA)
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值