部落格系統 - 資料庫設計(三)

Rich Dad發表於2020-10-30

時間煮雨
@R星校長

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 ##########

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

相關文章