点赞系统设计与实战-整体业务流程介绍-数据库表设计

功能模块:其实主要包含对文章的“点赞”、“取消点赞”,获取点赞排行榜、获取用户点赞过的文章、获取点赞过的文章的用户

一、整体业务流程介绍

点赞功能

 取消点赞功能

 获取文章详情-文章的维度

 获取用户点赞过的文章列表(用户的维度)

上述操作尽量在缓存中进行。 

二、数据库表的设计

1. 两大数据库表:文章记录表article、文章的点赞记录表 article_praise

article表

CREATE TABLE `article` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '文章标题',
  `content` varchar(500) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '文章内容',
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  `scan_total` int(255) DEFAULT NULL COMMENT '浏览量',
  `praise_total` int(255) DEFAULT '0' COMMENT '点赞量',
  `is_active` tinyint(4) DEFAULT '1' COMMENT '是否有效(1=是;0=否)',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='文章表';
INSERT INTO `article` VALUES ('1', 'Redis实战(1)-SpringBoot2.0整合Redis自定义注入模板操作Bean组件', '对于Redis,相信很多小伙伴早已有所耳闻,更有甚者,已经将其应用到许许多多的项目当中了!没错,它就是目前业界应用相当广泛的其中一种缓存中间件,也可以算是其中的佼佼者吧,从本篇文章开始,我们将基于SpringBoot2.0整合搭建的微服务项目为奠基,开启中间件Redis的实战之路!', '1', '0', '0', '1', '2020-01-13 15:31:09', '2020-03-10 17:55:31');
INSERT INTO `article` VALUES ('2', 'Redis实战(2)-数据结构之字符串String实战之存储对象', '在Redis众多数据结构当中,字符串String可以说是其中比较常见、应用比较频繁的一种了,本文我们将介绍数据类型~字符串String 在命令行的简单使用及其在实际业务场景中的应用与代码实战,其中应用场景为“存储前端门户网站的商品详情信息”,从而减少数据库DB的访问频率,提高接口的响应速率!', '2', '0', '1', '1', '2020-01-13 15:31:43', '2020-03-10 23:41:50');
INSERT INTO `article` VALUES ('3', 'Redis实战(3)-数据结构List实战一之商品信息的有序存储', '电商平台的管理后端一般有两大角色的用户可以使用,一个是系统管理员,一个是平台的卖家/商家,对于商家而言,管理自个儿的商品是日常工作中再为普通不过的事情了,本文我们将以“有序存储并展示电商平台中商家上传的各式各样的商品列表”,这里的关键词是“有序存储与展示”,我们将借助缓存中间件Redis的数据结构~列表List进行实战实现!', '2', '0', '1', '1', '2020-01-13 17:22:14', '2020-03-11 09:59:02');
INSERT INTO `article` VALUES ('4', '文章4', '文章1', '1', '0', '2', '1', '2020-03-11 10:17:38', '2020-03-11 10:20:55');
INSERT INTO `article` VALUES ('5', '文章5', '文章2', '2', '0', '4', '1', '2020-03-11 10:17:46', '2020-03-11 10:21:16');
INSERT INTO `article` VALUES ('6', '文章6', '文章3', '2', '0', '5', '1', '2020-03-11 10:18:03', '2020-03-11 10:22:24');
INSERT INTO `article` VALUES ('7', '文章7', '文章7', '1', null, '0', '1', '2020-03-11 10:49:46', '2020-03-11 10:51:05');
INSERT INTO `article` VALUES ('8', '文章8', '文章8', '1', null, '1', '1', '2020-03-11 10:50:10', '2020-03-11 15:55:04');

article_praise表

CREATE TABLE `article_praise` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `article_id` int(11) NOT NULL COMMENT '文章id',
  `user_id` int(11) NOT NULL COMMENT '用户id',
  `p_time` datetime DEFAULT NULL COMMENT '点赞时间',
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_article_id_user_id` (`article_id`,`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8 COMMENT='点赞记录表';
INSERT INTO `article_praise` VALUES ('94', '2', '1', '2020-03-10 23:41:51', null);
INSERT INTO `article_praise` VALUES ('95', '3', '1', '2020-03-11 09:59:02', null);
INSERT INTO `article_praise` VALUES ('96', '6', '1', '2020-03-11 10:18:46', null);
INSERT INTO `article_praise` VALUES ('97', '6', '2', '2020-03-11 10:18:49', null);
INSERT INTO `article_praise` VALUES ('98', '6', '3', '2020-03-11 10:18:52', null);
INSERT INTO `article_praise` VALUES ('99', '5', '1', '2020-03-11 10:19:12', null);
INSERT INTO `article_praise` VALUES ('100', '5', '2', '2020-03-11 10:19:14', null);
INSERT INTO `article_praise` VALUES ('101', '4', '1', '2020-03-11 10:19:35', null);
INSERT INTO `article_praise` VALUES ('102', '4', '2', '2020-03-11 10:19:37', null);
INSERT INTO `article_praise` VALUES ('105', '5', '3', '2020-03-11 10:21:15', null);
INSERT INTO `article_praise` VALUES ('106', '5', '4', '2020-03-11 10:21:16', null);
INSERT INTO `article_praise` VALUES ('107', '6', '4', '2020-03-11 10:21:59', null);
INSERT INTO `article_praise` VALUES ('108', '6', '5', '2020-03-11 10:22:25', null);
INSERT INTO `article_praise` VALUES ('111', '8', '1', '2020-03-11 10:51:14', null);

2. 利用MyBatis逆向工程生成实体类,mapper接口和mapper.xml文件

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Article implements Serializable {
    private Integer id;

    private String title;

    private String content;

    private Integer userId;

    private Integer scanTotal;

    private Integer praiseTotal;

    private Byte isActive;

    private Date createTime;

    private Date updateTime;

    //临时字段-用户姓名(因为在前端展示的时候还要展示作者)
    private String userName;

}

细节:为了显示文章用户的用户名,额外增加了一个属性userName 

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ArticlePraise implements Serializable {
    private Integer id;

    private Integer articleId;

    private Integer userId;

    private Date pTime;

    private Date updateTime;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值