前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目中如何设计通用的评论模块

项目中如何设计通用的评论模块

作者头像
猿天地
发布2018-04-03 12:37:32
2K0
发布2018-04-03 12:37:32
举报
文章被收录于专栏:猿天地

转载:猿天地 链接:http://cxytiandi.com/blog/detail/2289

猿天地在做完博客功能后,就有小伙伴提出了文章下不能评论啊,怎么跟原作者交流呢?

刻不容缓,得马上加上评论以及回复的功能,由于太忙了,上周2天和这周1天,总共花了3天时间基本上是把这块的功能做完了,在这里分享下实现的过程以及数据库表的设计。

设计这种功能时一定要考虑通用性,现在是对文章的评论及回复,后面别的评论是不是直接可以复用代码。

总共2张表,评论和评论的回复。

代码语言:javascript
复制
create table Comment(
  id int(11) not null auto_increment,
  content varchar(500) not null comment '评论内容',
  addTime datetime not null comment '评论时间',
  commentObj varchar(20) not null comment '评论对象(博客,源码,问题)',
  commentObjUserId int(11) not null comment '评论对象用户ID',
  commentObjId int(11) not null comment '评论对象ID',
  commentUserId int(11) not null comment '评论用户ID',
  PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 comment='评论表';
代码语言:javascript
复制
create table CommentReply(
  id int(11) not null auto_increment,
  commentObj varchar(20) not null comment '评论对象(博客,源码,问题)',
  commentObjId int(11) not null comment '评论对象ID',
  commentId int(11) not null comment '评论ID',
  content varchar(500) not null comment '回复内容',
  addTime datetime not null comment '回复时间',
  replyCommentUserId int(11) not null comment '回复评论的用户ID',
  replyUserId int(11) not null comment '回复用户ID',
  PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 comment='评论回复表';

在评论表中有commentObj评论对象,用这个来区分是对什么的评论,博客,源码等等。

张三评论李四的文章,那么此时有一条评论数据

张三 李四 文章ID 评论内容 评论时间 博客

李四回复张三的评论,此时就是回复的数据了

李四 张三 文章ID 评论ID 回复内容 回复时间 博客

此时要查询文章下面的所有评论就直接可以查评论表

代码语言:javascript
复制
select * from Comment where commentObj='博客' and commentObjId='文章ID';

查询评论下的所有回复直接查回复表

代码语言:javascript
复制
select * from CommentReply where commentId = '评论ID';

要查询这篇文章下总共有多少评论(现在基本上评论的回复也算是一条评论)

做法一

这样的话我们需要查2次,先根据文章ID查询评论中的数量

然后根据所有的评论ID去去做in查询回复的量,加起来得到总的量

做法二

先根据文章ID查询评论中的数量

然后根据commentObj,commentObjId,去查回复表,这样就不用in查询了

这就是为什么我要在回复表中也加上commentObj,commentObjId这2个段,存储冗余的数据,对查询来说更方便。

做法三

直接在文章中加个评论数量的字段,每次添加评论以及回复的时候累加评论量的字段,这种在查询显示的时候非常方便,也快,但是添加的时候需要去维护这个字段。

如果使用第三种,则达不到通用的效果了,因为你绑定了你的文章表,后面做源码评论那也要绑定源码表,在源码评论的时候你要去更新源码中的数量,比较耦合,但是对于显示来说性能是最好的。

我个人比较推荐用第二种,耦合低,通用,当然在打数据量的时候统计次数会比较慢,这个可以用替代的方案来实现,加缓存之类的 。

下面给大家看下猿天地上面的评论效果

最下面是直接评论文章的,然后在每条评论中可以回复评论具体的内容。

基本的需求还是可以满足的....

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 张三 李四 文章ID 评论内容 评论时间 博客
  • 李四 张三 文章ID 评论ID 回复内容 回复时间 博客
  • 做法一
  • 做法二
  • 做法三
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档