首页 > 其他分享 >评论与内容的存储,一张表还是两张表

评论与内容的存储,一张表还是两张表

时间:2023-03-19 18:22:07浏览次数:58  
标签:存储 create 两张 content 评论 文章 id

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

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

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

先看代码

{
    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会不会影响加载速度,其实在有索引的情况下查询速度是很快的,

可以参考这片文章 https://www.cnblogs.com/davidwang456/p/10190077.html

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

使用两张表的优点:

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

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

缺点就很明显:

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

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

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

 

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

 

评论的回复

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

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

 


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

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

 

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

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

author 发布于 2023年1月3日

@name  发布于2023年1月2日

beautiful

  thank you!

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

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

标签:存储,create,两张,content,评论,文章,id
From: https://www.cnblogs.com/echoT/p/17233857.html

相关文章

  • 盒子结构“数据的存储”
    今日份学习“数据的存储”本文简介:C语言中的数据类型有整型,字符型,浮点型,以及结构体类型,我们知道这些类型是用来专门接收各个类型的数据的,但是这些类型的数据应该放在哪里呢?......
  • 基于K8S搭建Ceph分部署存储
    基于K8S搭建Ceph分部署存储 2020年2月17日 技术、推荐博文唐玥璨7条留言版本依赖​    搭建思路很多高级运维人员都2020年了对于K8S的存储大部分都是采用主机......
  • 关于float和double类型数据在单片机内存中如何存储和转换
    关于float和double类型数据在单片机内存中如何存储和转换1、单精度浮点型float,双精度浮点型double数据在内存中的存储模型(1)下图为单精度浮点型数据float的存储模型,符号位......
  • clickhouse的数据存储原理
    ClickHouse是一个列式存储数据库,它的数据存储原理与传统的行式存储数据库有很大不同。以下是ClickHouse数据存储原理的一些关键点:列式存储:与行式存储数据库将数据按行存......
  • 路飞:文件存储、前端搜索导航栏、前端搜索页面、后端搜索接口、支付宝支付介绍、支付宝
    目录一、文件存储七牛云上传文件1.1七牛云存储空间使用1.2使用代码上传文件到七牛云二、前端搜索导航栏2.1Header.vue三、前端搜索页面3.1SearchCourse.vue3.2路由中注......
  • android 如何修改USB存储在"我的电脑"中显示的label名称
    说明:内置SD卡即是eMMC上的FATpartition,可以指定label。 外置SDcard是外部设备,无法指定label。InternalSDcard à Youcanassign labelExternalSDcard à Youc......
  • MySQL(六)存储引擎
    存储引擎​ 连接管理、查询缓存、解析器和执行器被归为MySQLservice,而把真实存储数据的功能划分为存储引擎的功能。所以MySQLservice经过查询优化后,只需按照生成的执行......
  • MSSQLSERVER 存储过程debug调试
    每当我们遇到相对稍复杂的业务的时候,都会考虑写在存储过程中,这样相当于一个黑匣,方便管理。 但是如果写的行数太多,如果碰到了问题,凭经验,很难发现问题,那就要用到debug调试......
  • 计算,存储,网络虚拟化区别
     计算虚拟化1.什么是虚拟化什么是虚拟化:虚拟化是一种技术,将物理设备进行逻辑化,转化成文件夹或文件,实现软硬件解耦好处:    1.提高资源利用率   ......
  • 一文读懂存储过程
    0导读经常听别人说,“调用一个存储过程“,“把处理过程改写为存储过程之后就快了”此类的话,本篇文章我们来聊一聊存储过程。将从以下几个方面去描述存储过程。1存储过程解决......