是否需要外键约束?

时间:2009-10-02 23:04:28

标签: sql

在一个完美的世界中,是否真的需要外键约束?

7 个答案:

答案 0 :(得分:20)

外键在RDBMS中强制执行一致性。也就是说,没有子行可以引用不存在的父级。

有一种观点认为应该通过应用程序代码强制执行一致性规则,但这既低效又容易出错。即使您的代码完美且没有错误且从未引入过破坏的引用,您如何确定访问同一数据库的其他人的代码也是完美的?

在RDBMS中强制执行约束时,您可以依赖一致性。换句话说,数据库永远不允许提交破坏引用的更改。

当应用程序代码强制执行约束时,您永远无法确定数据库中是否未引入任何错误。您发现自己运行频繁的SQL脚本来捕获损坏的引用并更正它们。您必须编写的额外代码远远超过了RDBMS管理一致性的任何性能成本。

答案 1 :(得分:14)

除了保护数据的完整性之外,FK约束还有助于记录数据库本身内表之间的关系。

答案 2 :(得分:12)

世界并不完美,这就是他们需要的原因。

答案 3 :(得分:5)

没有外键,世界就不可能完美。

答案 4 :(得分:3)

是的,如果您想确保参照完整性。

答案 5 :(得分:2)

除了一致性强制和文档,它们实际上可以加快查询速度。查询优化器可以查看外部约束,了解其效果,并进行计划优化,这对于没有约束的情况是不可能的。见Foreign Key Constraints (Without NOCHECK) Boost Performance and Data Integrity。 (特定于SQL Server)

答案 6 :(得分:1)

除了Dave提到的文档效果之外,FK约束可以帮助您编写更少的代码并自动执行某些操作。

如果您删除客户记录,如果您的FK约束中有“ON DELETE CASCADE”,则他的所有发票和发票行也会自动删除。