以上是我的数据库表结构的样子。B指A,C指A,D指B,以此类推。现在,我正在运行一个离线作业,该作业删除这些表上的所有约束,并通过在我的 java 应用程序中评估它们来删除一些记录。例如,从 A WHERE id > 20 删除,将被翻译成一堆选择。
- 从 B、A 中选择 B.ID、A.ID,其中 B.FKEY = A.ID
- 从 C、A 中选择 C.ID、A.ID,其中 C.FKEY = A.ID
- 从 D、B、A 中选择 D.ID、A.ID,其中 B.FKEY = A.ID 和 D.FKEY = B.ID
- ... 很快..
- .. 最后.. 从 A、B、D、F、H 中选择 H.ID、A.ID,其中 B.FKEY = A.ID AND D.FKEY = B.ID AND F.FKEY = D.ID AND H。 FKEY = F.ID UNION SELECT H.ID, A.ID FROM A,C,E,G,H 其中 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 查询。