2011-02-14 130 views
4

我不是100%确定级联删除是如何工作的。SQL Server 2005级联删除

我有一个看起来像这样的

用户简单表格 USER_ID

ExtendedUser USER_ID

评论 USER_ID

帖子 USER_ID

我基本上有一吨的引用来自User的User_ID的表格。我想在一个表上设置级联删除,以便我可以删除User对象并确保引用User的所有表都被删除。

但是,我的理解是,我需要在每个引用用户的表上设置删除操作。那就是我需要在每个子表上设置“级联删除”。我的理解是否正确?

SQL Server Cascading

更新: 它看起来像我必须将其设置为每一段关系。我应该在哪里将这些关系看作是“存储”的?也许我的观念不对。

看起来我可以使用父表中的管理工作室为每个关系设置所有参照完整性规则。

回答

7

对于每个关系,您可以指定要执行的操作。

管理这种可能性最简单的方法是使用SQL Server Management Studio。设计你的父表,并找到所有的PK-FK关系。

对于每一个选择当删除事件发生时该走的路:

  • 无动作 - 当它发生时
  • 级联这将导致FK错误 - 删除子记录
  • 设置为null - FK列值将为空。当子表中不允许有空值时,这显然会引发错误。
  • 设置默认值 - 如果子表上的FK列有默认值,则它将是子列中的新值。

enter image description here

+0

坎贝尔感谢。这就是我所做的!我想我会检查每个子表,但我可以看到来自父母的关系。我认为这是我的困惑。 – 2011-02-14 16:44:13

0

你所描述似乎是坏的魔力(特别是如果你不执行引用完整性)。考虑以下几点:

你有3个表引用的用户表:客户,员工和客户

如果我理解正确,你是说,当你删除一个引用的用户记录,那么你需要一个客户端记录该用户记录也被删除(正确?)。

如果你做到这一点,有一些引用相同的用户记录那么他们会突然指着什么(如果不实施参照完整性)员工和客户记录。

在我看来,如果你有一大堆的用户参考表,那么你不应该做的级联删除表...

+0

我敢肯定柯蒂斯意味着它周围的其他方法 - 如果删除父记录,孩子们被删除,而不是相反。我肯定有数据库支持它的情况。但在一般情况下,我同意,你应该觉得很辛苦是否启用级联删除。它的安全,让您删除您的代码明确的 - 那么你就要考虑一下,而且不太可能遭受不幸的数据丢失事故。 – 2012-01-05 19:37:11