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

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

这就形成了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,对比key
        for(int i=0; i<qArr.size(); i++){
            JSONObject qObj = qArr.getJSONObject(i);
            //获取问题的questionId
            String qId = qObj.getString("questionId");
            //声明评论数组
            ArrayList tempList = new ArrayList();
            for(int j=0; j<cArr.size(); j++){
                JSONObject cObj = cArr.getJSONObject(j);
                //获取评论的questionId
                String 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再去评论表查询对应评论,最后拼接。方法大同小异。

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

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值