在SQL Server中表示树?

时间:2012-02-29 16:26:37

标签: sql-server-2008 entity-framework

我想为我的网站创建一个类别和子类别的系统。以StackOverflow标签系统为例,我想表示一个层次结构:

ProgrammingConcepts
    Functions
    FlowControl
        Branching
        Looping
    Datastructures
        List
        Tree

用户应该能够搜索此树,以便用户可以搜索FlowControl并获取标记为FlowControlBranchingLooping的所有文章。

我应该如何在我的数据库中表示这一点?显而易见的解决方案是有一个这样的表:

Categories
    CategoryId int <PK>
    ParentId int <Nullable>
    CategoryName

我觉得这可能很难查询。我刚刚开始学习asp.net mvc - 特别是,实体框架系统似乎比我以前使用数据库的方式更好。这对树结构有好处吗?

1 个答案:

答案 0 :(得分:2)

从数据库设计的角度来看,这种设计是最跨数据库兼容的 - 只需在ParentId列上粘贴FK约束即可引用CategoryId。

在仅限SQL Server的环境中,从SQL Server 2008开始,有一个hierarchyid数据类型专门用于存储分层数据。

我不确定它是否仍然如此,但我认为实体框架不支持hierarchyid,但是可能需要一种解决方法来沿着这条路线前进。 例如HierarchyID in Entity Framework not working