2010-06-29 25 views
5

我在一个开源的PHP的工作/ MySQL的应用PHP/MySQL应用程序是否声明了外键是常见的做法?

我已经看过了的phpBB,WordPress和其他应用程序,看看他们指定的外键或不(以确保引用完整性)

我无法找到他们有

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

回答

4

过去版本:参照Integrety会根据自己的路线图是一个“新功能”,在6.1 MyISAM存储引擎默认情况下不支持外键约束。除非您明确声明表使用InnoDB存储引擎,或者更改服务器范围内的默认存储引擎,否则不会出现外键,因此为MySQL设计的软件开发人员不会打扰使用外键约束也就不足为奇了。

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

是的,推荐使用外键。这些约束有助于确保您的数据始终满足参照完整性。另一种方法是,数据库逐渐填充引用不在数据库中的父行的“碎屑”或行。这些可能会导致查询和浪费的空间,效率不高的查询产生奇怪的结果,并且最终您会手动进行清理杂事,如果您只是让数据库为您执行清洁工作,那将不必要。


回复评论表单@Jacob:好点,但请务必阅读最近文章比较的InnoDB与MyISAM数据多年前,MyISAM数据被认为是“快速存储引擎”和InnoDB被认为是存储引擎你如果没有交易,你不得不使用它。

但是InnoDB在过去几年里有了很大的提升,而且在大多数情况下,InnoDB比MyISAM更快地执行

除了您提到的MyISAM仍支持全文索引之外,使用MyISAM的原因也越来越少。当我需要全文索引时,我需要将MyISAM表保存为InnoDB中的主存储的镜像,否则我使用Apache Solr

+0

谢谢,这很有道理 – samJL 2010-06-29 02:51:52

+0

+1 - 确保你明白在MyISAM上使用innoDB的缺点。做一个谷歌搜索innoDB与MyISAM,有许多文章讨论两者的优缺点。所以它真的取决于你使用数据库的是否你真的想要/需要引用完整性,而不是MyISAM带来的一些优点。我刚刚发现的一个是innoDB不支持全文搜索(但是),但是MyISAM确实如此:( – Jacob 2010-06-29 03:03:16

+0

当谈到InnoDB和MyISAM时,我的经验法则是;如果你需要做全文搜索,使用MyISAM,全文搜索似乎是MyISAM在速度方面比InnoDB更大的优势 – 2010-06-29 04:04:51

0

MySQL用来不兑现外键。它仍然没有,除非你采取措施。

在视线之外,不在意,对不对?

1

我不知道它有多普遍,但我觉得你应该充分表达对象模型的条件,而不管底层数据库是否完全支持它们。

如果您通常编写ANSI SQL,那么如果您继续并添加外键约束,那么当您的数据库支持它们时,您使用支持它们的引擎,或者移动到支持它们的另一个数据库,那么你会得到他们的“免费”,而不必回去,并试图找到所有的关系。

所以,我会把外键在SQL中,但这是我的,可能不再常见。

+0

不,那也是我。除非我正在为SO问题写一个一揽子计划。 – 2010-06-29 02:38:47

+0

谢谢 听起来像一个很好的做法 – samJL 2010-06-29 02:52:08

0

在MySQL中,只有InnoDB甚至支持外键,并且只在MySQL 5.1之后。

编辑:InnoDB的将是默认存储引擎在MySQL 5.5

编辑-忽略:MySQL 5.1中http://en.wikipedia.org/wiki/MySQL#Future_releases

+0

该wiki信息是真的过时了。 MySQL 6被搁置,MySQL 5.5将支持InnoDB作为默认存储引擎。 – 2010-06-29 02:46:37

+0

@Bill Karwin,PHP 6报废,MySQL 6报废,这些都是6。 – 2010-06-29 02:50:40

+1

我编辑了您链接到的维基百科段落。 – 2010-06-29 03:09:34

相关问题