0

我有 2 张桌子。父子表。当我删除父记录时,他们不应该删除子记录。因此我不使用 ON Delete cascade。而且我也根本不想使用外键,因为如果仍然引用了子记录,我将无法删除父记录。使 FKey 可以为空以具有可选关系也是没有选择的,因为只有当存在相关父级时才能存在子级。

OK FKey 完全删除。在我的实体关系图中,这两个表之间没有关系。但事实并非如此。当我在 6 个月后查看图表时,这可能会产生误导。

你现在会怎么做?

4

2 回答 2

1

如果存在子记录,则删除父记录是一种不好的做法。您可能会考虑是否最好使用 is_Active 标志来代替软删除,并通过将记录留在那里以报告历史信息来保持数据完整性。

于 2012-07-09T19:20:48.203 回答
0

假设您有时想删除父行(而不仅仅是标记它们)而不删除子行,那么在我看来您有两个选择。

  1. 删除父行时,将子表中的父键设为 NULL。
  2. 删除父行时,将父键保留在子表中。

在第一种情况下,使用外键并ON DELETE SET NULL执行此操作。(假设您的 dbms 支持该约束。)

在第二种情况下,不使用外键约束。

您对不可为空的外键的要求没有意义。一方面,你说只有有相关的父母,孩子才能存在。另一方面,您想删除父级而不删除子级。这两个要求不能很好地结合在一起。

于 2012-07-09T20:24:48.847 回答