数据库设计 - MySQL数据库应不应该拿掉所有的外键约束?
黄舟
黄舟 2017-04-17 11:19:47
[MySQL讨论组]

RT
拿掉外键好像是,能增加效率减少约束。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(3)
ringa_lee
  1. 作为写了8年PHP的程序员来讲, 我个人的习惯是不使用外键。
  2. 因为我们所接触的绝大多数业务需求,并没有严谨到需要双层数据验证(第一层是在PHP代码里)。
    即使是对数据一致性稍有要求的电子商务网站,我也接触过只用MyISAM表的,除了程序逻辑本身经过严格的单元测试和使用场景测试去保证数据一致性之外,我们还准备了完善的logging系统,在pdo层面对站点数据的每一次CURD做日志,针对管理员和会员的每一个操作也做日志,方便意外情况的随时排查。
  3. 选型过程中没有使用Innodb的其它原因还包括:缓存的设计十分合理、命中率十分高,并且经过了数据验证,综合应用流量,我们可以大胆不去考虑锁表问题;外键确实增加了数据库开销,相对于我们站点的规模来讲,增加的开销无法忽略;绝大多数PHPJava前端人员水平良莠不齐,我们不想为数据库基础不好的同学做科普。
  4. 说句题外话,当一个应用需要考虑是否拿掉外键,提高效率的时候。需要重构代码或增加中间件(mongo, redis之类)以应付数据库开销了。
阿神

如果需要切分数据表到不同的数据库里面时,就不能使用外键作为约束了

PHP中文网

当你需要分库分表的时候你就知道,在所有RDBMS里提供的所谓原子性一致性完整性保证基本上都是扯淡,也就持久性你还能指望一下,但也只是“指望”一下而已,最终还是要自己动手。
当然如果你确定一定以及肯定你永远不会有这方面的需求,系统级的保证当然越多越好,不过千万记得,面对MyISAM之类的Engine时,你呵呵一下一笑而过就好。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号