论坛的规范化数据库结构

时间:2011-11-10 13:22:35

标签: mysql database relational-database normalization

论坛数据库的常见规范化结构是将所有帖子存储在表中,其中列定义了线程号。要显示线程,我们需要为线程号执行SELECT WHERE子句(按日期排序)。在这种情况下,我们为每个查询处理一个非常长的表。

这真的是存储论坛帖子和帖子的最佳方式吗?

对于像Q& A这样的股票交易项目来说更复杂,除了答案(即与论坛中的帖子相同),每个答案都可以有评论。

像stackoverflow这样的大型网站最有效的数据库结构是什么?

3 个答案:

答案 0 :(得分:2)

它远不像SO那么大,但在我的应用程序中,我知道的模型是让每个帖子都有

  • 将FK发布到其父帖子(此帖子中的根帖子为空)
  • 一个FK到根帖子(根帖子在这个列中有自己的ID,插入新的根帖子有点尴尬,但有助于查询)
  • 一个FK到他们的论坛

这样可以轻松搞定

  • 论坛的根帖(搜索空父母的帖子)
  • 线程中的所有消息(搜索具有给定根的所有帖子)
  • 以平面模式(每个日期)或树模式呈现线程(因为每个帖子都知道其父级)
  • 指定论坛中的最后帖子(搜索按论坛分组的最新帖子)

答案 1 :(得分:2)

更快的查询方式是trie和嵌套集合之间的混合,即celko-tree。例如,您可以使用线程id为嵌套集查询构建具有附加左右id的三元trie。复杂的是从这棵树插入或删除。或者你可以带一个带有哈希键的kart-trie来搜索左右。但我认为单独的嵌套可能已经足够了,因为那时id是有序的。

答案 2 :(得分:1)

如果您接受论坛是另一种形式的树结构 - 我建议使用嵌套的set或closure表来创建帖子之间的关系。 nested set closure table - 无法找到关闭的好链接 - 抱歉!

简单地存储线程和父ID可能会让事情变得有点棘手......