我想为我的网站创建一个类别和子类别系统。以 StackOverflow 标签系统为例,我想表示一个层次结构,如下所示:
ProgrammingConcepts
Functions
FlowControl
Branching
Looping
Datastructures
List
Tree
用户应该能够搜索此树,因此用户可以搜索 FlowControl
并获取标记为 FlowControl
、Branching
或循环
。
我应该如何在我的数据库中表示这一点?显而易见的解决方案是有一个像这样的表:
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/