2012-02-29 60 views
1

我想爲我的網站創建一個類別和子類別的系統。服用StackOverflow的標籤系統爲例,我要代表像一個層次:在SQL Server中表示樹?

ProgrammingConcepts 
    Functions 
    FlowControl 
     Branching 
     Looping 
    Datastructures 
     List 
     Tree 

用戶應該能夠搜索到這棵樹,因此用戶可以搜索FlowControl並獲得任何物品標記爲FlowControlBranchingLooping

我應該如何在我的數據庫中表示這個?顯而易見的解決方案是有這樣一個表:

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

我覺得這可能很難查詢雖然。我剛剛開始學習asp.net mvc - 尤其是,實體框架系統似乎比我以前使用數據庫的方式要好得多。這是否適合樹型結構?

+0

這樣做。通用表表達式可以讓您執行遞歸查詢來遍歷樹。 – HABO 2012-02-29 16:35:44

回答

2

從db設計的角度來看,這種設計是最能夠跨數據庫兼容的 - 只需在ParentId列上添加一個FK約束來引用CategoryId。

在SQL Server專用的世界中,從SQL Server 2008起,專門有一個hierarchyid數據類型以便於存儲分層數據。

我不確定它是否仍然如此,但我相信實體框架不支持hierarchyid,儘管如此可能需要一種解決方法才能沿着該路線行進。 例如HierarchyID in Entity Framework not working

+2

直到EF 5和.net framework 4.5纔會正式支持HierarcyID。雖然,我在EF 4中使用heierarcyID。請參閱http://stackoverflow.com/questions/3347860/is-there-a-practical-way-to-use-the-hierarchyid-datatype-in​​-entity-framework-4 – EBarr 2012-02-29 16:45:14

+0

@EBarr - 感謝您的信息! – AdaTheDev 2012-02-29 16:51:55