個人部落格資料庫設計

米奇羅發表於2019-03-23

前言

最近要做資料庫大作業,在思考了很久之後,還是設計一個簡單的個人部落格資料庫,資料庫採用的時MySQL5.7。

資料庫下載(提取碼: kr78)

一、 概述及分析

1.1 專案背景

隨著網際網路的發展,越來越多的人擁有了自己的個人部落格。但是大多數採用的是網上別人做好的部落格模板,眾所周知,網上的模板並不是單獨為個人而定製,而是面向大多數人的,獨立設計一個部落格,滿足自己的需求。

1.2 分析

  • 系統主要完成以下幾方面的功能:
  • 使用者管理:使用者的註冊和登入,發表博文和評論。
  • 博文管理:使用者可以在網站中發表和設定博文。
  • 評論管理:使用者可以評論博文和回覆其他使用者的評論。
  • 分類管理:新增和刪除分類,給文章設定分類。
  • 標籤管理:新增和刪除標籤,給文章設定標籤。

1.3 系統功能

1.3.1 使用者管理

使用者的相關資訊如下:使用者ID、使用者IP、使用者名稱、使用者暱稱、使用者密碼、使用者郵箱、使用者頭像、註冊時間、使用者生日、使用者年齡、使用者手機號。

使用者註冊時需提供使用者名稱、使用者密碼、使用者郵箱或使用者手機號。

使用者登入時可以採用使用者名稱或郵箱或手機號進行登入。

使用者可以釋出博文、發表評論、回覆,還可以新增其他使用者為好友。

1.3.2 博文管理

博文的相關資訊如下:博文ID、釋出日期、發表使用者、博文標題、博文內容、點贊數、回覆數、遊覽量。

博文可以被普通使用者釋出、修改、刪除和評論,但修改和刪除僅限於自己發表的動態。

博文釋出時需要設定分類、標籤。

1.3.3 評論管理

評論的相關資訊如下:評論ID、評論日期、點贊數、發表使用者、評論文章ID、評論內容、父評論ID。

評論可以被使用者發表和刪除以及被其他使用者回覆。

1.3.4 分類管理

分類的相關資訊如下:分類ID、分類名稱、分類別名、分類描述、父分類ID。

只有管理員可以新增、刪除、修改分類。

分類的作用不僅可以將文章分類,還可以作為部落格的選單。

1.3.5 標籤管理

標籤的相關資訊如下:標籤ID、標籤名稱、標籤別名、標籤描述。

使用者發表文章時可以設定標籤,標籤不僅可以將文章分類,還可以作為部落格的選單。

二、資料庫概念模型設計—基本ER圖

個人部落格資料庫設計

個人部落格資料庫設計

三、資料庫邏輯模型設計

個人部落格資料庫設計

個人部落格資料庫設計

個人部落格資料庫設計

個人部落格資料庫設計

個人部落格資料庫設計
個人部落格資料庫設計

個人部落格資料庫設計

個人部落格資料庫設計

四、資料庫語句

4.1 建立資料表語句(部分)

