小编Adn*_*nan的帖子

如何使用邻接列表中的数据创建闭包表?

我有一个数据库,其中包含使用邻接列表模型存储的类别层次结构.

层次结构深度为3级(不包括假想的根节点),包含大约1700个节点.第二级和第三级的节点可以有多个父节点.另外一个表用于多对多关系,如下所示:

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,
)
Run Code Online (Sandbox Code Playgroud)

如果我转向使用传递闭包表方法(为了数据完整性等)是否有一个相对容易的查询,我可以执行,将生成闭包表的值?(使用SQL Server 2005)

我查看文章和演示文稿,例如Bill Karwin的分层数据模型,但只有单个节点的插入查询,我需要永远创建这样的树.

谢谢.

编辑:
CategoryHierarchy表中的RelID纯粹是为了主键,它与Category表的节点ID无关.

还有闭包表,我的意思是这样一个表:

CREATE TABLE ClosureTable (
    ancestor int NOT NULL,
    descendant int NOT NULL,
    [length] int NOT NULL,
)
Run Code Online (Sandbox Code Playgroud)

前两列是复合主键,并且是Category.id的单独外键.

sql sql-server hierarchy transitive-closure-table

11
推荐指数
2
解决办法
5833
查看次数