Sql Server:当它设置为"NO"时使用"强制外键约束"有什么好处?

odi*_*seh 25 sql-server database-design foreign-key-relationship

我知道RDBMS中"强制外键约束"的目的.但是当它设置为"否"时有什么好处吗?

mar*_*c_s 28

在正常生产中,此设置永远不应设置为NO.

但是:当您正在开发或重构数据库时,或者当您需要"清理"(需要清理)大量的大量数据时,关闭外键约束是有意义的.允许将"无效"数据加载到表中.当然,正如我所说 - 你不应该长时间关闭该设置 - 然后你应该继续清理数据,删除那些违反FK约束的行,或者更新它们的值所以他们匹配父行.

所以再次:在"正常"生产模式中,此设置永远不应该NO- 但对于特定任务,它可能有助于更轻松地完成工作.请谨慎使用,并尽快重新打开FK约束!

  • @Amicable:我非常不同意那个人的想法和想法 - 外键**很有用**并帮助你保持**数据的完整性**.如果你只是把它们扔到船外 - 祝你好运清理你的全部数据**几年之后......我会**绝对不会**称之为*共识*.... (4认同)
  • +1表示喜欢它.我看到这个设置在我签约的一些公司中一直被滥用.它一直导致问题.我想补充一点,当有一个应该存在的外键没有并且我想添加它时,我有时会将它用作中间步骤.有时我并不确信所有引用应用程序都以正确的顺序执行操作,这使我可以立即定义关系,测试有问题的应用程序(或搜索其代码),然后开启执行. (3认同)
  • 我只是偶然发现它应该(可以)设置为No的情况.我有一个User表和一个Log表.我已使用Log.UserID字段连接用户和日志.但我也希望能够删除用户,因此我将外键设置为不强制执行.这"需要"业务逻辑___要求有效的用户用于日志,这恰好是我的情况. (3认同)