尝试设计数据库,我遇到了一个严重的问题。我有一个节点表,并希望从这些节点创建一个树。
节点只能定义一次,但可以在树中多次使用(所有子节点都与同名的任何其他节点相同)
为此,我使用了一个名为branches的表,其中定义了父节点,并且子节点的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}