Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server外键约束的好处 我们设计了一个数据库,我需要考虑一些FK(外键)。 限制。但这并不局限于 形式化结构化和规范化。 我们只有在它提供任何帮助的情况下才会去做 性能或可扩展性优势_Sql_Foreign Keys - Fatal编程技术网

SQL Server外键约束的好处 我们设计了一个数据库,我需要考虑一些FK(外键)。 限制。但这并不局限于 形式化结构化和规范化。 我们只有在它提供任何帮助的情况下才会去做 性能或可扩展性优势

SQL Server外键约束的好处 我们设计了一个数据库,我需要考虑一些FK(外键)。 限制。但这并不局限于 形式化结构化和规范化。 我们只有在它提供任何帮助的情况下才会去做 性能或可扩展性优势,sql,foreign-keys,Sql,Foreign Keys,我一直在浏览一些有趣的文章,并在谷歌上寻找实用的好处。以下是一些链接: 我想知道更多关于FK的好处(除了正式的结构和著名的级联删除\更新) 默认情况下,FK没有“索引”,那么索引FK时有哪些注意事项 如何处理映射为外键的可空字段-允许这样做吗 除了索引,这是否有助于优化SQL Server中的查询执行计划 我知道还有更多,但我更希望专家们就此发表意见。请指导我。主要的好处是,如果您的错误客户端代码试图做错事,您的数据库不会以不一致告终。外键是“约束”的一种类型,所以应该这样使用它们 他们没

我一直在浏览一些有趣的文章,并在谷歌上寻找实用的好处。以下是一些链接:

我想知道更多关于FK的好处(除了正式的结构和著名的级联删除\更新)

  • 默认情况下,FK没有“索引”,那么索引FK时有哪些注意事项

  • 如何处理映射为外键的可空字段-允许这样做吗

  • 除了索引,这是否有助于优化SQL Server中的查询执行计划


我知道还有更多,但我更希望专家们就此发表意见。请指导我。

主要的好处是,如果您的错误客户端代码试图做错事,您的数据库不会以不一致告终。外键是“约束”的一种类型,所以应该这样使用它们


他们没有任何“功能”好处,他们不会优化任何东西。您仍然需要自己创建索引等。是的,作为外键的列中可以有空值。

FK约束使数据保持一致。就这样。这是主要的好处。 FK约束不会为您提供任何性能增益

但是,除非您已经非规范化了有目的的db结构,否则我建议您使用FK约束。主要原因是一致性。

  • 外键不提供性能或可扩展性方面的好处
  • 外键强制引用完整性。如果有人试图错误地从父表中删除行,则会引发错误,从而提供实际的好处
  • 默认情况下,外键没有索引。您应该为外键列编制索引,因为这样可以避免在删除/更新父行时对子表进行表扫描
  • 您可以将外键列设为null并插入null

如前所述,它们用于数据完整性。任何性能“损失”都将在修复损坏数据所需的时间内彻底消除

但是,可能会有间接的性能优势

至少对于SQL Server,FK中的列的每一侧都必须具有相同的数据类型。例如,如果没有FK,您可以有一个nvarchar父级和一个varchar子级。当您加入这两个表时,您将得到一个数据类型转换,这可能会降低性能


我在网上读过至少一个例子,其中显示外键确实提高了性能,因为优化人员不必跨表进行额外检查,因为它知道数据已经满足FK的某些标准。很抱歉,我没有链接,但博客提供了详细的查询计划输出来证明这一点。

不仅仅是错误的客户端代码。众所周知,“有缺陷”的用户和数据库管理员在通过直接键入SQL更新命令进行快速修复时会犯错误!我一直在处理一些有几百万条记录的数据库。在数据库和它的克隆之间导入数据,然后在web应用程序环境中使用该克隆有很多方法。我知道自动保存PK索引有助于加快数据访问速度。现在,从这个讨论中我得出,如果我在SQL查询中使用联接,那么我应该使用FK并对其进行索引,以使联接操作更高效。例如,我有一个表OrgMaster(包含所有的组织记录),然后我有一个BookingMaster表(包含所有的预订记录)。现在,OrgMaster.Id被“引用”为BookingMaster.OrgId。因此,我为OrgId到Id的关系设置了一个FK,并对其进行了“索引”,以便更好地执行这两个表之间的任何连接操作。。我没弄错吧
所有这些-以额外的空间和时间开销为代价(在使用FK将记录插入表中)。我要求您提供一个要考虑的点列表,例如--随着表中记录数的增加,FK索引是否会占用太多的空间\时间?-在这种情况下,“每次”使用FK索引是否值得在什么情况下,我不应用FK或索引它,或者两者都不做(当然,我可以从应用程序中处理很多)-有没有其他技巧来加速加入或其他此类耗时的查找?