0
JavaWeb博客系统后端-数据表设计
拉大锯 发表于 2020-01-22 15:57 384

JavaWeb博客系统后端-系列

JavaWeb博客系统后端-功能需求

JavaWeb博客系统后端-项目创建

JavaWeb博客系统后端-封装返回结果

JavaWeb博客系统后端-重构ResponseResult

数据库的选择

选择数据库要考虑

  • 是否收费
  • 性能(时间和空间维度)
  • 场景
  • 技术掌握程度

其实呀,选择有两种情况

  • 第一种是你去公司上班,别人掌权,由CTO选择。公司已经用什么数据库了就用什么数据库
  • 第二种是你会什么选择什么

你自己选择也没关系,前期还是自己会什么使用什么吧。

目前主要流行的有Mysql,有Mongodb,Oracle

  • Oracle 比较适合超大型的系统,也收费
  • Mysql,免费。现在很多公司都去O化,也就是不用Oracle了。
  • Mongodb,企业版收费,社区版本免费,详情请查看MongoDB Licensing

所以,大多数情况下我们选择Mysql或者Mongodb

这里的话我们就选择MySql数据库

数据表的设计

怎么设计表呢?

找对象,看看我们要存储什么对象!

  • 我们是不是要保存用户信息呢?

整一张用户表tb_user

  • 保存分类信息

整一张分类表tb_category

  • 保存文章数据

整一张文章表tb_article

  • 保存设置信息

整一张设置表tb_settings

  • 统计表

整一张统计的表tb_kpi_daily

  • 保存轮播图

整一张轮播图表tb_looper

设计字段

  • tb_user 用户表
CREATE TABLE tb_user(
    id VARCHAR(32) NOT NULL   COMMENT 'ID' ,
    user_name VARCHAR(32) NOT NULL   COMMENT '用户名' ,
    password VARCHAR(32) NOT NULL   COMMENT '密码' ,
    avatar VARCHAR(32) NOT NULL   COMMENT '头像' ,
    email VARCHAR(128) NOT NULL   COMMENT '邮箱' ,
    sign VARCHAR(1024) NOT NULL   COMMENT '签名' ,
    salt VARCHAR(32) NOT NULL   COMMENT '盐值' ,
    PRIMARY KEY (id)
) COMMENT = 'tb_user ';;

对于我们个人博客系统,用户信息这些就够了

如果是公众博客,还有什么手机号码,生日,性别,爱好,注册ip,最后一次登录ip,最后一次登录时间之类的。

这些都根据需求而来,如果你要显示性别,要统计性别,那你是不是要加个性别字段呢?

如果你需要根据用户的喜好,关注的标签来推荐内容,是不是得需要标签字段呢?有必要还得整一个标签表。

最后一次登陆时间,ip,防止盗号之类的。

总之,这些字段来自需求,所以设计数据库的时候,从需求去考虑,这是最基本的。

  • tb_category 分类表
CREATE TABLE tb_category(
    id VARCHAR(32) NOT NULL   COMMENT 'ID' ,
    category_name VARCHAR(32) NOT NULL   COMMENT '分类名称' ,
    category_py VARCHAR(32) NOT NULL   COMMENT '分类拼音' ,
    description TEXT NOT NULL   COMMENT '描述说明' ,
    `order` INT NOT NULL  DEFAULT 0 COMMENT '顺序' ,
    PRIMARY KEY (id)
) COMMENT = 'tb_category ';;

分类,我们先有分类再有文章表,文章表的分类id和用户id有有外键约束。

  • tb_article 文章表

图片描述

CREATE TABLE tb_article(
    id VARCHAR(32) NOT NULL   COMMENT 'ID' ,
    user_id VARCHAR(32) NOT NULL   COMMENT '用户ID' ,
    category_id VARCHAR(32)    COMMENT '分类ID' ,
    content VARCHAR(32)    COMMENT '内容' ,
    type INT    COMMENT '类型 0表示富文本,1表示markdown' ,
    status INT NOT NULL   COMMENT '状态 0表示已经发布,1表示草稿,2表示等待发布' ,
    view_count INT   DEFAULT 0 COMMENT '浏览量' ,
    publish_time DATETIME    COMMENT '发布时间' ,
    update_time DATETIME    COMMENT '更新时间' ,
    PRIMARY KEY (id),
    FOREIGN KEY(user_id) REFERENCES tb_user(id),
    FOREIGN KEY(category_id) REFERENCES tb_category(id)
) COMMENT = 'tb_article ';;
  • tb_looper 轮播图表
