2008-12-12 44 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

相关问题