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 を使用しています。