mysql - 论坛的规范化数据库结构

标签 mysql database relational-database normalization

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

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

stockexchange 项目这样的问答比较复杂,因为除了答案(即与论坛中的帖子相同)之外,每个答案还可以有评论。

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

最佳答案

它远没有 SO 那么大,但在我的应用程序中,我选择的模型是让每个帖子都有

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

这样可以轻松获取

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

关于mysql - 论坛的规范化数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8080144/

相关文章:

PHP/MYSQL显示数据库

php - 将 CURL 响应存储在 MySQL 数据库中会导致列开头出现问号

mysql - 查找存储在 MySQL 行中的日期,在一个查询中查找该日期之后的所有条目

安卓在线动态数据库

SQL 脚本不创建表

mysql - 数据库设计 : saving Google Maps data

mysql - Mysql中如何通过另一行的另一列更新一行的一列的内容

jquery - 查询三个表

mysql - 用户表 - 一张或两张表?

mysql - 使用列中不同值的数量作为选择条件