2008-12-12 100 views
2

我想建立一個電子教學網站的線程論壇(opensource asp.net mvc ofcourse,雖然這對這個問題無關緊要)。線程論壇的最佳DB結構是什麼?

什麼應該是數據庫結構,這將有助於檢索論壇張貼與最佳性能?我不會拒絕。因爲它可能隨着檢索行數的變化而變化。

此外,我應該能夠鏈接一個特定的線程與另一個線程。例如。顯示「相關論壇鏈接」。

我使用SQL Server 2005的

下面是我的想法(無恥地把它從) Stephen Walther Excellent blog post

表結構:論壇

· Id 
· ParentId (null if this is the first message) 
· ParentThreadId (Identify message in the same thread) 
· Author 
· Subject 
· Body 
· PostedDate 

表:RelatedForum

· ForumId 
· RelatedForumId 

Ideas /建議表示歡迎。

在此先感謝。

+0

感謝您的回覆。我仍然會繼續提出這個問題以獲得更多的意見,因爲我還有一些時間來完成整體設計。 – 2008-12-12 15:28:46

回答

1

當你有非遞歸自上而下(論壇 - >線程 - > Postings)檢索你的數據記住最常見的用例,比這個表結構是一個好的開始,因爲這將主要導致WHERE ParentId = @SomeId查詢。

當你希望能夠計算諸如「這個論壇/主題中存在多少張貼子」之類的東西時,你將很容易發現你無法分辨哪些ID嵌套在哪個其他ID中的情況(即孩子的關係不見了)。

您可以通過將ThreadIdForumId冗餘保存到每個發佈中來解決這個問題。那麼你就可以問SELECT COUNT(*) FROM Postings WHERE ThreadId = @SomeId

對於給定的發佈,這些ID不可能發生變化,因此冗餘不會立即創建插入/更新異常,但是您應該有適當的過程來更新所有與正確ID相關的發佈,以防您決定移動東西。

對於hierarcical數據存儲到RDBMS的,你可以看看到這個問題的答案更先進的方式(這是我自己的,「不撈了贊成票」意):"What is the most efficient/elegant way to parse a flat table into a tree?"

+0

這看起來很有趣。我會看看這個。 – 2008-12-12 08:53:48

0

表:郵政

· ThreadId 
· UUID 
· Author 
· Subject 
· Body 
· PostedDate 

表:螺紋

·ThreadID 
·Forum 
·UUID 
·Author 
·Subject 
·Body 
·PostedDate 

只有緩存和索引MySQL服務器上。否則,這個結構不是最好的,但與所述的服務器,這使得易於計數和全文搜索

+1

如果你解釋爲什麼會更有幫助! – eliego 2008-12-12 09:35:07

0

看起來不錯。我會簡單地調用ThreadThreadID。添加ForumID不會傷害,尤其是出於計算目的。

您應該添加AuthorName。據推測作者是你的用戶表的ID。拉現在的用戶名並附上。這節省了您在顯示線程或響應列表時從用戶表中查找50個名稱的麻煩。同樣,如果用戶從系統中刪除,則無法再查找該名稱。當然不希望從樹中刪除這些節點。

+0

是的。作者是來自用戶表的ID。是的,我同意ThreadId的名字。 – 2008-12-12 15:24:30

相關問題