http://msdn.microsoft.com/zh-cn/magazine/cc163442.aspx
约束是在数据库中维护数据一致性的重要工具。但是,有时禁用一个或多个约束来执行某些任务(例如,使用脱机数据库进行数据同步)会更方便。在使用 SQL Server™ 复制技术同步数据库之间的数据时,可以告知单个对象在复制过程中不强制约束。
例如,在使用 NOT FOR REPLICATION 语句定义外键约束时,SQL Server 在复制过程中将不会强制约束。实际上,NOT FOR REPLICATION 语句可以直接用于定义外键约束、检查约束、标识和触发器的 T-SQL 语句中。对于使用 SQL Server 复制的操作,在适当的对象上使用 NOT FOR REPLICATION 语句是一种不错的选择。但是,如果您要手动执行数据同步,则另一个方法是手动禁用约束和触发器。
通常在需要同步数据子集以及需要更好地控制数据同步方法的联机/脱机应用程序中执行手动同步。在本月的专栏中,我将讨论何时手动禁用和启用约束会更有利,此方法可以帮助您解决哪些类型的问题以及一些解决问题的技巧。
禁用外键
我不建议从关系数据库中删除外键约束。但是,
有时(例如在一系列表上执行大量的插入和更新操作以及需要更准确的结果和更佳的性能)您可能需要临时减少对一个或多个外键的引用完整性检查。当然,您只能在以正常的关系顺序无法对整个数据库执行大批量的数据更新时使用此方法。
因此何时才应禁用外键约束呢?假设您的关系数据结构有许多表,所有表都通过外键约束以某种方式彼此相关。与此数据库交互的应用程序具有一个脱机/移动版本,该版本与可能驻留在便携式计算机上的数据库的第二个实例进行通信。对主数据库所做的数据更改可能需要与脱机/移动数据库同步,而同步数据的方法有好几种。
…………………………………………
…………………………………………
…………………………………………