我有一个已经存在的数据库表。我为其中一个表添加了外键关系(因为它们引用了另一个表中的数据,只是表示创建表的关系不明确)。
此更改如何影响现有数据库?数据库引擎是否必须对数据库中的现有数据进行一些额外的工作?如果您已经有一个使用当前数据库模式的应用程序,那么这种变化是否会“彻底改变”?
答案 0 :(得分:1)
如果添加了引用约束,则数据库会存储该约束并确保其得到维护。例如,如果表A具有引用表B的外键,则无法在表A中插入引用表B中不存在的键的行。
答案 1 :(得分:1)
确实有一些额外的工作(尽管非常小,取决于您的数据库服务器)来强制参照完整性。在实践中,性能影响几乎从未被您注意到。
它可能是“重大变化” - 您的客户端代码可能会插入不符合参考约束的数据。如果数据库允许您首先创建约束,则不太可能,但这是可能的。
答案 2 :(得分:1)
您可以在创建外键约束时指定WITH NOCHECK
:
当现有数据已满足时,
WITH NOCHECK
选项很有用 新的FOREIGN KEY
约束,或业务规则需要时 约束只能从这一点开始执行。但是,在没有添加约束时应该小心 检查现有数据,因为这绕过了控件 数据库引擎,强制执行表的数据完整性。