CREATE TABLE `zj_users` (

 `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '使用者ID',

 `user_ip` varchar(20) NOT NULL COMMENT '使用者IP',

 `user_name` varchar(20) NOT NULL COMMENT '使用者名稱',

 `user_password` varchar(15) NOT NULL COMMENT '使用者密碼',

 `user_email` varchar(30) NOT NULL COMMENT '使用者郵箱',

 `user_profile_photo` varchar(255) NOT NULL COMMENT '使用者頭像',

 `user_registration_time` datetime DEFAULT NULL COMMENT '註冊時間',

 `user_birthday` date DEFAULT NULL COMMENT '使用者生日',

 `user_age` tinyint(4) DEFAULT NULL COMMENT '使用者年齡',

 `user_telephone_number` int(11) NOT NULL COMMENT '使用者手機號',

 `user_nickname` varchar(20) NOT NULL COMMENT '使用者暱稱',

 PRIMARY KEY (`user_id`),

 KEY `user_name` (`user_name`),

 KEY `user_nickname` (`user_nickname`),

 KEY `user_email` (`user_email`),

 KEY `user_telephone_number` (`user_telephone_number`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `zj_articles` (

 `article_id` bigint(255) NOT NULL AUTO_INCREMENT COMMENT '博文ID',

 `user_id` bigint(20) NOT NULL COMMENT '發表使用者ID',

 `article_title` text NOT NULL COMMENT '博文標題',

 `article_content` longtext NOT NULL COMMENT '博文內容',

 `article_views` bigint(20) NOT NULL COMMENT '瀏覽量',

 `article_comment_count` bigint(20) NOT NULL COMMENT '評論總數',

 `article_date` datetime DEFAULT NULL COMMENT '發表時間',

 `article_like_count` bigint(20) NOT NULL,

 PRIMARY KEY (`article_id`),

 KEY `user_id` (`user_id`),

 CONSTRAINT `zj_articles_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `zj_users` (`user_id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `zj_comments` (

 `comment_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '評論ID',

 `user_id` bigint(20) NOT NULL COMMENT '發表使用者ID',

 `article_id` bigint(20) NOT NULL COMMENT '評論博文ID',

 `comment_like_count` bigint(20) NOT NULL COMMENT '點贊數',

 `comment_date` datetime DEFAULT NULL COMMENT '評論日期',

 `comment_content` text NOT NULL COMMENT '評論內容',

 `parent_comment_id` bigint(20) NOT NULL COMMENT '父評論ID',

 PRIMARY KEY (`comment_id`),

 KEY `article_id` (`article_id`),

 KEY `comment_date` (`comment_date`),

 KEY `parent_comment_id` (`parent_comment_id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

CREATE TABLE `zj_labels` (

 `label_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '標籤ID',

 `label_name` varchar(20) NOT NULL COMMENT '標籤名稱',

 `label_alias` varchar(15) NOT NULL COMMENT '標籤別名',

 `label_description` text NOT NULL COMMENT '標籤描述',

 PRIMARY KEY (`label_id`),

 KEY `label_name` (`label_name`),

 KEY `label_alias` (`label_alias`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `zj_set_artitle_label` (

 `article_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文章ID',

 `label_id` bigint(20) NOT NULL,

 PRIMARY KEY (`article_id`),

 KEY `label_id` (`label_id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `zj_set_artitle_sort` (

 `article_id` bigint(20) NOT NULL COMMENT '文章ID',

 `sort_id` bigint(20) NOT NULL COMMENT '分類ID',

 PRIMARY KEY (`article_id`,`sort_id`),

 KEY `sort_id` (`sort_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `zj_sorts` (

 `sort_id` bigint(20) NOT NULL COMMENT '分類ID',

 `sort_name` varchar(50) NOT NULL COMMENT '分類名稱',

 `sort_alias` varchar(15) NOT NULL COMMENT '分類別名',

 `sort_description` text NOT NULL COMMENT '分類描述',

 `parent_sort_id` bigint(20) NOT NULL COMMENT '父分類ID',

 PRIMARY KEY (`sort_id`),

 KEY `sort_name` (`sort_name`),

 KEY `sort_alias` (`sort_alias`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `zj_user_friends` (

 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '標識ID',

 `user_id` bigint(20) NOT NULL COMMENT '使用者ID',

 `user_friends_id` bigint(20) NOT NULL COMMENT '好友ID',

 `user_note` varchar(20) NOT NULL COMMENT '好友備註',

 `user_status` varchar(20) NOT NULL COMMENT '好友狀態',

 PRIMARY KEY (`id`),

 KEY `user_id` (`user_id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
複製程式碼

4.2 建立檢視(部分)

某使用者的所有好友檢視:

CREATE VIEW Friends
AS
SELECT
zj_user_friends.user_id AS user_id,
zj_users.user_name AS user_name,
zj_user_friends.user_friends_id AS user_friends_id,
zj_user_friends.user_note AS user_note
FROM
(
zj_users
JOIN zj_user_friends
)
WHERE
(
zj_users.user_id = zj_user_friends.user_id
) ;
複製程式碼

五、 小結&參考資料

小結

資料庫的設計不是很簡單,一個產品除了滿足使用者需求,資料庫的架構是非常重要的,之前做的一個志願網站,雖然功能不是很好,基本需求能滿足,但是資料庫完全沒有設計,沒有處理,導致資料處理很糟糕。

現在這個資料爆炸的網路時代,資料的處理及資料庫的設計顯得尤其重要,資料庫設計師工作量也不亞於前後端工程師。

參考資料

相關文章