FOREIGN KEY 约束

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FOREIGN KEY 约束

外键(FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义FOREIGN KEY 约束来创建外键。

在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。

例如,因为销售订单和销售人员之间存在一种逻辑关系,所以AdventureWorks数据库中的Sales.SalesOrderHeader表含有一个指向Sales.SalesPerson表的链接。SalesOrderHeader表中的SalesPersonID列与SalesPerson表中的主键列相对应。SalesOrderHeader表中的SalesPersonID列是指向SalesPerson表的外键。

FOREIGN KEY 约束并不仅仅可以与另一表的PRIMARY KEY 约束相链接,它还可以定义为引用另一表的UNIQUE 约束。FOREIGN KEY 约束可以包含空值,但是,如果任何组合FOREIGN KEY 约束的列包含空值,则将跳过组成FOREIGN KEY 约束的所有值的验证。若要确保验证了组合FOREIGN KEY 约束的所有值,请将所有参与列指定为NOT NULL。

注意:

引用完整性

尽管FOREIGN KEY 约束的主要目的是控制可以存储在外键表中的数据,但它还可以控制对主键表中数据的更改。例如,如果在Sales.SalesPerson表中删除一个销售人员行,而这个销售人员的ID 由Sales.SalesOrderHeader表中的销售订单使用,则这两个表之间关联的完整性将被破坏;SalesOrderHeader表中删除的销售人员的销售订单因为与SalesPerson表中的数据没有链接而变得孤立了。

FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改将无法实现,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的FOREIGN KEY 约束中的值相对应,则该操作将失败。若要成功更改或删除FOREIGN KEY 约束的行,必须先在外键表中删除或更改外键数据,这将把外键链接到不同的主键数据上去。

对FOREIGN KEY 约束建立索引

由于以下原因,对外键创建索引通常是有用的:

∙对PRIMARY KEY 约束的更改可由相关表中的FOREIGN KEY 约束检查。

∙当在查询中组合相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的FOREIGN KEY 约束中的列与另一个表中的主键列或唯一键列匹配。索引使数据库引擎可以在外键表中快速查找相关数据。但是,创建此索引并不是必需的。即使没有对两个相关表定义PRIMARY KEY 或FOREIGN KEY 约束,也可以对来自这两个表中的数据进行组合,但两个表间的外键关系说明已用其键作为条件对其进行了优化,以便组合到查询中。有关在联接中使用

FOREIGN KEY 约束的详细信息,请参阅联接基础知识和查询类型和索引。

表中的FOREIGN KEY 约束数

SQL Server 对一个表可以包含的FOREIGN KEY 约束(引用其他表)数没有预定义限制,对引用特定表的其他表所拥有的FOREIGN KEY 约束数也没有预定义的限制。但是,实际的FOREIGN KEY 约束数会受到硬件配置以及数据库和应用程序的设计的限制。建议表中包含的FOREIGN KEY 约束不要超过253 个,并且引用该表的

FOREIGN KEY 约束也不要超过253 个。在设计数据库和应用程序时应考虑强制FOREIGN KEY 约束的开销。

相关文档
最新文档