sql - 是否需要外键约束?

标签 sql

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

去年关闭。




Improve this question




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

最佳答案

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

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

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

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

关于sql - 是否需要外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1512219/

相关文章:

java - 如何连接到 PostgreSQL 服务器以查询数据库名称列表

mysql - 按日期分组给出不同的值

mysql - 如何根据 10 个值的范围查找字段的计数

sql - 如何从它所在的所有表中选择一个列?

JavaPreparedStatement语法问题

mysql - SQL查询从所有数据库中获取数据

.net - 如何在具有GUID主键和默认newsequentialid()的表上使用SQLBulkCopy?

php - 如何通过一个数据库连接将 mysql 结果存储在不同的单独变量中?

php - 有没有办法从 2 个不同的表单插入数据并插入到列中的 1 行?

sql - 同一列上的聚集索引和非聚集索引有什么用