手把手教你设计简单留言系统(含数据库设计)

3,356 阅读2分钟

前言

许久没更新了,这次分享一下最近做得一个小东西,大佬轻喷👌

上周上面分配的一个小模块,实现一个类似于发表一条留言,留言内容相当于文章,文章可以进行回复,相当于掘金文章,我们在掘金文章评论回复。这功能说难不难,只要思路理清楚,数据库设计好,很简单,下面就说下我的设计和思路.

低保真原型

开始之前先看下我画的低保真原型图😁,忽略细节,看完原型图,相信脑海肯定也有想法了,下面我们通过数据库设计再来慢慢捋一捋

image.png

数据库设计

根据上面原型,我们可以知道,回复是可以无限叠加的,相当于需要添加一个上下级关系,首先留言系统包括:留言、评论、评论回复信息,留言单独为一个表,评论和回复信息可以设计为一个表,下面直接上表:

留言表
id主键id
title标题
user_id用户编号(发布人)
user_name用户名称(发布人)
org_id地区id
org_name地区名称
state回复状态
content内容
image_url图片Url
publish_time发布时间
is_top是否置顶

留言表设计如上表格所示,相信应该也没什么疑问,下面贴回复表↓↓:

留言回复表
id主键id
leave_id外键>>对应留言表主键id=
user_id留言人id
user_name留言人名称
org_name留言人地区名称
content内容
item_id父id
feedback_sup_id回复上级id
feedback_name回复人名称
feedback_org_name回复人地区单位
feedback_id回复人id
feedback_time回复时间

心路历程

回复表需要关注的有两个字段,itemId和supId,先讲解itemId

itemId:如上所述父id,如果为一级回复则为-1,一级回复下面所有的回复都为一级回复的主键id,一级回复的意思就是在一条留言下面的回复,而不是回复下面的回复,可能会有点绕,慢慢理解

supId:上级id,如果当前为一级回复则为-1,不为一级回复则为当前被回复的主键id,通过前端才能实现匹配

如果还是不理解,下面给一个test数据,帮助大家去更容易理理解,举个例子如果有一条留言主键id为6

idleave_iditem_idfeedback_sup_id
16-1-1
2611
3612
4613
56-1-1

这样的数据格式,查询时首先只需要根据leaveIditemId==-1的,得到所有一级回复,再根据每个一级回复的主键id,去得到所有属于这个一级回复的子回复,根据回复时间排序,这样一个简单的回复就差不多了.

结尾

水文不易,点赞是鼓励我继续水文的动力,有问题欢迎指出🐱‍🏍