我们正在设计一个数据库,我需要考虑一些FK(外键) 限制。但它不仅限于此 正式的结构和规范化。 我们只有在提供任何东西时才会这样做 性能或可扩展性的好处。
我一直在通过一些有趣的文章和谷歌搜索实际的好处。以下是一些链接:
http://www.mssqltips.com/tip.asp?tip=1296
我想了解更多关于FK的好处(除了正式的结构和着名的级联删除\更新)。
默认情况下,FK没有“索引”,因此在索引FK时需要考虑哪些因素?
如何处理映射为外键的可空字段 - 这是允许的吗?
除了索引之外,这有助于优化SQL-Server中的查询执行计划吗?
我知道还有更多,但我更愿意专家就此发表意见。请指导我。
答案 0 :(得分:9)
答案 1 :(得分:6)
主要的好处是,如果你的错误的客户端代码试图做错了,你的数据库不会最终不一致。外键是一种“约束”,所以你应该如何使用它们。
他们没有任何“功能”好处,他们不会优化任何东西。您仍然必须自己创建索引等。是的,您可以在作为外键的列中使用NULL值。
答案 2 :(得分:4)
FK约束使您的数据保持一致。而已。这是主要的好处。 FK约束不会为您提供任何性能提升。
但是,除非你在目的db结构上进行非规范化,否则我建议你使用FK约束。主要原因 - 一致性。
答案 3 :(得分:3)
我已经在net上阅读了至少一个示例,其中显示外键执行提高了性能,因为优化器不必对表进行额外检查,因为它知道数据符合已经到期的某些条件到FK。对不起,我没有链接,但博客提供了详细的查询计划输出来证明它。
答案 4 :(得分:1)
如前所述,它们用于数据完整性。任何性能“损失”都会被修复损坏数据所需的时间彻底消除。
但是,可能会有间接的性能优势。
至少对于SQL Server,FK中的列必须在每一侧具有相同的数据类型。如果没有FK,您可以拥有nvarchar父级和varchar子级。当您加入2个表时,您将获得可能会导致性能下降的数据类型转换。