上面是我的数据库表结构的样子。 B指A,C指A,D指B等。现在,我正在运行一个脱机作业,它会删除这些表上的所有约束,并通过在我的java应用程序中评估它们来删除一些记录。例如,从A WHERE id>中删除20 ,将被翻译成一堆选择。
- SELECT B.ID,A.ID FROM B,A WHERE B.FKEY = A.ID
- SELECT C.ID,A.ID FROM C,A WHERE C.FKEY = A.ID
- SELECT D.ID,A.ID from D,B,A WHERE B.FKEY = A.ID AND D.FKEY = B.ID
- ...等......
- ..最后.. SELECT H.ID,A.ID来自A,B,D,F,H WHERE B.FKEY = A.ID和D.FKEY = B.ID和F.FKEY = D.ID AND H.FKEY = F.ID UNION SELECT H.ID,A.ID from A,C,E,G,H WHERE C.FKEY = A.ID AND E.FKEY = C.ID AND G.FKEY = E.ID AND H.FKEY = G.ID
检索该数据并验证A.ID> 20代码,然后删除不需要的是我的应用程序如何执行删除(我知道它可能听起来有点疯狂,但这是它应该如何工作)。
现在我在这里的问题是这个......我怎么做这个通用的?我的挑战是确定像" H"具有多重继承(或者说在ER图中形成循环)。我已经尝试过研究图论,但这让我感到很困惑 - 我需要处理太多的信息。
简而言之,我想在ER图中识别周期并为这些表构造UNION查询。