PHP/MySQL应用程序通常会声明外键吗?

sam*_*mJL 5 php mysql

我正在开发一个开源的PHP/MySQL应用程序

我查看了phpBB,Wordpress和其他应用程序,看看他们是否指定了外键(以确保参照完整性)

我发现他们没有

在MySQL数据库结构中指定外键是否是这些类型的应用程序中的常见做法?

Bil*_*win 4

过去版本的MySQL默认使用MyISAM存储引擎,不支持外键约束。除非您显式声明表使用 InnoDB 存储引擎,或者更改服务器范围内的默认存储引擎,否则不会出现外键,因此为 MySQL 设计的软件开发人员不会费心使用外键约束也就不足为奇了。

MySQL 5.5 目前处于测试阶段,最终InnoDB 将成为默认存储引擎。因此外键约束将得到开箱即用的支持。

是的,建议使用外键。这些约束有助于确保您的数据始终满足引用完整性。另一种方法是,您的数据库逐渐填充“面包屑”或引用不再存在于数据库中的父行的行。这些可能会导致查询出现奇怪的结果,浪费空间,查询效率低下,并且您最终会手动执行清理工作,如果您只是让数据库强制执行清洁工作,那么这些工作是不必要的。


回复 @Jacob 的评论:好点,但一定要阅读最近比较 InnoDB 与 MyISAM 的文章 多年前,MyISAM 被认为是“快速存储引擎”,而 InnoDB 被认为是如果你不能使用的话,你会不情愿地使用的存储引擎没有交易就不要做。

但 InnoDB 在过去几年中得到了显着的改进,并且在今天的大多数情况下,InnoDB 的执行速度比 MyISAM更快。

除了您提到的 MyISAM 仍然支持全文索引之外,使用 MyISAM 的理由越来越少。当我需要全文索引时,我要么维护一个 MyISAM 表作为 InnoDB 中主存储的镜像,要么使用Apache Solr