目录

第1关 数据库表设计——用户信息表

数据库整体设计

头歌实验编程要求

第2关 数据库表设计——核心表

核心表设计

头歌实验编程要求

第3关 数据库表设计——博客标签表

多对多关系的建立

头歌实验编程要求


第1关 数据库表设计——用户信息表

任务描述

本关任务:创建博客系统数据库的用户信息表。

相关知识

数据库整体设计

一个博客系统会有哪些功能呢,肯定会有的是博客列表,博客详情,评论,登陆注册等等这些功能,那应该建多少张表呢?应该给这些表添加哪些字段呢?字段的约束怎么设计呢?表与表之间的关联关系应该怎样设计呢?

博客系统数据库的整体设计如下图所示:总共涉及到五张表:

  1. 用户信息表;
  2. 博客信息表;
  3. 博客类型表;
  4. 博客评论表;
  5. 博客标签表。

mysql签到活动数据表怎么做 签到系统数据库设计_外键

用户信息表(t_user)

设计用户信息表是设计数据库的第一步,和一般的网站类似,博客系统的用户信息有如下内容:

字段名称

类型

备注

约束

userId

bigint

用户ID

主键,自增长,增量为1

username

varchar(32)

用户名

非空

password

varchar(32)

密码

非空

user_sex

varchar(6)

性别 0代表男 1代表女

默认值为 0

email

varchar(64)

邮箱


phone

varchar(11)

手机号码

非空

firstname

varchar(6)



lastname

varchar(12)



avatar

varchar(255)

头像地址


is_superuser

int

是否是管理员 0代表不是 1代表是

默认值为0

last_login

datetime

上一次登陆时间


user_register_time

datetime

用户注册时间


头歌实验编程要求

代码补充,具体任务如下:

  • 创建用户信息表,使用blog_db数据库,创建的表命名为t_user

预期输出:

mysql签到活动数据表怎么做 签到系统数据库设计_sql_02

#请在此添加实现代码
########## Begin ##########
#在blog_db库中创建t_user表

create table blog_db.t_user(
    userId bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    primary key (userId),
    username varchar(32) NOT NULL COMMENT '用户名',
    password varchar(32) NOT NULL COMMENT '密码',
    user_sex varchar(6) NOT NULL DEFAULT '0' COMMENT '性别 0代表男 1代表女',
    email varchar(64) DEFAULT NULL COMMENT '邮箱',
    phone varchar(11) NOT NULL COMMENT '手机号码',
    firstname varchar(6) DEFAULT NULL COMMENT '姓',
    lastname varchar(12) DEFAULT NULL COMMENT '名',
    avatar varchar(255) DEFAULT NULL COMMENT '头像地址', 
    is_superuser int NOT NULL DEFAULT '0' COMMENT '是否是管理员 0代表不是 1代表是',
    last_login datetime DEFAULT NULL COMMENT '上一次登陆时间',
    user_register_time datetime DEFAULT NULL COMMENT '用户注册时间'

);

########## End ##########

第2关 数据库表设计——核心表

任务描述

本关任务:编写博客系统的核心表。

相关知识

核心表设计

mysql签到活动数据表怎么做 签到系统数据库设计_mysql签到活动数据表怎么做_03

设计编写完用户信息表之后,我们就需要设计博客系统的核心表了,在这里我们编写三个表分别是:

  1. 博客类型表;
  2. 博客信息表;
  3. 博客评论表。

博客类型表和博客信息表是一对多的关系,博客评论表和博客信息表是多对一的关系,用户信息表与博客信息表、博客评论表是一对多的关系。

头歌实验编程要求

代码补充,具体任务如下:

  • 创建博客类型(blog_type)、博客信息(t_blog)、博客评论(t_comment)这三张表,并根据设计图建立表与表之间的约束;
  • 博客类型表(blog_type);
    创建博客类型表,字段和属性如下:

字段名称

类型

备注

约束

type_id

int

类型id

主键,自动增长,增量为1

type_name

varchar(32)

类型名称

非空

  • 博客信息表(t_blog);

字段名称

类型

备注

约束

blog_id

bigint

博客id

主键,自动增长

blog_title

varchar(100)

博客标题

非空

blog_content

longtext

博客内容

非空

userid

bigint

创建人id

外键

type_id

int

类型ID

外键

blog_status

int

博客状态 1为发布 0为草稿

非空,默认为0

create_time

datetime

创建时间

非空

update_time

datetime

更新时间

非空

cover_image

varchar(255)

封面图片


创建该表时,注意要添加外键约束,外键为userid,外键名称设置为FK_user_id,外键表为用户信息表(t_user)。

