相关知识
多对多关系的建立
每一个博客都可以设置很多个标签,比如一篇讲JavaWeb知识的博客,就可能会涉及到多个标签如:前端,后端,Java,SpringMVC等标签,而一个标签也可能对应多个博客,比如“后端”这个标签就可能对应很多博客,如:Python博客,Java博客。.net博客等。
所以我们应该讲博客标签表与博客表设计成一个多对多的关系,那么应该怎么设计呢?这是我们要思考的问题。
我们对博客标签表与博客信息表设计如下图所示:
设计了一个中间表,分别与博客信息表和博客标签表是一对多的关系,这样博客标签表(t_tag)就和博客信息表(t_blog)是多对多的关系了。
########## Begin ##########
#在blog_db库中创建t_user表
use blog_db;
CREATE TABLE `t_user` (
`userId` int NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`userName` varchar(32) NOT NULL COMMENT '用户名',
`passWord` varchar(32) NOT NULL COMMENT '用户密码',
`userSex` 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 '头像地址',
`isSuperuser` int NOT NULL DEFAULT '0' COMMENT '是否是管理员 1代表 是 0代表不是',
`lastLogin` datetime DEFAULT NULL COMMENT '上一次登录时间',
`userRegisterTime` datetime DEFAULT NULL COMMENT '用户注册时间',
PRIMARY KEY (`userId`)
);
########## End ##########
########## Begin ##########
#创建blog_type、t_blog、t_comment表,并建立表之间的关系
CREATE TABLE `blog_type` (
`typeId` int NOT NULL AUTO_INCREMENT COMMENT '类型ID',
`typeName` varchar(32) NOT NULL COMMENT '类型名称',
PRIMARY KEY (`typeId`)
);
CREATE TABLE `t_blog` (
`blogId` int NOT NULL AUTO_INCREMENT COMMENT '博客ID',
`blogTitle` varchar(100) NOT NULL COMMENT '博客标题',
`blogContent` longtext NOT NULL COMMENT '博客内容',
`userId` int DEFAULT NULL COMMENT '创建人ID',
`typeId` int DEFAULT NULL COMMENT '类型ID',
`blogStatus` int NOT NULL DEFAULT '0' COMMENT '博客状态 1为发布 0为草稿',
`createTime` datetime NOT NULL COMMENT '创建时间',
`updateTime` datetime NOT NULL COMMENT '更新时间',
`coverImage` varchar(255) DEFAULT NULL COMMENT '封面图片',
PRIMARY KEY (`blogId`),
KEY `FK_type_id` (`typeId`),
KEY `FK_user_id` (`userId`),
CONSTRAINT `FK_type_id` FOREIGN KEY (`typeId`) REFERENCES `blog_type` (`typeId`),
CONSTRAINT `FK_user_id` FOREIGN KEY (`userId`) REFERENCES `t_user` (`userId`)
);
CREATE TABLE `t_comment` (
`commentId` int NOT NULL AUTO_INCREMENT COMMENT '评论id',
`commentContent` varchar(500) NOT NULL COMMENT '评论内容',
`blogId` int NOT NULL COMMENT '博客ID',
`createTime` datetime NOT NULL COMMENT '评论时间',
`userId` int NOT NULL COMMENT '评论人ID',
`replyId` int NOT NULL,
PRIMARY KEY (`commentId`),
KEY `FK_comment_blog_id` (`blogId`),
KEY `FK_comment_user_id` (`userId`),
CONSTRAINT `FK_comment_user_id` FOREIGN KEY (`userId`) REFERENCES `t_user` (`userId`),
CONSTRAINT `FK_comment_blog_id` FOREIGN KEY (`blogId`) REFERENCES `t_blog` (`blogId`)
);
########## End ##########
#请在此添加实现代码
########## Begin ##########
#创建博客标签表(t_tag),并建立表之间的关系
CREATE TABLE t_tag (
`tagId` int NOT NULL AUTO_INCREMENT COMMENT '标签id',
`tagName` varchar(32) NOT NULL COMMENT '标签名称',
PRIMARY KEY (`tagId`)
);
CREATE TABLE t_tag_blog (
`tagId` int DEFAULT NULL COMMENT '标签id',
`blogId` int(11) DEFAULT NULL COMMENT '博客id',
constraint FK_blog_id foreign key (tagId) references t_tag(tagId),
constraint FK_tag_id foreign key (blogId) references t_blog(blogId)
);
########## End ##########
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
Field Type Null Key Default Extra
tagId int(11) NO PRI NULL auto_increment
tagName varchar(32) NO NULL
Field Type Null Key Default Extra
tagId int(11) YES MUL NULL
blogId int(11) YES MUL NULL