Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 线程论坛的最佳DB结构是什么?_Database Design_Forum - Fatal编程技术网

Database design 线程论坛的最佳DB结构是什么?

Database design 线程论坛的最佳DB结构是什么?,database-design,forum,Database Design,Forum,当然,我想为在线学习网站opensource asp.net mvc构建一个线程论坛,尽管这对这个问题并不重要 DB的结构应该是什么,它将有助于以最佳性能检索论坛帖子?我不是说不,因为它可能会随着检索行的数量而变化 此外,我应该能够链接一个特定的线程与其他线程。例如,显示相关的论坛链接 我正在使用SQLServer2005 以下是我脑海中不知羞耻地从中取来的结构 表:论坛 · Id · ParentId (null if this is the first message) · Parent

当然,我想为在线学习网站opensource asp.net mvc构建一个线程论坛,尽管这对这个问题并不重要

DB的结构应该是什么,它将有助于以最佳性能检索论坛帖子?我不是说不,因为它可能会随着检索行的数量而变化

此外,我应该能够链接一个特定的线程与其他线程。例如,显示相关的论坛链接

我正在使用SQLServer2005

以下是我脑海中不知羞耻地从中取来的结构

表:论坛

· Id
· ParentId  (null if this is the first message)
· ParentThreadId  (Identify message in the same thread)
· Author
· Subject
· Body
· PostedDate
表:相关论坛

· ForumId
· RelatedForumId
欢迎提出意见/建议


提前感谢。

对于最常见的用例,当您考虑到非递归自上而下的论坛->线程->发布数据检索时,此表结构是一个良好的开端,因为这将主要导致WHERE ParentId=@SomeId查询

当你想计算出这个论坛/线程中有多少帖子时,你很容易就会陷入这样一种情况:你无法分辨哪些ID嵌套在哪些其他ID中,即缺少子关系

您可以通过将ThreadId和ForumId冗余保存到每个帖子中来解释这一点。然后,您可以从ThreadId=@SomeId的帖子中询问SELECT COUNT*

对于给定的帖子,这些ID不太可能改变,因此冗余不会立即产生插入/更新异常,但您应该有一个程序,在您决定移动内容时,使用正确的ID更新所有相关帖子

有关将层次数据存储到RDBMS中的更高级方法,您可以查看此问题的答案—这是我自己的,不需要查找投票:

表:Post

· ThreadId
· UUID
· Author
· Subject
· Body
· PostedDate  
表:螺纹

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

仅在具有缓存和索引的MySQL服务器上。否则,这种结构不是最好的,但有了上述服务器,这就便于计数和全文搜索。我将把ParentThreadID称为ThreadID。添加福鲁米德不会有什么坏处,尤其是为了计数


您应该添加AuthorName。假定Author是用户表的ID。提取该用户名并立即附加它。这就省去了在显示线程或响应列表时从用户表中查找50个名称的麻烦。类似地,如果用户从系统中删除,则无法再查找该名称。当然不想从树中删除这些节点。

这看起来很有趣。我来看看这个。如果你解释一下原因,会更有帮助的!对Author是用户表中的ID。是的,我同意ThreadId的名字。谢谢你的回复。我仍然会保留这个问题,以获得更多的投入,因为我还有一些时间来完成总体设计。