另一个外键为type_id,外键名称设置为FK_type_id,外键表为博客类型表(blog_type)。

  • 新闻评论表(t_comment)。

字段名称

类型

备注

约束

comment_id

bigint

评论id

主键,自动增长,增量为1

comment_content

varchar(500)

评论内容

非空

blog_id

bigint

评论内容

非空,外键

createtime

datetime

评论时间

非空

userid

bigint

评论人ID

非空,外键

replyid

int

评论回复人ID

非空

创建该表时,注意要添加外键约束,外键为userid,外键名称设置为FK_comment_user_id,外键表为用户信息表(t_user)。

另一个外键为blog_id,外键名称设置为FK_comment_blog_id,外键表为博客信息表(t_blog)。

blog_db中创建这三张表(顺序不能变,即blog_type -> t_blog -> t_comment),并添加相应约束。
预期输出:

mysql签到活动数据表怎么做 签到系统数据库设计_mysql签到活动数据表怎么做_04

use blog_db;
CREATE TABLE `t_user` (
  `userId` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `username` varchar(32) NOT NULL COMMENT '用户名',
  `password` varchar(32) NOT NULL COMMENT '用户密码',
  `user_sex` varchar(6) NOT NULL DEFAULT '0' COMMENT '用户性别',
  `email` varchar(64) DEFAULT NULL COMMENT '用户邮箱',
  `phone` varchar(11) NOT NULL COMMENT '手机号码',
  `firstname` varchar(6) DEFAULT NULL COMMENT '姓',
  `lastname` varchar(12) DEFAULT NULL COMMENT '名',
  `avatar` varchar(255) DEFAULT NULL COMMENT '头像地址',
  `is_superuser` int NOT NULL DEFAULT '0' COMMENT '是否是管理员 1代表 是 0代表不是',
  `last_login` datetime DEFAULT NULL COMMENT '上一次登录时间',
  `user_register_time` datetime DEFAULT NULL COMMENT '用户注册时间',
  PRIMARY KEY (`userId`)
);
#请在此添加实现代码
########## Begin ##########
#创建blog_type、t_blog、t_comment表,并建立表之间的关系
CREATE TABLE `blog_type` (
  `type_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '类型ID',
  `type_name` varchar(32) NOT NULL COMMENT '类型名称',
  PRIMARY KEY (`type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
CREATE TABLE `t_blog` (
  `blog_id` bigint NOT NULL AUTO_INCREMENT COMMENT '博客ID',
  `blog_title` varchar(100) NOT NULL COMMENT '博客标题',
  `blog_content` longtext NOT NULL COMMENT '博客内容',
  `userid` bigint DEFAULT NULL COMMENT '创建人ID',
  `type_id` int(11) DEFAULT NULL COMMENT '类型ID',
  `blog_status` int(11) NOT NULL DEFAULT '0' COMMENT '博客状态 1为发布 0为草稿',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  `cover_image` varchar(255) DEFAULT NULL COMMENT '封面图片',
  PRIMARY KEY (`blog_id`),
  KEY `FK_type_id` (`type_id`),
  KEY `FK_user_id` (`userid`),
  CONSTRAINT `FK_type_id` FOREIGN KEY (`type_id`) REFERENCES `blog_type` (`type_id`),
  CONSTRAINT `FK_user_id` FOREIGN KEY (`userid`) REFERENCES `t_user` (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
CREATE TABLE `t_comment` (
  `comment_id` bigint NOT NULL AUTO_INCREMENT COMMENT '评论id',
  `comment_content` varchar(500) NOT NULL COMMENT '评论内容',
  `blog_id` bigint NOT NULL COMMENT '博客ID',
  `createtime` datetime NOT NULL COMMENT '评论时间',
  `userid` bigint NOT NULL COMMENT '评论人ID',
  `replyid` int(11) NOT NULL,
  PRIMARY KEY (`comment_id`),
  KEY `FK_comment_blog_id` (`blog_id`),
  KEY `FK_comment_user_id` (`userid`),
  CONSTRAINT `FK_comment_blog_id` FOREIGN KEY (`blog_id`) REFERENCES `t_blog` (`blog_id`),
  CONSTRAINT `FK_comment_user_id` FOREIGN KEY (`userid`) REFERENCES `t_user` (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
########## End ##########

第3关 数据库表设计——博客标签表

任务描述

本关任务:在博客数据库中建立博客标签表。

相关知识

多对多关系的建立

每一个博客都可以设置很多个标签,比如一篇讲JavaWeb知识的博客,就可能会涉及到多个标签如:前端、后端、JavaSpringMVC等标签,而一个标签也可能对应多个博客,比如“后端”这个标签就可能对应很多博客,如:Python博客、Java博客、.net博客等。
所以我们应该讲博客标签表与博客表设计成一个多对多的关系,那么应该怎么设计呢?这是我们要思考的问题。

我们对博客标签表与博客信息表设计如下图所示:

mysql签到活动数据表怎么做 签到系统数据库设计_mysql_05

设计了一个中间表,分别与博客信息表和博客标签表是一对多的关系,这样博客标签表(t_tag)就和博客信息表(t_blog)是多对多的关系了。

头歌实验编程要求

代码补充,具体任务如下:

  • 根据设计图,创建博客标签表(t_tag),以及中间表(t_tag_blog),并建立表与表之间的联系。外键名分别为FK_blog_idFK_tag_id。第一个外键对应的是博客信息表的的ID,第二个外键对应的是标签表的ID
use blog_db;
CREATE TABLE `t_user` (
  `userId` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `username` varchar(32) NOT NULL COMMENT '用户名',
  `password` varchar(32) NOT NULL COMMENT '用户密码',
  `user_sex` varchar(6) NOT NULL DEFAULT '0' COMMENT '用户性别',
  `email` varchar(64) DEFAULT NULL COMMENT '用户邮箱',
  `phone` varchar(11) NOT NULL COMMENT '手机号码',
  `firstname` varchar(6) DEFAULT NULL COMMENT '姓',
  `lastname` varchar(12) DEFAULT NULL COMMENT '名',
  `avatar` varchar(255) DEFAULT NULL COMMENT '头像地址',
  `is_superuser` int NOT NULL DEFAULT '0' COMMENT '是否是管理员 1代表 是 0代表不是',
  `last_login` datetime DEFAULT NULL COMMENT '上一次登录时间',
  `user_register_time` datetime DEFAULT NULL COMMENT '用户注册时间',
  PRIMARY KEY (`userId`)
);

CREATE TABLE `blog_type` (
  `type_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '类型ID',
  `type_name` varchar(32) NOT NULL COMMENT '类型名称',
  PRIMARY KEY (`type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

CREATE TABLE `t_blog` (
  `blog_id` bigint NOT NULL AUTO_INCREMENT COMMENT '博客ID',
  `blog_title` varchar(100) NOT NULL COMMENT '博客标题',
  `blog_content` longtext NOT NULL COMMENT '博客内容',
  `userid` bigint DEFAULT NULL COMMENT '创建人ID',
  `type_id` int(11) DEFAULT NULL COMMENT '类型ID',
  `blog_status` int(11) NOT NULL DEFAULT '0' COMMENT '博客状态 1为发布 0为草稿',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  `cover_image` varchar(255) DEFAULT NULL COMMENT '封面图片',
  PRIMARY KEY (`blog_id`),
  KEY `FK_type_id` (`type_id`),
  KEY `FK_user_id` (`userid`),
  CONSTRAINT `FK_type_id` FOREIGN KEY (`type_id`) REFERENCES `blog_type` (`type_id`),
  CONSTRAINT `FK_user_id` FOREIGN KEY (`userid`) REFERENCES `t_user` (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

CREATE TABLE `t_comment` (
  `comment_id` bigint NOT NULL AUTO_INCREMENT COMMENT '评论id',
  `comment_content` varchar(500) NOT NULL COMMENT '评论内容',
  `blog_id` bigint NOT NULL COMMENT '博客ID',
  `createtime` datetime NOT NULL COMMENT '评论时间',
  `userid` bigint NOT NULL COMMENT '评论人ID',
  `replyid` int(11) NOT NULL,
  PRIMARY KEY (`comment_id`),
  KEY `FK_comment_blog_id` (`blog_id`),
  KEY `FK_comment_user_id` (`userid`),
  CONSTRAINT `FK_comment_blog_id` FOREIGN KEY (`blog_id`) REFERENCES `t_blog` (`blog_id`),
  CONSTRAINT `FK_comment_user_id` FOREIGN KEY (`userid`) REFERENCES `t_user` (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#请在此添加实现代码
########## Begin ##########
#创建博客标签表(t_tag),并建立表之间的关系
create table t_tag(
    tag_id int primary key AUTO_INCREMENT,
    tag_name varchar(32) not null
);
create table t_tag_blog(
    tag_id int,
    blog_id bigint,
    constraint FK_blog_id foreign key (tag_id) references t_tag(tag_id),
    constraint FK_tag_id foreign key (blog_id) references t_blog(blog_id)
);
########## End ##########