0

假设我有一张 PlantGroups 表。它们依赖于表 Plants 并具有外键 PlantId。每个 PlantGroup 仅包含一个 Plant。

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

Plants
======
PlantId

如果Plants表中的记录被删除,或者被请求删除,应该采取什么流程来保证PlantsGroups的数据完整性?

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

4

2 回答 2

1

顺便说一句,如果 PlantGroups 可以有多个植物,您应该有一个额外的表,其中包含 PlantGroupID 和 PlantID。

根据您要完成的工作,您可能希望有一个逻辑,如果它没有植物,它将删除一个植物组。但是,添加在某些情况下会忽略空白组的逻辑可能会更容易,例如查找空白组,但在人们需要将植物添加到组时显示它们。

对于您的其他问题,您应该查看级联删除。其他人可能能够提供更多有关这方面的信息。

于 2012-03-23T22:39:33.617 回答
0

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

除非有人说服我采用更好的方法,否则将会发生这种情况。

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

Plant
=====
PlantId
bool isActive

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

或者

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

于 2012-03-23T22:54:04.140 回答