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