目录
用户信息表(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
。
预期输出:
#请在此添加实现代码
########## 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关 数据库表设计——核心表
任务描述
本关任务:编写博客系统的核心表。
相关知识
核心表设计
设计编写完用户信息表之后,我们就需要设计博客系统的核心表了,在这里我们编写三个表分别是:
-
博客类型表;
-
博客信息表;
-
博客评论表。
博客类型表和博客信息表是一对多的关系,博客评论表和博客信息表是多对一的关系,用户信息表与博客信息表、博客评论表是一对多的关系。
头歌实验编程要求
代码补充,具体任务如下:
字段名称 | 类型 | 备注 | 约束 |
---|
type_id | int | 类型id | 主键,自动增长,增量为1 |
type_name | varchar(32) | 类型名称 | 非空 |
字段名称 | 类型 | 备注 | 约束 |
---|
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
)。
字段名称 | 类型 | 备注 | 约束 |
---|
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
),并添加相应约束。
预期输出:
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
知识的博客,就可能会涉及到多个标签如:前端、后端、Java
、SpringMVC
等标签,而一个标签也可能对应多个博客,比如“后端”这个标签就可能对应很多博客,如:Python
博客、Java
博客、.net
博客等。
所以我们应该讲博客标签表与博客表设计成一个多对多的关系,那么应该怎么设计呢?这是我们要思考的问题。
我们对博客标签表与博客信息表设计如下图所示:
设计了一个中间表,分别与博客信息表和博客标签表是一对多的关系,这样博客标签表(t_tag
)就和博客信息表(t_blog
)是多对多的关系了。
头歌实验编程要求
代码补充,具体任务如下:
- 根据设计图,创建博客标签表(
t_tag
),以及中间表(t_tag_blog
),并建立表与表之间的联系。外键名分别为FK_blog_id
、FK_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 ##########