在可能删除外键关系的情况下,应该如何保持数据完整性



假设我有一个PlantGroups表。它们依赖于Plants表,并具有外键PlantId。每个工厂组仅包含一个工厂。

PlantGroups
==========
...data...
PlantId
Plants
======
PlantId

如果删除或要求删除Plants表中的记录,应采取什么程序来确保PlantGroups的数据完整性?

此外,如果相应PlantGroups记录中的其他数据(取决于请求删除的Plants记录)仍然相关且值得保留,该怎么办?

如果PlantGroups可以有多个Plant,那么您应该有一个额外的表,其中包含PlantGroupID和PlantID。

根据您试图实现的目标,您可能需要一个逻辑,如果PlantGroup没有Plant,则该逻辑将删除该PlantGroup。然而,在某些情况下,添加忽略空白组的逻辑可能会更容易,例如查找空白组,但在人们需要将植物添加到组中时显示空白组。

对于其他问题,您应该研究级联删除。其他人可能会提供更多信息。

我要选择Option Other。虽然我读过的任何数据完整性指南中都没有定义,包括Oracle(只列出NULL、CASCADE、RESTRICT、NO ACTION、DEFAULT作为选项),但我将推出自己的指南。

以下是将要发生的事情,除非其他人说服我采取更好的方法。

PlantGroups
===========
... data  ...
PlantId
Plant
=====
PlantId
bool isActive

删除Plant时,isActive将设置为false。这将导致在数据库的管理中包括许多额外的逻辑,但允许对这些依赖字段进行浅层删除。级联删除选项可能会作为最终选项,用于处理超过一定年限的弃用数据。

或者

我还可以有一个第二个数据库,它与第一个数据库的模式相同,并保存已删除的数据。

最新更新