YT的“帖子编辑记录”数据组织结构

是基于动网论坛的,所以就在动网的数据库上敲敲打打了
这个功能就是,在某个帖子被用户编辑以后,能显示出编辑的记录,如图

下面是具体的数据组织

因为要记录每一次的操作,而每一个帖子会对应多次操作(用户多次进行编辑),这样很正常地就会想到新建一张表来保存每一次的编辑
数据不复杂,表也很简单,一个id字段,一个时间,一个对帖子进行修改的用户的id就可以了。不过有一个问题,在不同的Dv_bbs表中,帖子的AnnounceID都是从1开始的,所以不能只要AnnounceID来标识帖子,还要加上一个TopicID,这样才能标识出一个帖子。
其实可以再增加一个字段保存对帖子进行修改操作的用户的用户名,这样在查询的时候就不必连表查询了。虽然这样做不符合关系型数据库的要求,但是在实际上这样能提高执行效率(其实严格来说这样的数据组织也可以认为是符合关系型数据库的要求的,具体和本文没关系,不说了)。我观察了一下连表查询的SQL执行计划,发现连接过程消耗的资源比想像中的要少,绝对来说效率也不低,于是我就让YT用连表查询了。
每一个帖子都有可能被编辑,默认情况下YT每页显示10个帖子,这样就要对编辑记录表进行10次查询,太费时间了。虽然也可以一次性将10个帖子的编辑记录都取出来,但是这样在程序处理上会比较麻烦,偶很懒,所以偶不干。
换一个方法,动网显示帖子的时候会先把每一个帖子的数据转换成XML格式,通过XML进行处理以后,再使用XSLT进行输出。这正好给偶提供了遍历。偶给Dv_bbs表加上了一个字段编辑次数“EditTImes”,默认值0,以此记录每一个帖子被编辑了多少次。在动网将帖子转换成XML以后,偶就通过简单的XML操作来判断帖子是否被编辑了,如果被编辑了的话就去查询编辑记录表。整个论坛被编辑过的帖子是不多的,一个主题里几乎不会有被编辑过的帖子,而一个主题内的10个回复内有好几个回复被编辑过的情况更是罕见。我们仅仅在帖子的修改次数大于0时才查询,这样就大大减少了查询编辑历史表的次数。现在偶估计,显示10个主题能查询一次编辑历史表就算不错了。

最后就简单了,查询到数据以后用HTML格式化一下,直接添加到帖子内容里就行了

最后放两个图,一张是SQL执行计划,一张是数据表

本文发表于 樱町专栏,并添加了 , , 标记。保存永久链接到书签。

发表评论

电子邮件地址不会被公开。