有说凡所有相皆是虚幻,此说所有相皆是数据,有人的地方就有江湖,有数据的地方就有关系
Discuz从小小的论坛现在发展成一个庞大的门户系统,程序结构越发复杂庞大。数据库操作也从简单的CRUD变得日益复杂的关系查询。数据之间的关系变得越来越紧密,越来越复杂,此时功能的添加,架构的改动,数据库结构产生的影响也越发重要。如果项目主管,开发人员没有一定的数据库知识,没有对“数据”的一定了解,那么设计出来的东西要么不符合逻辑,要么不实用。
第一品:帖无所住,何生其心
discuz X3.0在设计上一个大变化是对于主题中跟帖被删除后其所占用楼层并不消失后续楼层并不自动变化楼层数值让楼层数字连续,而是跟帖内容显示成“无效楼层,该帖已经被删除”。
我估计此设计初衷是解决以前设计中删除跟帖后产生的一系列关联问题,假如删除了5楼回帖,那么删除前的6楼在5楼帖子删除后将会显示成5楼,其后所有跟帖的楼层也跟着减小一位。若后面有跟帖是引用5楼发布那么帖子中指向(原)5楼的url链接将会变得无效。dz开发人员觉得要解决这个逻辑问题,于是就在2.5上面实现了帖子删除保留楼层的功能。并且这个功能还可以与2.5另外一个新设计
<div class="quote"><blockquote>post表的优化 问题:
高楼贴的性能问题 limit 187460, 20 方法:
增加position字段记录楼层,修改主键为:PRIMARY KEY (tid, `position`)联合主键,其中position为auto_increment;
pid字段保留,仍然是auto_increment(单独的一个表),保持唯一,其值在一个单独的表中记录,保留此字段的主要目的是可以让原程序的基本不用做修改;
使用方法:
SELECT * FROM pre_forum_post WHERE tid=424 AND position>=$start AND position |