当我们定义外键约束时,我对SQL Server 2008 Management Studio中更新和删除规则的含义感到困惑。我也没有找到相关的帮助文件(例如F1帮助)。
这是屏幕快照。感谢是否有人可以描述他们的意思并推荐一些相关的文件来阅读。 : - )
答案 0 :(得分:24)
外键定义了两个表之间的父子关系。父表中的主键是最多n个子表行中的外键。
现在,如果父表中的主键获得UPDATE,则UPDATE RULE将启动。所有子行也会更新,设置为NULL或其他任何内容。然而,最佳做法是拥有一个永远不会改变的主键(固定ID或其他东西),这是不太重要的规则。
更重要的是DELETE规则 - 如果删除父行(例如删除订单)会怎样?您也可以使用CASCADE DELETE删除所有子行(所有订单行项目),或者您可以将其外键设置为NULL(它们不再具有父项) - 这完全取决于您的具体方案。
在订单/订单行方案中,删除完整订单时删除订单行可能完全有用,但您可能不想删除产品,只是因为已删除引用它的订单 - 没有一个单一的正确答案 - 这取决于您的方案和您的应用程序。
马克
答案 1 :(得分:3)
答案 2 :(得分:1)
外键字段只能存储null或由主键字段定义的值。
如果您尝试将外键值更改为未由主键定义的内容,则会出现错误。同样,如果您尝试更改具有外键依赖关系的主键,您将收到错误...作为示例
Models table
modelID (primary key) model
1 Jeep
2 Ford
Customer table
id customer modelID (foreign key of Models.modelID)
1 1234 1
2 2345 2
如果您尝试从模型中删除Jeep记录,则会出现错误,因为客户1234的modelID设置为1,如果是外键,则为此。同样,如果我尝试更新客户1234以使modelID为3,则会抛出错误,因为Models表中没有值为3的主键
答案 3 :(得分:1)
MSDN page看起来是一个好的开始。