SQL Server - 添加外键关系

时间:2011-12-13 14:07:43

标签: sql sql-server-2005 sql-server-2008

我有一个已经存在的数据库表。我为其中一个表添加了外键关系(因为它们引用了另一个表中的数据,只是表示创建表的关系不明确)。

此更改如何影响现有数据库?数据库引擎是否必须对数据库中的现有数据进行一些额外的工作?如果您已经有一个使用当前数据库模式的应用程序,那么这种变化是否会“彻底改变”?

3 个答案:

答案 0 :(得分:1)

如果添加了引用约束,则数据库会存储该约束并确保其得到维护。例如,如果表A具有引用表B的外键,则无法在表A中插入引用表B中不存在的键的行。

答案 1 :(得分:1)

确实有一些额外的工作(尽管非常小,取决于您的数据库服务器)来强制参照完整性。在实践中,性能影响几乎从未被您注意到。

它可能是“重大变化” - 您的客户端代码可能会插入不符合参考约束的数据。如果数据库允许您首先创建约束,则不太可能,但这是可能的。

答案 2 :(得分:1)

您可以在创建外键约束时指定WITH NOCHECK

  

当现有数据已满足时,WITH NOCHECK选项很有用   新的FOREIGN KEY约束,或业务规则需要时   约束只能从这一点开始执行。

     

但是,在没有添加约束时应该小心   检查现有数据,因为这绕过了控件   数据库引擎,强制执行表的数据完整性。