我想为我的网站创建一个类别和子类别的系统。以StackOverflow标签系统为例,我想表示一个层次结构:
ProgrammingConcepts
Functions
FlowControl
Branching
Looping
Datastructures
List
Tree
用户应该能够搜索此树,以便用户可以搜索FlowControl
并获取标记为FlowControl
,Branching
或Looping
的所有文章。
我应该如何在我的数据库中表示这一点?显而易见的解决方案是有一个这样的表:
Categories
CategoryId int <PK>
ParentId int <Nullable>
CategoryName
我觉得这可能很难查询。我刚刚开始学习asp.net mvc - 特别是,实体框架系统似乎比我以前使用数据库的方式更好。这对树结构有好处吗?
答案 0 :(得分:2)
从数据库设计的角度来看,这种设计是最跨数据库兼容的 - 只需在ParentId列上粘贴FK约束即可引用CategoryId。
在仅限SQL Server的环境中,从SQL Server 2008开始,有一个hierarchyid数据类型专门用于存储分层数据。
我不确定它是否仍然如此,但我认为实体框架不支持hierarchyid,但是可能需要一种解决方法来沿着这条路线前进。 例如HierarchyID in Entity Framework not working