我需要在具有5个子外键关系的表上更改Web应用程序上“删除”功能的行为。它是一个相当大的Web应用程序,因此我正在寻找风险最小且影响最小的更改,因此它需要对Web应用程序进行最少量的更改。
我可以想到两个选择:
deleted
向表0
添加一列,1
将指示该记录已被删除。这将需要更新表上的所有选择(以及它的子表,因为它们现在是孤立的)以包括子句where deleted = 0
。 Web应用程序已经过时且编写得不好(重复代码),因此有许多地方需要进行此更改,因此可能会遗漏一个或多个位置存在风险。选项1似乎预先付出了更多努力,但未来可维护性更强,选项2预先做的工作量不大,对Web应用程序的改动很小,但非常混乱。还有其他选择吗?
这是我如此喜欢观点的一个很好的例子。
例:
create view MyData as
select ...
from AllMyData
where Deleted = 0
例:
create view DeletedMyData as
select ...
from AllMyData
where Deleted = 1
MyData
视图上的ON_DELETE触发器只会针对实际表发出更新,将Deleted值设置为1.可以使用DeletedMyData
视图上的ON_DELETE触发器将UNDELETE操作实现为将值设置为0。删除MyData
视图将执行软删除(记录将从MyData
数据集中消失并出现在DeletedMyData
中)并在DeletedMyData
视图上发出删除将执行软反删除(记录将从DeletedMyData
数据集中消失并重新出现在MyData
)。