sql-server-2008 - 在 SQL Server 中表示树?

标签 sql-server-2008 entity-framework

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

ProgrammingConcepts
    Functions
    FlowControl
        Branching
        Looping
    Datastructures
        List
        Tree

用户应该能够搜索此树,因此用户可以搜索 FlowControl 并获取标记为 FlowControlBranching循环

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

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

我觉得这可能很难查询。我刚刚开始学习 asp.net mvc - 特别是, Entity Framework 系统似乎比我以前使用数据库的方式工作得更好。这与树结构配合得很好吗?

最佳答案

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

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

我不确定情况是否仍然如此,但我相信 Entity Framework 不支持hierarchyid,因此可能需要一种解决方法来走这条路线。 例如HierarchyID in Entity Framework not working

关于sql-server-2008 - 在 SQL Server 中表示树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502861/

相关文章:

c# - 动态列出数据库表中的字段

sql-server - 如何在 SQL Server 中进行批量更新插入?

sql-server-2008 - 如何在动态枢轴内舍入数字?

sql - 创建规则来限制sql server表中的特殊字符

c# - MVC 4 Beta - 在写入本地名称为 'type' 的属性后,您必须写入属性 ='object' '__type'

c# - ToList() 与 EF4 的高锁争用和低性能

sql - 如何使同一项目的多次出现与第一次出现的值不同?

c# - Entity Framework 4 约定

asp.net - Entity Framework MVC 页面加载缓慢

linq - 无法将原始 SQL 查询映射到 DataRow