Golang:个人博客设计(一),表设计

236 阅读4分钟

image.png

CREATE TABLE `tb_user_info`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `uid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '用户唯一id',
    `username`       VARCHAR(32)     NOT NULL DEFAULT '' COMMENT '用户名',
    `password`       VARCHAR(128)    NOT NULL DEFAULT '' COMMENT '密码',
    `sex`            SMALLINT(1)     NOT NULL DEFAULT 0  COMMENT '性别(0:隐藏,1:男 2:女)',
    `email`          VARCHAR(32)     NOT NULL DEFAULT '' COMMENT '邮箱',
    `gitee`          VARCHAR(128)    NOT NULL DEFAULT '' COMMENT 'gitee账号绑定',
    `wechat`         VARCHAR(128)    NOT NULL DEFAULT '' COMMENT '微信号绑定',
    `login_count`    INT(11)         NOT NULL DEFAULT 0  COMMENT '登录次数',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_uid` (`uid`),
    KEY `idx_username` (`username`),
    KEY `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '用户信息表';

CREATE TABLE `tb_user_expand`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `uid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '用户唯一id',
    `nickname`       VARCHAR(32)     NOT NULL DEFAULT '' COMMENT '昵称(可包含emoji表情)',
    `desc`           VARCHAR(1024)   NOT NULL DEFAULT '' COMMENT '简介',
    `icon`           VARCHAR(255)    NOT NULL DEFAULT '' COMMENT '头像',
    `home_url`       VARCHAR(255)    NOT NULL DEFAULT '' COMMENT '主页链接 (name:url|)',
    `contact`        VARCHAR(255)    NOT NULL DEFAULT '' COMMENT '联系方式 (name:url|)',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '用户额外信息表';

CREATE TABLE `tb_user_focus_record`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `uid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '用户唯一id',
    `to_uid`         VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '被关注人id',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_uid` (`uid`),
    KEY `idx_to_uid` (`to_uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '用户关注记录表';

CREATE TABLE `tb_article_info`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `aid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '文章唯一id',
    `uid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '发布人id',
    `title`          VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '标题',
    `cover`          VARCHAR(255)    NOT NULL DEFAULT '' COMMENT '文章封面',
    `content`        MEDIUMTEXT      NOT NULL COMMENT '文章内容',
    `cid`            INT(11)         NOT NULL DEFAULT 0  COMMENT '分类id',
    `pv`             INT(11)         NOT NULL DEFAULT 0  COMMENT '浏览数',
    `praise_count`   INT(11)         NOT NULL DEFAULT 0  COMMENT '点赞数',
    `comment_count`  INT(11)         NOT NULL DEFAULT 0  COMMENT '评论数',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_uid` (`uid`),
    KEY `idx_aid` (`aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '文章信息表';

CREATE TABLE `tb_article_tag_relation`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `aid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '文章唯一id',
    `tag_id`         VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '标签id',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_uid` (`aid`),
    KEY `idx_tag_id` (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '文章标签关联表';

CREATE TABLE `tb_article_praise_record`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `aid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '文章唯一id',
    `uid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '点赞用户唯一id',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_uid` (`uid`),
    KEY `idx_aid` (`aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '文章点赞记录表';

CREATE TABLE `tb_article_comment_relation`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `aid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '文章唯一id',
    `uid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '评论用户唯一id',
    `content`        VARCHAR(1024)   NOT NULL DEFAULT '' COMMENT '评论内容',
    `praise_count`   INT(11)         NOT NULL DEFAULT 0  COMMENT '点赞数',
    `is_top`         SMALLINT(1)     NOT NULL DEFAULT 0  COMMENT '是否置顶 0 1',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_uid` (`uid`),
    KEY `idx_aid` (`aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '文章评论关联表';

CREATE TABLE `tb_second_comment_relation`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `acid`           INT(11)         NOT NULL DEFAULT 0  COMMENT '文章评论主键id',
    `scid`           INT(11)         NOT NULL DEFAULT 0  COMMENT '二级评论id',
    `uid`            VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '回复uid',
    `to_uid`         VARCHAR(64)     NOT NULL DEFAULT '' COMMENT '被回复uid',
    `content`        VARCHAR(1024)   NOT NULL DEFAULT '' COMMENT '评论内容',
    `sc_content`     VARCHAR(1024)   NOT NULL DEFAULT '' COMMENT '二级评论内容(冗余字段)',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_uid` (`uid`),
    KEY `idx_to_uid` (`to_uid`),
    KEY `idx_acid` (`acid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '二级评论关联表';

CREATE TABLE `tb_tag_info`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `name`           VARCHAR(16)     NOT NULL DEFAULT '' COMMENT '标签名',
    `back_img`       VARCHAR(255)    NOT NULL DEFAULT '' COMMENT '背景图',
    `desc`           VARCHAR(255)    NOT NULL DEFAULT '' COMMENT '标签说明',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_key_name`(`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '标签信息表';

CREATE TABLE `tb_category_info`(
    `id`             INT(11)         NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `name`           VARCHAR(16)     NOT NULL DEFAULT '' COMMENT '分类名',
    `back_img`       VARCHAR(255)    NOT NULL DEFAULT '' COMMENT '背景图',
    `desc`           VARCHAR(255)    NOT NULL DEFAULT '' COMMENT '分类说明',
    `create_at`      datetime        DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
    `update_at`      datetime        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_key_name`(`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '分类信息表';

1. uid,aid生成规则(需要转成golang)

import datetime
import uuid


def gen_uid(sex):
    now_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    # from redis increment num
    ct = 1
    uid = "%s%02d%04d" % (now_time, sex, int(ct) % 10000)
    return uid


def gen_aid():
    now_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    aid = "%s%s" % (now_time, str(uuid.uuid4()).split('-').pop())
    return aid


if __name__ == '__main__':
    print(gen_uid(2))  # 20211117173733020001
    print(gen_aid())  # 20211117173733c1fedba4dd62

Golang实现

func genUid(sex int) string {
   timeString := time.Now().Format("20060102150405")
   uid := fmt.Sprintf("%s%02d%04d", timeString, sex, 1%10000)
   return uid
}
// 20211117184151020001

1. 使用定时任务统计每天的数据信息