【问题标题】:Recursive Table How Reference To Load Data?递归表如何引用加载数据?
【发布时间】:2011-03-30 11:44:51
【问题描述】:

我计划在我的数据模型中使用递归表,这样我就可以支持数量不定的可以生活在父母之下的孩子。我的例子是一个目录,我不知道我的小节在一章下会有多深。

我遇到的问题是人们在定义递归表后使用什么技术来填充数据库?我的意思是,如果我有一个引用章节 -> 节 -> 小节的项目列表......当我将章节、节和小节加载到模型中时,我需要标识层次结构的最低级别并分配我正在加载的项目的该值(外键 - 我会假设),以便我始终可以获得有关该项目的所有信息。

例如:

项目:2A-GHI:章节:2 小节:A 小节:GHI

如果我像

那样加载我的数据
ID|TOCID|TOC_VALUE|PARENT_ID  
1|Chapter|2|-1  
2|Section|A|1  
3|SubSection|GHI|2    

如何将项目绑定到 GHI,以便我可以将 FK 设置为该项目的递归表? 您是否使用所有三个值作为键并将其设置为表中的另一列,以便在加载时可以识别最低级别?

像这样:

ID|TOCID|TOC_VALUE|PARENT_ID|Key  
1|Chapter|2|-1|2  
2|Section|A|1|2_A  
3|SubSection|GHI|2|2_A_GHI

我可以加载递归表并且我正在使用 CTE 来递归数据,但我不确定加载递归数据并将该数据绑定到模型中的最佳方法是什么,以便我的项目具有 FK目录数据。

【问题讨论】:

    标签: sql tsql sql-server-2008


    【解决方案1】:

    您需要一列作为该行的父 ID。

    ID|TOCID|TOC_VALUE|parent 
    1|Chapter|2|0
    2|Section|A|1 
    3|SubSection|GHI|2
    

    parentID 为 0 或 null 表示它是根(章)节点

    【讨论】:

    • 感谢贝丝,我不小心把那块放在外面了....只是真的坚持将项目绑定到最低级别并使用该目录值作为我的项目表中的 FK。
    • 我认为您需要在创建 TOC 之前加载所有节点。如果您将所有行都传递一次,则无需额外引用即可构建它。
    • 到目前为止我所做的是为目录值构建“键”,我可以与我的项目对齐,这样当我加载我的项目时,我可以看到目录中的最低级别是什么它们对齐的数据,因此我可以从 TOC 表中获取 ID 并将其用作我的行项目数据中的 FK。不知道还能怎么做。
    • 应该可以。如果您想出/找到更好的想法,您可以随时改进它。
    猜你喜欢
    • 2020-10-11
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2021-05-22
    相关资源
    最近更新 更多