首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在rdb中支持还原复杂的依赖关系

问如何在rdb中支持还原复杂的依赖关系
EN

Stack Overflow用户
提问于 2012-04-11 18:21:20
回答 1查看 128关注 0票数 0

我在为这种预见的情况制定解决办法时遇到了一些困难。

TableA有一个FK到TableB。TableC有一个FK到TableA。TableC有一个FK到TableD。

代码语言:javascript
复制
TableA
------
taId
tbId

TableB
------
tbId

TableC
------
tcId
taId
tdId

TableD
------
tdId

一系列简短的活动:

​

  • 1)向TableB中的记录发出级联软删除命令.这导致TableA中的所有相关记录被软删除,级联到TableC中的所有相关记录被软删除。
  • 2)稍后,TableD中的记录将被软删除,再次级联。TableD中的这一记录是以FK的形式在TableC中保存的。然而,TableC已经被标记为软删除。
  • 3)请求还原步骤1中的TableB中的记录。

如何确保在将相关记录还原到TableB中的已恢复记录(即TableA和TableC中)时,不还原任何与步骤2 TableD中的记录有依赖关系的记录--此外,在不还原表D中对记录有依赖的部分时,我会以级联方式限制恢复(即,如果发现TableC与软删除的记录有关,则不恢复TableA )?

我考虑的是利用表中的时态设计和GUID。每个表将有一个DateDeleted字段(除了一个软删除标志)和一个GUID字段(其中相同的GUID将分配给级联软删除中的每个节点,以区分级联的集合)。这将使恢复级联集变得非常容易,因为它们将共享日期和GUID。但我遇到的问题,也就是上面概述的问题,是如何处理软性删除的记录将从不同的级联中删除的情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-11 19:22:40

由于您的TableD记录是软删除的,您不必担心通过还原第一个软级联删除来破坏引用完整性。但是,级联恢复逻辑需要做的是测试正在进行软还原的每个表的其他依赖项。

如果对父项的引用本身已被软删除,则还需要对该父项进行软还原。

实现这一目标的一个好方法是让每个表的软删除、存储的proc (或触发器)和每个表的软还原存储的proc (或触发器)。这些proc将以日期/GUID(软删除业务事务ID)作为输入参数。

对于每个表,procs将知道依赖项是什么。软删除具有下游级联依赖关系,而软恢复将具有上游级联依赖关系。每个proc将自己表的记录标记为已删除或恢复,然后调用执行级联操作所需的proc。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10111699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档