搭建个⼈博客之mysql数据库表设计
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",
188********,
1,
"每⼀个不曾起舞的⽇⼦都是对⽣命的辜负",
"2021-07-27 20:39:30",
"2021-07-27 20:39:30"
);
之前对⼀对多的表设计很迷惑,最近看了不少博⽂有⼀些启发,如下:
⽐如⼀篇⽂章可能对应对个标签,如果把标签 id 设定在 ⽂章表⾥⾯那就很不友好,要么⼀篇⽂章只
能绑定⼀个标签 id,要么这篇⽂章绑定的标签 id ⽤ “tagId1, tagId2” 这种⽅式存储。上述两种⽅式都不是最好的使⽤⽅式,因为 mysql 最⼤特点就是结构化的存储。
那么怎么做呢?
在标签表中存储⽂章 id,那这样⼀篇⽂章就可以对应多个标签了(在标签表中,⼀个⽂章 id 会出现多次,对应多个标签 id)