一个或两个论坛表?

时间:2013-01-01 10:58:37

标签: mysql database forum

我正在建立一个论坛,我想知道我是否应该有一个表格,我存储所有主要帖子,然后在另一个表格中存储所有答案。

我总是将所有内容存储在一个表中,使其向东计数并让用户评论每个帖子(另一个表中的注释)。

我该怎么办?优点和缺点?试图谷歌,但没有找到任何东西。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

这是非常主观的,因为它取决于您的需求和意图。让我解释一下......

论坛,例如它们,通常采用两种形式中的一种。它们有时以主帖的形式出现,随后发表评论。因此,主要帖子逻辑上将存在于一个表中,而评论则存在于另一个表中。 Facebook和Stack Exchange网站就是这方面的例子。

在其他情况下,内容可以采用评论列表的形式。更传统的论坛采用这种形式。在要求层次结构而不是纯日期排序的情况下,单表方法更有意义。

在这两种情况下,都可以通过创建parentchild列来处理层次结构。

我个人的偏好是使用一个表,除非主帖包含评论不需要的附加数据的顺序。这只是一个效率问题,但你肯定不希望数千或数百万行NULL s占用空间无济于事。要区分帖子和评论,您可以使用任意数量的逻辑方案,例如不同的ID或标志列。

最终,这样的架构情况取决于相关项目。两种方法都有优点和缺点。在以后添加复杂性的情况下,使用多个表格可以为您的项目提供更多的“未来验证”。

答案 1 :(得分:0)

我通常遵循规则every type of dataset gets a own table。这样你就可以干净地定义关系

您有类似

的类型
  • userTypes(例如来宾,用户,mod,管理员)
  • 用户(有一个userType_id)
  • 帖子(有一个user_id)
  • 答案(有一个post_id)
  • 评论(有一个post_id,有一个answer_id)

由于可以为帖子和答案添加评论,因此您可以添加两个桥接表来定义此关系。

  • comment_to_answer(有一个comment_id,有一个answer_id)
  • comment_to_question(有一个comment_id,有一个question_id)

如果您将帖子和答案都保存到一个表中,则帖子表需要引用自己来定义帖子 - 回答一对多关系,这会使查询更复杂。

如果您希望能够级联,帖子可以有答案,答案可以有答案等等,您可能会更好地使用一个帖子表和一个指向帖子ID的parent_id

希望这有帮助。

答案 2 :(得分:-1)

嗯 - 因为一个帖子可以有多个答案,我会去一个单独的表。

临:

  • 少量冗余信息
  • 可以独立于帖子
  • 更新/删除答案
  • 更容易计算问题/答案

N

  • 非(好吧,也许您需要为某些查询加入表格,但嘿,这并不算真正算在内)

您在另一张表中已有评论的原因相同......