【发布时间】:2012-11-07 12:34:17
【问题描述】:
我想要做的是当我从父表中删除一行以将数据保留在子表中时。
意味着如果我有一个表部门,它是具有两列的父表 - depNo 和 depName,以及具有三列的子表 - emNo、emName 和 depNo (FK)。
我希望能够删除父表中的行,但保留子表中的行(在我的情况下,它与许可证相关联并且是一个好主意,即使用户已被删除)。
我猜ON DELETE NO ACTION 不起作用,因为如果我尝试删除父表中的行,它会给我一个错误。
CASCADE 和 SET NULL 在这种情况下不好。
SET Default - 它不起作用,因为我无法设置默认值 - 它可能会有所不同(并且 100% 肯定会如此)。
有什么制作方法吗?
【问题讨论】:
-
为什么需要保留子数据?你不能把它移到历史表中吗?
-
不,我需要将数据保留在子表中 - 就像历史表一样。所以如果我删除父表中的行,子表中的FK应该保留。
-
那你需要从子表中去掉FK约束,有数据不一致的风险。您的建议是糟糕的数据库设计。您应该将这样的子行移动到不同的表中。
-
好的,如果这是唯一的方法,那我就做,总比数据不一致好。我想这回答了这个问题。
标签: sql-server foreign-keys constraints