我在为这种预见的情况制定解决办法时遇到了一些困难。
TableA有一个FK到TableB。TableC有一个FK到TableA。TableC有一个FK到TableD。
TableA
------
taId
tbId
TableB
------
tbId
TableC
------
tcId
taId
tdId
TableD
------
tdId一系列简短的活动:
如何确保在将相关记录还原到TableB中的已恢复记录(即TableA和TableC中)时,不还原任何与步骤2 TableD中的记录有依赖关系的记录--此外,在不还原表D中对记录有依赖的部分时,我会以级联方式限制恢复(即,如果发现TableC与软删除的记录有关,则不恢复TableA )?
我考虑的是利用表中的时态设计和GUID。每个表将有一个DateDeleted字段(除了一个软删除标志)和一个GUID字段(其中相同的GUID将分配给级联软删除中的每个节点,以区分级联的集合)。这将使恢复级联集变得非常容易,因为它们将共享日期和GUID。但我遇到的问题,也就是上面概述的问题,是如何处理软性删除的记录将从不同的级联中删除的情况。
发布于 2012-04-11 19:22:40
由于您的TableD记录是软删除的,您不必担心通过还原第一个软级联删除来破坏引用完整性。但是,级联恢复逻辑需要做的是测试正在进行软还原的每个表的其他依赖项。
如果对父项的引用本身已被软删除,则还需要对该父项进行软还原。
实现这一目标的一个好方法是让每个表的软删除、存储的proc (或触发器)和每个表的软还原存储的proc (或触发器)。这些proc将以日期/GUID(软删除业务事务ID)作为输入参数。
对于每个表,procs将知道依赖项是什么。软删除具有下游级联依赖关系,而软恢复将具有上游级联依赖关系。每个proc将自己表的记录标记为已删除或恢复,然后调用执行级联操作所需的proc。
https://stackoverflow.com/questions/10111699
复制相似问题