在建站过程中遇到的第一个设计问题,就是文章与评论再数据库中如何存储,

这里有两个常见的存储方式,第一种是文章与评论储存在一张表中

内容与评论在一张表中存储

先看代码

{
    id:"",
    content:"",
    title:"",
    create_time:"",
    comments:[{
          id:"",
          content:"",
          autrhor:"",
          create_time:""
        },
        {...},
        {...}
    ],
}

表字段

字段说明

Id

文章的id,自增值,每个文章都对应一个唯一的id,也可以使用随机值但要不重复

content

文章的内容

author

文章作者

comment

文章的评论,以数组的形式存储所有评论

create_time

文章产生日期

这样在获取文章内容的时候就获取了评论,适合于评论不多并且没有评论盖楼的形式。

这样做的优点有几个:

•  读取数据时不需要进行连接操作,速度更快。

•  数据结构更简单,易于理解和维护。

•  适合存储一对一或者一对少数的关系数据。

缺点也有几个:

•  如果内容和评论的数量很多,可能会导致文档过大,超过数据库对单个数据的限制。

•  如果需要更新内容或者评论,可能会涉及到修改多个文档,增加复杂度和错误风险。

•  如果需要对评论进行分页或者排序,可能会影响性能和内存消耗。

 

评论与内容分开两张表存储

分开存储就是在评论的表中多加一个字段指向文章,

代码如下

 

{
//文章的表为
{
    id:"",
    content:"",
    create_time:"",
    title:"",
}
//评论为
{
  id:""
  parent_id:""  // 记录这是那一篇文章的评论
  content:"",
  author:"",
  create_time:"",
}

}

表字段

字段说明

id

评论的id,自增值,每个评论都对应一个唯一的id, 也可以是随机不重复的数值

content

评论的内容

author

发出该评论的用户

parent_id

指向文章的id

create_time

评论产生日期

在需要加载评论的时候 查询所有评论找到与文字匹配的评论,

这里可能会有朋友认为查询所有id会不会影响加载速度,其实在有索引的情况下查询速度是很快的,

可以参考这片文章

在有索引的情况下一亿条数据查询时间只在毫秒级别,

使用两张表的优点:

•  数据更新时不需要修改多个文档,减少错误风险。

•  适合存储一对多或者多对多的关系数据。

缺点就很明显:

•  读取数据时需要进行连接操作,速度更慢。

•  数据结构更复杂,难于理解和维护。

•  如果需要对内容和评论进行联合查询,可能会影响性能和内存消耗。

 

对于到底使用哪一种存储方式,可以说各有优劣。一般来说,在数据量较小且查询频繁的情况下,可以使用单表设计;在数据量较大且插入和更新频繁的情况下,可以使用双表设计。

 

评论的回复

既然说到评论,还有一个评论的评论设计问题,也有两种常见的方法,

一种是给评论多加一个字段

 

{
    type:"article" // type:"comment"
}

当类型是article的时候说明是文章的评论 而类型的comment的时候就是对评论的回复,二者可以使用不用的渲染方式加以区分。

 

第二种就是在评论的内容,直接引用需要回复的内容比如

--------------------

author 发布于 2023年1月3日

@name  发布于2023年1月2日

beautiful

  thank you!

--------------------

如果是回复的回复就加多重引用就好了。