来自同一个表的多个“On Delete Cascade”FK

时间:2013-08-12 09:33:23

标签: sql-server database-design

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

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

为此,我使用了一个名为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}

0 个答案:

没有答案