如果我不需要在逻辑上为cascade
的字段中使用restrict
/ foreign key
和类似的约束,除了美观之外,我是否有任何理由将其明确声明为foreign key
?
因为它必须测试完整性,它是否会实际上降低性能?
编辑:澄清一下,由于以下原因,我不需要它:
无论如何,我都不会编辑或删除这些值,因此不需要进行cascade
和类似的检查
在调用INSERT
之前,无论如何我都会检查目标键是否存在,因此我也不需要restrict
检查
我知道,这种约束将确保如果数据库由于某种原因损坏了,该关系仍然有效,这是一件好事。但是,我想知道在我的情况下是否还有其他原因要使用此功能。我想念什么吗?
最佳答案
您必须这样做。如果它会影响写入性能-这是一个“像素”问题。
主要的性能问题已在阅读中-FK可以帮助查询优化器选择最佳计划等。即使您的DBMS(如果提供跨DBMS解决方案)现在可以从中受益,它也会在以后发生。
所以答案是-是的,不仅是美学。
关于mysql - 不需要级联时的外键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15616578/