《FOREIGNKEY约束》由会员分享,可在线阅读,更多相关《FOREIGNKEY约束(5页珍藏版)》请在金锄头文库上搜索。
1、FOREIGNKEY约束外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义FOREIGNKEY约束来创建外键。在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。例如,因为销售订单和销售人员之间存在一种逻辑关系,所以AdventureWorks数据库中的Sales.SalesOrderHeader表含有一个指向Sales.SalesPerson表的链接。SalesOrderHeader表中的SalesPersonID列与Salesperson表中的主键列相对应。SalesOrderHeader表中
2、的SalesPersonID列是指向SalesPerson表的外键。Salesperson(Sales)SalesCrderHeader(Sales)SalesPersonlDSafesOrcferJDTerriborjrlDRevlsionblumberSalesQuotaOrdertiafteBonusDiDsDsteCommlssierctShqpDateSaleYTDStatusSialestsstY-arONin&Order冋*growgoldSafesOrcterNumberMndifiedDatePurchrdrNurnberAceountNumberCustomerIDCcnt
3、MtlD才rSafesPersonID/TesritorylDBIIIToAddelDShpTcAddressJDS闻隔出XIDCrdiLCdlCCrediteddApprovalCodeCirirencyRateDDSiibTotalTaxAmtFreightTatalDue匚cwnmntroigijidModifkdDateFOREIGNKEY约束并不仅仅可以与另一表的PRIMARYKEY约束相链接,它还可以定义为引用另一表的UNIQUE约束。FOREIGNKEY约束可以包含空值,但是,如果任何组合FOREIGNKEY约束的列包含空值,则将跳过组成FOREIGNKEY约束的所有值的验证。若
4、要确保验证了组合FOREIGNKEY约束的所有值,请将所有参与列指定为NOTNULL。FOREIGNKEY约束可以引用同一数据库的表中的列或同一表中的列。这些称为自引用表。例如,请考虑包含三列的一个雇员表:employee_number、employee_name和manager_employee_number。由于经理本身也是雇员,所以从manager_employee_number歹U至Uemployee_number列存在外键关系。引用完整性tl尽管FOREIGNKEY约束的主要目的是控制可以存储在外键表中的数据,但它还可以控制对主键表中数据的更改。例如,如果在Sales.SalesPe
5、rson表中删除一个销售人员行,而这个销售人员的ID由Sales.SalesOrderHeader表中的销售订单使用,则这两个表之间关联的完整性将被破坏;SalesOrderHeader表中删除的销售人员的销售订单因为与SalesPerson表中的数据没有链接而变得孤立了。FOREIGNKEY约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改将无法实现,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的FOREIGNKEY约束中的值相对应,则该操作将失败。若要成功更改或删除FOREIGNKEY约束的行,必须先在外键表中删除或更
6、改外键数据,这将把外键链接至不同的主键数据上去。对FOREIGNKEY约束建立索引曰由于以下原因,对外键创建索引通常是有用的: 对PRIMARYKEY约束的更改可由相关表中的FOREIGNKEY约束检查。 当在查询中组合相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的FOREIGNKEY约束中的列与另一个表中的主键列或唯一键列匹配。索引使数据库引擎可以在外键表中快速查找相关数据。但是,创建此索引并不是必需的。即使没有对两个相关表定义PRIMARYKEY或FOREIGNKEY约束,也可以对来自这两个表中的数据进行组合,但两个表间的外键关系说明已用其键作为条件对其进行了优化,以便组合到查询中。有关在联接中使用FOREIGNKEY约束的详细信息,请参阅联接基础知识和查询类型和索引。表中的FOREIGNKEY约束数1=1SQLServer对一个表可以包含的FOREIGNKEY约束(引用其他表)数没有预定义限制,对引用特定表的其他表所拥有的FOREIGNKEY约束数也没有预定义的限制。但是,实际的FOREIGNKEY约束数会受到硬件配置以及数据库和应用程序的设计的限制。建议表中包含的FOREIGNKEY约束不要超过253个,并且引用该表的FOREIGNKEY约束也不要超过253个。在设计数据库和应用程序时应考虑强制FOREIGNKEY约束的开销。