在我的程序中,我将条目存储在表格中,条目也可能包含子项目。
id uniqueidentifier not null primary key
parent uniqueidentifier null (another id from the same table or null)
... other columns
在此表中,只有顶级条目可以包含子项,因此无法进行循环或递归。
如果删除条目,我还想删除子项。不幸的是,没有办法将ON DELETE CASCADE添加到这样的表中:
Introducing FOREIGN KEY constraint '...' on table '...' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
但是,我可以在delete语句中指定一个附加条件来执行相同的操作:
DELETE FROM mytable WHERE id = @GUID OR parent = @GUID
问题是父列未编入索引。此列还有许多重复值(NULL),据我所知,与索引一起使用时,重复值非常糟糕。我想知道,这个问题的最佳解决方案是什么
PS
我无法创建另一个表来存储子项。