我正在练习搭建一个小型论坛。我发现像phpBB这样的论坛将帖子文字存储在单独的表中。
为什么?为什么不把它全部存储在同一张表中呢?
例如:thread_id,thread_date,thread_text,thread_author
为什么要这样做?你会怎么做?
我正在练习搭建一个小型论坛。我发现像phpBB这样的论坛将帖子文字存储在单独的表中。
为什么?为什么不把它全部存储在同一张表中呢?
例如:thread_id,thread_date,thread_text,thread_author
为什么要这样做?你会怎么做?
我从未深入了解过phpBB的内部结构,但可能是因为使用了全文索引。主表使用Inno-db引擎以允许事务处理等操作。而MyIsam则用于全文索引。
首先,大部分关系数据库的文件系统布局是这样的,存储任意文本或数据块过大会拖慢系统速度。由于数据通常按行存储,因此在搜索时,即使查找无关字段,数据库现在也必须跳过可变长度文本字段。
其次,将所有内容都放在一个表中会使后续需要添加数据模型变得更加困难,例如如果您需要为每个thread_id添加更多数据。
良好的数据库设计需要一些教育。您应该从http://en.wikipedia.org/wiki/Database_normalization开始。务必了解第三范式(3NF)。
InnoDB
不支持 FULLTEXT
索引,而 MyISAM
不支持事务。
我不了解 phpBB
,但可能是因为他们将表格分开的原因。
由于表格的大小限制,他们不会将文本存储在同一张表中。
这样做的好处是,即使有大量的条目,线程列表表格仍然很小,索引良好,并且扫描速度快。只有在需要时才会访问文本,使用一个快速的主键。
对于小型论坛来说,我认为这并不是必要的,因为编码开销很小。