数据库设计——博客系统

目录

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

数据库整体设计

头歌实验编程要求

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

核心表设计

头歌实验编程要求

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

多对多关系的建立

头歌实验编程要求


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

任务描述

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

相关知识

数据库整体设计

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

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

  1. 用户信息表;

  2. 博客信息表;

  3. 博客类型表;

  4. 博客评论表;

  5. 博客标签表。

用户信息表(t_user)

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

字段名称类型备注约束
userIdbigint用户ID主键,自增长,增量为1
usernamevarchar(32)用户名非空
passwordvarchar(32)密码非空
user_sexvarchar(6)性别 0代表男 1代表女默认值为 0
emailvarchar(64)邮箱
phonevarchar(11)手机号码非空
firstnamevarchar(6)
lastnamevarchar(12)
avatarvarchar(255)头像地址
is_superuserint是否是管理员 0代表不是 1代表是默认值为0
last_logindatetime上一次登陆时间
user_register_timedatetime用户注册时间

头歌实验编程要求

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

  • 创建用户信息表,使用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关 数据库表设计——核心表

任务描述

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

相关知识

核心表设计

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

  1. 博客类型表;

  2. 博客信息表;

  3. 博客评论表。

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

头歌实验编程要求

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

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

  • 博客类型表(blog_type);
    创建博客类型表,字段和属性如下:

字段名称类型备注约束
type_idint类型id主键,自动增长,增量为1
type_namevarchar(32)类型名称非空
  • 博客信息表(t_blog);
字段名称类型备注约束
blog_idbigint博客id主键,自动增长
blog_titlevarchar(100)博客标题非空
blog_contentlongtext博客内容非空
useridbigint创建人id外键
type_idint类型ID外键
blog_statusint博客状态 1为发布 0为草稿非空,默认为0
create_timedatetime创建时间非空
update_timedatetime更新时间非空
cover_imagevarchar(255)封面图片

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

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

  • 新闻评论表(t_comment)。
字段名称类型备注约束
comment_idbigint评论id主键,自动增长,增量为1
comment_contentvarchar(500)评论内容非空
blog_idbigint评论内容非空,外键
createtimedatetime评论时间非空
useridbigint评论人ID非空,外键
replyidint评论回复人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知识的博客,就可能会涉及到多个标签如:前端、后端、JavaSpringMVC等标签,而一个标签也可能对应多个博客,比如“后端”这个标签就可能对应很多博客,如:Python博客、Java博客、.net博客等。
所以我们应该讲博客标签表与博客表设计成一个多对多的关系,那么应该怎么设计呢?这是我们要思考的问题。

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

设计了一个中间表,分别与博客信息表和博客标签表是一对多的关系,这样博客标签表(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 ##########
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椅糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值