我需要在 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。