Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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
Php 你将如何构建一个论坛';s数据库模式?_Php_Sql_Structure - Fatal编程技术网

Php 你将如何构建一个论坛';s数据库模式?

Php 你将如何构建一个论坛';s数据库模式?,php,sql,structure,Php,Sql,Structure,我正在建立一个练习的小论坛。我看到像phpBB这样的论坛将线程文本存储在一个单独的表中 为什么??为什么不把它们都放在同一张桌子上呢 类似于:thread\u id、thread\u date、thread\u text、thread\u author 为什么要这样做?你会怎么做?由于表格的大小,它们不会将文本存储在同一个表格中 这样,即使有非常多的条目,线程列表表也很小,索引良好,扫描速度也很快。只有在必要时才能使用快捷的主键访问文本 对于小型论坛,我认为这是不必要的,因为有一点编码开销。除了

我正在建立一个练习的小论坛。我看到像phpBB这样的论坛将线程文本存储在一个单独的表中

为什么??为什么不把它们都放在同一张桌子上呢

类似于:
thread\u id、thread\u date、thread\u text、thread\u author


为什么要这样做?你会怎么做?

由于表格的大小,它们不会将文本存储在同一个表格中

这样,即使有非常多的条目,线程列表表也很小,索引良好,扫描速度也很快。只有在必要时才能使用快捷的主键访问文本


对于小型论坛,我认为这是不必要的,因为有一点编码开销。

除了Julien的出色回答之外,将帖子移动到其他线程(比如管理员或版主)也是很常见的。将文本放在“post table”中有助于支持这一点。

InnoDB
不支持
全文
索引,
MyISAM
不支持事务


不知道
phpBB
,但可能这就是他们分开表格的原因。

从未查看过phpBB内部,但可能是因为全文索引。InnoDB引擎的主表允许事务和什么不允许。MyIsam用于全文索引。

首先,大多数关系数据库的文件系统布局是这样的,存储大量任意文本或数据可能会降低系统速度。由于数据通常是按行存储的,因此在执行搜索时,数据库现在必须跳过可变长度的文本字段,即使在查找不相关的字段时也是如此

其次,如果需要为每个线程id添加更多数据,那么将所有内容放在一个表中会使以后添加到数据模型变得更加困难


设计好数据库模式需要一些教育。你应该从一开始。一定要理解第三种标准格式。

我不知道为什么要这样做,但我可以想象的一个原因是优化对帖子元数据(日期、作者等)的搜索和检索

(Joel总是对的!;-)数据库将数据存储在固定长度字段中,这些字段组成固定长度的记录,因此,只需将指针增加记录的字节长度,就可以轻松地从一行跳到下一行。但是用于存储帖子文本的大型文本字段不能有固定的大小,因为帖子的长度在很大范围内变化,创建足够大的固定长度存储以容纳所有帖子将浪费大量空间。这意味着,当您想要检索大量帖子的元数据时,将帖子文本与其他信息存储在同一个表中会大大降低速度,每次有人查看主论坛页面时都是如此


要想两全其美,最好的办法是将固定长度字段(即除post文本外的所有字段)放在一个表中,将可变长度字段(即post文本)放在另一个表中。

我在网上找到了这个很酷的模式


(来源:)

对于任何基本论坛的数据库模式来说,这似乎都是一个不错的开端


我知道这很旧,但我想我会把这篇文章发布给任何想再次发现这个问题的人。

文本列在两个引擎中都存储在行外,这几乎不会影响表的大小。我同意——我认为马里奥的解释是正确的。我不同意,这个话题在这里和其他网站上已经被广泛讨论过@barfoon,这不是创建一个论坛,他想知道为什么phpBB会这么做。我认为这是一个好问题。现在,如果他问,构建论坛的最佳方式是什么,我会同意你的看法。“你认为什么是最佳方式?”听起来并不是phpBB特有的。嗯……phpBB,至少在3.0之前的版本中,对所有表都使用MyISAM。这可能对一些(比如说“遗留”或“原始”)DBMS是正确的,但对大多数现代DBMS来说几乎不是。链接已经失效了