CREATE TABLE tb_looper(
    id VARCHAR(32) NOT NULL   COMMENT 'ID' ,
    url VARCHAR(1024)    COMMENT '轮播图的Url' ,
    path VARCHAR(1024)    COMMENT '图片路径' ,
    title VARCHAR(128)    COMMENT '标题' ,
    `order` INT    COMMENT '顺序' ,
    PRIMARY KEY (id)
) COMMENT = 'tb_looper ';;
  • tb_kpi_daily 每天的总访问量 用于统计每天的访问量
CREATE TABLE tb_kpi_daily(
    id VARCHAR(32) NOT NULL   COMMENT 'ID' ,
    view_count INT NOT NULL  DEFAULT 0 COMMENT '浏览量' ,
    update_time DATETIME NOT NULL   COMMENT '更新时间' ,
    PRIMARY KEY (id)
) COMMENT = 'tb_kpi_daily 每天访问量统计表';;

这里是单用户,不用userId也行。如果是多用户的,还得加上userId

另外,像头条这种网站的统计,还会有每天文章每日的访问量,每个用户每天的访问量,用户的总访问量。

我们的总访问量可以保存在设置项里,如果是多用户的话,需要独立一张表保存数据。

  • tb_settings 设置项表
CREATE TABLE tb_settings(
    id VARCHAR(32) NOT NULL   COMMENT '设置项ID' ,
    setting_key VARCHAR(32)    COMMENT '设置项key' ,
    setting_value VARCHAR(1024)    COMMENT '设置项value' ,
    PRIMARY KEY (id)
) COMMENT = 'tb_settings ';;

有些项目的设计表是横向表,也就是只有一个记录,字段是定的,只填写值就完事了。

上而这个是纵向表,以key-value的形式进行保存。

比如说:seo关键字,描述,网站title,是否开启轮播图,这些都可以用key-value形式进行保存。

对于一个个人博客网站,完全够用的。

表拆分

什么情况下需要拆表呢?

我可以把众多的信息写到一张表里吗?

比如说,我有一张用户表tb_user

那我把id,用户名,密码,邮箱,性别,爱好,电话号码,收货地址,头像,最后登录ip,注册ip,QQ号码,注册时间,最后登录时间...都设计到一张表里?

如果查询的时候,来一个select * 那不是要很耗时吗?而且有些数据不是我们每次都用得上的,所以可以根据业务对表进行拆分。

也可以根据数据形式进行拆分,比如说,理论上我们可以把爱好放到tb_user里,一个人有多个爱好吧,可以独立到一张表。

一个人可以有多个收货地址吧,我们独立到一张表里,有需要时,联合查询出来使用即可。

大的项目也是由小的项目演变过去的。作为我们第一个web项目,先不用考虑高并发,高可用,高稳定的问题。先把逻辑走通,实现功能先。

评论
0/240
  • aiwenbin
    想问一下博主,这个大概什么时候会出视频教程?
    2020-03-18 11:05  回复
    1240111638032515072
    • 拉大锯  回复 @aiwenbin
      出完领券联盟就到博客系统了。
      拉大锯 2020-03-18 11:05   回复 1153952789488054272
  • qonour
    非常优秀
    2020-02-18 21:33  回复
    1227787339862904832
    • 拉大锯  回复 @qonour
      都还没出视频,优秀,哈哈!!!
      拉大锯 2020-02-18 21:33   回复 1153952789488054272
    • 拉大锯  回复 @qonour
      看你一篇博客没写过,来吧,皮卡丘!可以把你的学习笔记呀,经验,所学到的技术分享给大家。
      拉大锯 2020-02-18 21:33   回复 1153952789488054272
文章目录