如果我不需要在逻辑上为cascade的字段中使用restrict / foreign key和类似的约束,除了美观之外,我是否有任何理由将其明确声明为foreign key

因为它必须测试完整性,它是否会实际上降低性能?

编辑:澄清一下,由于以下原因,我不需要它:


无论如何,我都不会编辑或删除这些值,因此不需要进行cascade和类似的检查
在调用INSERT之前,无论如何我都会检查目标键是否存在,因此我也不需要restrict检查


我知道,这种约束将确保如果数据库由于某种原因损坏了,该关系仍然有效,这是一件好事。但是,我想知道在我的情况下是否还有其他原因要使用此功能。我想念什么吗?

最佳答案

您必须这样做。如果它会影响写入性能-这是一个“像素”问题。

主要的性能问题已在阅读中-FK可以帮助查询优化器选择最佳计划等。即使您的DBMS(如果提供跨DBMS解决方案)现在可以从中受益,它也会在以后发生。

所以答案是-是的,不仅是美学。

关于mysql - 不需要级联时的外键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15616578/

10-13 02:59