递归-一个比较复杂的级联删除问题 ,求高手指点

问题描述

一个比较复杂的级联删除问题 ,求高手指点
   是这样的,现在要做一个通用的删除方法。删除一个配置项和其关联配置项,逻辑很复杂。首先,数据库结构大概是这样的:有N个配置项,每个配置项有一张表,每个配置项通过一个中间表和其他配置项关联。有一对一,也有一对多的。所谓配置项一般都是一种设备,有序列号CI,ROWID来区分标识,每个设备有唯一的CI,但ROWID不唯一,ROWID是递增的,用HISTORY字段来区分是否在用。新增一个设备时是新生成一个CIROWID,HISTORY为1,表示在用。而更新时是保留当前CI,插入一条新记录,ROWID变了,把以前CI对应的那条记录的HISTORY置0,表示不在用。新增和修改时都要对和其他配置项的关系表做类似的操作,关系表存放的都是两个配置项的ROWID和HISTORY。这个我已经搞定了。        问题是删除。删除是逻辑删除,就是把自己,还有关联的其他HISTORY都置零,没有DELETE FROM。关联的其他配置项有的是级联删除,也就是要把关联的另一个配置项主表的HISTORY也置零,有的是断开关系即可,就是把中间表HISTORY置零即可。数据库有表来维护每个配置项和哪些配置项有关联,要级联删除还是断开关系,有deleteType标识。现在的问题是,删除的时候自然会先把自己删除,但是要删除对应配置项时就麻烦了。因为关联的子配置项有的是级联删除,有的是断开关系。断开关系好办,直接把对应的关系表HISTORY置零即可。麻烦的是级联删除时,子配置项也会指向其他配置项,指向那些配置项时又要判断是级联还是断开关系。这可能就需要递归来解决了。我想不到怎么办。       写几行伪代码来帮助理解吧,求大神耐心看下,帮忙出个主意。        String entityId = ""AAA"" //要删除的主配置项代号        String ci = ""XXX"";  //要删除的主配置项ci        String rowId = ""YYY"";  //要删除的主配置项rowId        UPDATE tab SET HISTORY='0' WHERE ROW_ID='rowId'; //删除        List list = findRelEntities(entityId); //查找和主配置项关联的配置项  然后我就不知道怎么办了。。。我想到的一个思路是用递归,可是不知道具体怎么实现,以前有个做法是用Stack,栈的方式。找到要级联删除的就往里面push,用的时候pop,如果栈空了,说明都删完了。现在要换一种方式,我想到的只有递归了。

解决方案

求各位大神指点,别沉了啊。。。

解决方案二:
触发器不是可以解决这个问题么?为什么要在代码里动脑筋?

时间: 2024-12-02 09:38:42

递归-一个比较复杂的级联删除问题 ,求高手指点的相关文章

c#新手,在一个xna模板中看到一个按键函数,看不懂,求前辈指点

问题描述 c#新手,在一个xna模板中看到一个按键函数,看不懂,求前辈指点 public bool IsNewKeyPress(Keys key, PlayerIndex? controllingPlayer, out PlayerIndex playerIndex) { if (controllingPlayer.HasValue) { // Read input from the specified player. playerIndex = controllingPlayer.Value;

方法-请教一个模拟登陆的问题!!求高手帮忙!!

问题描述 请教一个模拟登陆的问题!!求高手帮忙!! 模拟登陆需求具体流程是这样的: 1.访问登陆页面. 2.返回页面里 某个 input的值(用于每次登陆传参用,此值为动态的,每次打开页面都会变化). 3.模拟post登陆提交. 4.接收返回页面. ---------------- 实现过程与问题: 1.正常模拟访问页面. 2.正常返回页面,(抓取所需动态值). 3.模拟提交(问题出现在这,因为1已经访问过了页面,而3步的模拟提交还要访问一次,所有造成了所需的 input动态值发生变化了.) 问

多线程-在编写一个从谷歌下载影像图的程序,下载过程中,网速时快时慢,求高手指点

问题描述 在编写一个从谷歌下载影像图的程序,下载过程中,网速时快时慢,求高手指点 这个程序开了多线程,一张图片一张图片的下载,如果,下载失败,在While循环里,Sleep一下,直到下载成功,才退出循环,这样确保每一张图片下载成功,求高手指点啊,是不是线程开得太多了,有一百多个,还是while循环处理的问题 解决方案 100多线程没有什么意义,10个线程基本上就够了. sleep会导致当前线程休眠,看你是不是用错了. 解决方案二: 线程内处理代码如下: bool bDownLoad = CTil

求助.我拿到一个用VB.net 语言 Vs2005 和Access工具 编写的程序 可我不会运行 急求高手指点

问题描述 求助.我拿到一个用VB.net语言Vs2005和Access工具编写的程序可我不会运行急求高手指点请对这方面的有研究的高手联系QQ873498013我把程序发给你,只要告诉我如何配置运行的即可.Q币相赠大伙帮帮忙啊真得很急! 解决方案 解决方案二:安装.netFrameWork2.0解决方案三:安装2005就可以调试了解决方案四:我已经加你了

jsp问题-一个简单jsp文件检查了好几遍不知道为什么报错,求高手指点

问题描述 一个简单jsp文件检查了好几遍不知道为什么报错,求高手指点 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <% Locale locale = request.getLocale(); Calendar calendar = Calendar.getInstance(locale); int

我想写一个查询在线IP功能的软件模块,但写好后出不来效果,跪求高手指点,谢谢。

问题描述 我这个主要是想实现查询一段给定的IP地址(例如:10.0.214.5-10.0.214.90)看看有哪些是在线的并以树的形式显示出来(这段代码还没写),类似于飞鸽的显示在线用户的功能一样.这里我写的这段程序,主要分为三个部分:界面,发送验证信息的线程.接受验证信息并回复的线程.我感觉自己可能逻辑上存在问题,跪求高手指点,我编程还比较猜.希望高手援救,谢谢.//这是运行时的界面,还很简陋,实现功能后再美化importjava.awt.event.*;importjava.net.*;im

mfc中实现一个带物理效果的弹跳 (求高人指点)

问题描述 就是在mfc框架中实现一个人或者是一个球的弹跳要带物理效果!求高人指点我是新手! 解决方案 解决方案二:这个要用物理公式计算球运动的轨迹和轨迹上没一点球的速度,比如弹起来是什么角度.要弹多高,如果不考虑阻力问题算法还是比较简单的,然后根据轨迹跟球的运动速度移动球的位置,大概思路就是这样我没写过,我对画图不太熟悉,我觉得这个算法应该没有问题

jsp中使用javaBean编写一个创建数据库连接的javaBean文件,总是报错!!!!!!!!!跪求高手指点!!!!!!!!!!!

问题描述 packageuseBean;importjava.sql.*;publicclassConn{privateStringdriverManager="com.microsoft.sqlserver.jdbc.SQLServerDriver";privateStringurl="jdbc:sqlserver://localhost:1433;DatabaseName=Libary";privateConnectioncon=null;privateStat

别人给我一个asp.net项目 我打开运行 出现错误 只能有一个“master”指令。 不知道怎么回事 求高手赐教

问题描述 母版页内容如下:<%@MasterLanguage="C#"AutoEventWireup="true"CodeFile="news.master.cs"Inherits="news"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xht