我有一个数据库,其中包含使用邻接列表模型存储的类别层次结构。
层次结构为 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 的分层数据模型之类的文章和演示文稿,但它只包含针对单个节点的插入查询,而且我要花很长时间才能创建这样的树。
谢谢。
编辑:
CategoryHierarchy 表中的 RelID 纯粹是为了主键,它与 Category 表的节点 ID 无关。
同样通过闭包表,我的意思是这样的表:
CREATE TABLE ClosureTable (
ancestor int NOT NULL,
descendant int NOT NULL,
[length] int NOT NULL,
)
其中前两列是复合主键,并且分别是 Category.id 的外键。