递归表如何引用加载数据?

时间:2010-08-16 14:54:31

标签: sql tsql sql-server-2008

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

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

例如:

项目:2A-GHI:Chapter:2 Section:A SubSection: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到目录数据。

1 个答案:

答案 0 :(得分:0)

您需要一个列的父行ID。

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

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