悬赏分:50 浏览:206 次
请各位哥哥,叔叔,伯伯慢慢看我的问题。小鱼在此先谢关注问题的人!
我的项目中要动态的生成表,表结构,表关系还有表中的信息。。这些都是从XML里面解析得到的,如下面的记录表关系的XML片段:<Reference KeyField="MZT006" KeyTable="MZT002" RefField="MZF002" RefTable="MZT001" /><Reference KeyField="MZF010" KeyTable="MZT003" RefField="MZT008" RefTable="MZT002" />
通过上面的这两个属性信息可以得到这三张表之间的约束关系:MZT003(PK)->MZT002(FK) MZT002(PK)->MZT001(FK) 接下来因为要在MZT001等这三张中插入解析出来的数据 就要按照约束的优先级来一条条的插 否则执行不了。。。。。
问题就是因为传递的表关系可能很复杂,插入数据的时候又必须按照约束关系来,必须从最高的主键表开始插起 否则行不通(小鱼试过N此了)
所以:用什么方法能够把这些表的关系排序出来啊!!!
|
我想你之所以要排序,是希望能顺畅的将若干有“约束”关系的数据插入已经含有约束的各表格中。这个问题貌似不简单。这与进程间“资源竞争”颇有相似之处。 建议使用 k 叉树,而优先插入的表,就是树的叶节点。你所示范的关系表达为树就是 MZT003(PK)->MZT002(FK)->MZT001(FK) 那么你在树建立好之后,做的事情如下: 1,保证没有“回旋树”,或者类似“死锁”的情况发生,否则你的问题该无解了吧。比如(注意最后的节点就是最前的节点) MZT003(PK)->MZT002(FK)->MZT001(FK)->MZT003(PK) 2,插入数据时,由叶节点为最高优先级进行插入;或者,插入父节点 A 之前,必须保证 A 的子节点已经全部完成了插入操作。如此递归!
补充: 是不是我说的太靠普了?或者说一个一对多的有向图。一个父节点可以有多个子节点,一个子节点可以有多个父节点(可以仿照链表实现)。 A A1 / \ / B C / \ / \ D E F G B 为 A 的子节点,C 为 A,A1的子节点…… 上图中,只有 D、E、F、G完成了插入等操作,才能轮到B、C插入,最后是A、A1 实际的图肯定比这个复杂,重要的是优先权计算方式。 你可以: 1、首先就已有的约束关系,建议一个完整的图。 2、就当前你要进行的批量操作,对完整图进行“截图”,取出当前涉及到的各节点(表)。 3、从子节点开始依次插入。 4、搞定。 最后顺便提一下,不是我爱抱怨,博问“回答”是支持html等样式了。可是评论的时候又丢失了空格。我是反映去呢,还是默许它呢!唉! |
|
3个月前 西下普 : 这么复杂啊???K叉树是什么??? 谢谢给出解决思路,非常感谢。 我再慢慢研究下,我哭。。。。。 |
|
3个月前 陛下 : 是不是我说的太靠普了?或者说一个一对多的有向图。一个父节点可以有多个子节点,一个子节点可以有多个父节点(可以仿照链表实现)。 A A1 / \ / B C / \ / \ D E F G B 为 A 的子节点,C 为 A,A1的子节点…… 上图中,只有 D、E、F、G完成了插入等操作,才能轮到B、C插入,最后是A、A1 实际的图肯定比这个复杂,重要的是优先权计算方式。 你可以: 1、首先就已有的约束关系,建议一个完整的图。 2、就当前你要进行的批量操作,对完整图进行“截图”,取出当前涉及到的各节点(表)。 3、从子节点开始依次插入。 4、搞定。 |