【发布时间】:2013-03-25 13:47:54
【问题描述】:
如果我不需要在逻辑上为foreign key 的字段中使用cascade/restrict 和类似约束,我是否有任何理由将其明确声明为foreign key,除了审美?
它实际上不会降低性能吗,因为它必须测试完整性?
编辑:澄清一下,我不需要它,因为:
- 无论如何我都不会编辑或删除这些值,所以我不需要进行
cascade和类似的检查 - 在调用
INSERT之前,我会检查目标键是否存在,所以我也不需要restrict检查
我知道,如果数据库以某种方式损坏,这种约束将确保该关系仍然有效,这是一件好事。但是,我想知道在我的情况下是否还有其他理由使用此功能。我错过了什么吗?
【问题讨论】:
-
对我来说,性能下降对于参照完整性来说只是很小的代价。
-
@DanBracuk 当然,我想我不清楚,我会编辑。
-
您可以将其视为某种礼仪或某种良好的形式。每个人都喜欢带有 cmets 的代码(尤其是当代码很复杂的时候),而不喜欢没有 cmets 的代码。也可以将它们视为某种附加文档。
-
gaRex 是的,这个问题是他们是否不止于此,您和@Kurrija 的回答都很好:)
标签: mysql sql foreign-keys