2

我需要在 SQL Server 中建模一个 n 级树。我最初做了这样的事情来创建一个Node表:

[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[ParentId] [bigint] NULL

这是一个自引用表,其中ParentID引用回另一个Node实体(根有一个null ParentID)。但是当我尝试向级联删除添加约束时,我得到了这个:

Introducing FOREIGN KEY constraint 'FK_dbo.Nodes_dbo.Nodes_ParentId' on table 'Nodes' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

根据我的阅读,这似乎是 SQL Server 中一个众所周知且合理的限制。有些人建议使用触发器来完成此操作,但如果可能的话,我更愿意避免这种情况。

所以我的问题是 - 如何在 SQL 中对 n 级层次结构或树进行建模以允许级联删除?

我正在使用 SQL Server 2012。

4

1 回答 1

1

我见过的更有效的技术之一是使集群主键成为节点的可变长度完整树路径( Richard Henderson 的帽子提示);要删除子树,只需删除一系列值。

于 2012-11-12T22:50:58.110 回答