隣接リスト モデルを使用して格納されたカテゴリの階層を含むデータベースがあります。
階層は 3 レベルの深さ (架空のルート ノードを含まない) で、約 1700 のノードが含まれています。2 番目と 3 番目のレベルのノードは、複数の親を持つことができます。次のように、追加のテーブルが多対多の関係に使用されます。
CREATE TABLE dbo.Category(
id int IDENTITY(1,1) NOT NULL,
name varchar(255) NOT NULL,
)
CREATE TABLE dbo.CategoryHierarchy(
relId int IDENTITY(1,1) NOT NULL,
catId int NOT NULL,
parentId int NOT NULL,
)
(データの整合性などのために) 推移的クロージャ テーブル メソッドの使用に移行した場合、クロージャ テーブルの値を生成する実行可能な比較的簡単なクエリはありますか? (SQL Server 2005 を使用)
Bill Karwin のModels for hierarchy dataなどの記事やプレゼンテーションを調べましたが、単一のノードに対する挿入クエリしかなく、そのようなツリーを作成するには永遠に時間がかかります。
ありがとう。
編集:
CategoryHierarchy テーブルの RelID は純粋に主キーのためのものであり、Category テーブルのノード ID には関係ありません。
また、クロージャーテーブルとは、次のようなテーブルを意味します。
CREATE TABLE ClosureTable (
ancestor int NOT NULL,
descendant int NOT NULL,
[length] int NOT NULL,
)
最初の 2 つの列は複合主キーであり、Category.id に対する個別の外部キーです。