1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 帖子—评论的数据库设计和代码实现(思路记录)

帖子—评论的数据库设计和代码实现(思路记录)

时间:2021-01-05 07:06:03

相关推荐

帖子—评论的数据库设计和代码实现(思路记录)

由于本人的毕业设计需要开发一个类似于百度贴吧的功能模块,从这么多年来贴吧的使用体会来看,其最基础、最主要的功能为:发帖——评论——回复。

这就形成了1:N(1个帖子:N个评论)和M:N(M个评论:N个回复)的关系。

一、在数据库方面,我们分为两种情况讨论:

①单表设计(评论数少):评论不多的时候,一个帖子对应两三条评论,那么数据表中一个帖子对应重复的数据也仅仅几条而已。但是这种情况比较少出现,因为很多时候这种"问题—评论“的模型通常对应很多条评论。所以我们放弃单表设计。

②多表设计(评论数多):如果每条帖子对应的评论数都很多,那么在单表设计模式下数据冗余情况就十分严重了,所以我采用分表的方法存储信息。

我的思路是分为帖子表和评论表两张表,并且两表用帖子的postid作为外键关联。先取帖子,然后再取评论,最后根据postid拼接成一条完整的json数据。

二、根据上面的思路,在数据量少的情况下做一个循环嵌套为演示,代码如下:

public List<Question> getMyQuestion(String userId){//将数据复制到list//获取帖子List<Question> qList = questionDao.getMyQuestion(userId);//获取评论List<Comment> cList = questionDao.getComment();//将list转换为jsonArr//问题的json数组JSONArray qArr = JSONArray.fromObject(qList);JSONArray cArr = JSONArray.fromObject(cList);//遍历jsonArr,对比keyfor(int i=0; i<qArr.size(); i++){JSONObject qObj = qArr.getJSONObject(i);//获取问题的questionIdString qId = qObj.getString("questionId");//声明评论数组ArrayList tempList = new ArrayList();for(int j=0; j<cArr.size(); j++){JSONObject cObj = cArr.getJSONObject(j);//获取评论的questionIdString cId = cObj.getString("questionId");//判断qId和cId是否相等if(cId.equals(qId)){String cString = cObj.toString(3).replace("\\","");//装入数组tempList.add(cString);}}//数组完成后,put进当前json数据qArr.getJSONObject(i).put("comment",tempList);}return qArr;}

三、在此基础上,应用于”大厅看帖“的环境下,还可以做一些改进,例如分页查询。先收集查询结果,然后根据每一条结果的postid再去评论表查询对应评论,最后拼接。方法大同小异。

特此记录思路,希望能给大家带来些许的帮助。 (^_^)~~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。