如果你不在表之间使用外键,那么你如何表达关系

时间:2012-07-09 19:13:47

标签: sql foreign-keys parent-child

我有2张桌子。父母和子女表。当我删除父记录时,他们不应该删除子记录。因此我不使用ON删除级联。而且我也不想使用外键,因为如果仍然引用了子记录,我就无法删除父记录。使FKey为空可以使可选关系成为无选项,因为只有存在相关父级才能存在子项。

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

你现在会做什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

假设您有时想要删除父行(而不只是标记它们)而不删除子行,我觉得您有两种选择。

  1. 删除父行时,子表中父项的键为NULL。
  2. 删除父行时,将父键保留在子表中。
  3. 在第一种情况下,使用外键和ON DELETE SET NULL来执行此操作。 (假设您的dbms支持该约束。)

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

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

相关问题