搭建个人博客之 mysql 数据库表设计

代码地址:https://github.com/hefeng6500/blog-server/blob/master/sql_design/blog.sql

SHOW DATABASES;
DROP DATABASE IF EXISTS blog;
CREATE DATABASE IF NOT EXISTS blog DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
USE blog;
DROP TABLE IF EXISTS user_table;
-- 用户表
CREATE TABLE user_table (
  user_id INT PRIMARY KEY AUTO_INCREMENT comment '用户id',
  username VARCHAR(20) NOT NULL comment '用户名',
  password VARCHAR(20) NOT NULL comment '密码',
  email VARCHAR(50) NOT NULL comment '邮箱',
  phone_number VARCHAR(20) NOT NULL comment '手机号码',
  sex CHAR(1) NOT NULL comment '性别',
  introduce VARCHAR(200) NOT NULL comment '用户签名',
  reg_time DATETIME NOT NULL comment '注册时间',
  last_update_time DATETIME NOT NULL comment '身份信息最后修改时间'
);
-- 文章表
DROP TABLE IF EXISTS articles;
CREATE TABLE articles (
  article_id INT PRIMARY KEY AUTO_INCREMENT comment '文章id',
  title VARCHAR(50) NOT NULL comment '文章标题',
  content LONGTEXT NOT NULL comment '文章内容',
  create_time DATETIME NOT NULL comment '创建时间',
  last_update_time DATETIME NOT NULL comment '最后修改时间',
  is_original CHAR(1) NOT NULL comment '是否原创',
  user_id INT NOT NULL comment '用户id',
  like_count INT NOT NULL comment '点赞数量',
  view_count INT NOT NULL comment '浏览量'
);
-- 文章分类表
DROP TABLE IF EXISTS article_category;
CREATE TABLE article_category (
  category_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT comment '分类id',
  category_name VARCHAR(20) NOT NULL comment '分类名称',
  article_id INT NOT NULL comment '文章id'
);
-- 评论表
DROP TABLE IF EXISTS comment_table;
CREATE TABLE comment_table (
  id INT PRIMARY KEY AUTO_INCREMENT comment '评论id',
  article_id INT NOT NULL comment '文章id',
  comment_type VARCHAR(20) comment '评论类型',
  comment_content VARCHAR(1000) NOT NULL comment '评论内容',
  uid INT NOT NULL
);
-- 回复表
DROP TABLE IF EXISTS replay_table;
CREATE TABLE replay_table (
  reply_id INT PRIMARY KEY AUTO_INCREMENT comment '回复id',
  comment_id INT NOT NULL comment '评论id',
  content VARCHAR(1000) NOT NULL comment '回复内容',
  type VARCHAR(20) comment '回复类型',
  replay_time DATETIME NOT NULL comment '回复时间'
);
-- 标签表
DROP TABLE IF EXISTS article_tag;
CREATE TABLE article_tag(
  id INT PRIMARY KEY AUTO_INCREMENT comment '标签id',
  name VARCHAR(20) NOT NULL comment '标签名称',
  atricle_id INT NOT NULL comment '文章id'
);
-- 插入基本测试数据
INSERT INTO
  user_table (
    username,
    password,
    email,
    phone_number,
    sex,
    introduce,
    reg_time,
    last_update_time
  )
VALUES
  (
    "hefeng6500",
    "hefeng9999",
    "2443992009@qq.com",
    18800008888,
    1,
    "每一个不曾起舞的日子都是对生命的辜负",
    "2021-07-27 20:39:30",
    "2021-07-27 20:39:30"
  );

之前对一对多的表设计很迷惑,最近看了不少博文有一些启发,如下:
比如一篇文章可能对应对个标签,如果把标签 id 设定在 文章表里面那就很不友好,要么一篇文章只能绑定一个标签 id,要么这篇文章绑定的标签 id 用 “tagId1, tagId2” 这种方式存储。上述两种方式都不是最好的使用方式,因为 mysql 最大特点就是结构化的存储。

那么怎么做呢?

在标签表中存储文章 id,那这样一篇文章就可以对应多个标签了(在标签表中,一个文章 id 会出现多次,对应多个标签 id)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值