0

试图设计一个数据库,我遇到了一个严重的问题。我有一个节点表,并想从这些节点中创建一棵树。

一个节点只能定义一次,但可以在树中多次使用(它的所有子节点都将与任何其他同名节点相同)

为此,我使用了一个名为分支的表,其中定义了一个父节点和一个带有 FK 的子节点,它们都指向节点表。

我的问题是,当一个节点被删除时,我希望分支也被删除,但是我不能将两个 ON DELETE CASCADE FK 添加到表中,因为 SQL 服务器不会让我认为这两个节点(父节点和子节点) 可能是相同的,因此不起作用,所以我得到了错误:

FOREIGN KEY constraint on table may cause cycles or multiple cascade paths

我知道这可以使用触发器来解决,但是如果我添加触发器,我不能在删除之前执行操作,因此必须执行触发器的 INSTEAD,这会弄乱我在数据库中的其他 FK,所以我会必须为我的大型数据库中的每个 FK 编写它们。

我想知道是否有比我做的更好的数据库设计方法?还是我只需要忍受它并在所有地方使用触发器

谢谢

编辑:

设计成这样:

Node {id, name, is_root}
Branch {id, node_parent_id, node_child_id}
4

0 回答 0