思路篇:將構(gòu)思轉(zhuǎn)成計算機可識別的設(shè)計,根據(jù)構(gòu)思為我的博客設(shè)計數(shù)據(jù)庫

根據(jù)前面的構(gòu)思信息,結(jié)合思維導(dǎo)圖、設(shè)計稿,我們就可以設(shè)計數(shù)據(jù)庫了:
我們需要創(chuàng)建5張表,分別是:文章表(articles)、文章內(nèi)容表(article_data)、文章分類表(categories)、文章圖片表(attachments)、博客管理員表(admins)。
接著給每張表設(shè)計需要的字段:

我的博客導(dǎo)圖

文章表articles表結(jié)構(gòu):

CREATE TABLE `articles` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(250) NOT NULL DEFAULT '',
  `keywords` varchar(250) NOT NULL DEFAULT '',
  `description` varchar(250) NOT NULL DEFAULT '',
  `category_id` int(10) unsigned NOT NULL DEFAULT 0,
  `views` int(10) unsigned NOT NULL DEFAULT 0,
  `status` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `created_time` int(11) NOT NULL DEFAULT 0,
  `updated_time` int(11) NOT NULL DEFAULT 0,
  `deleted_time` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_updated_time` (`updated_time`),
  KEY `idx_category_id` (`category_id`),
  KEY `idx_views` (`views`),
  KEY `idx_status` (`status`),
  KEY `idx_created_time` (`created_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

設(shè)計的文章表用來存儲博客文章信息,有9個字段,分別對應(yīng)字段的中文意思。

  • id為文章的自增id
  • title為文章的標題
  • keywords為文章的關(guān)鍵詞
  • description為文章的簡介
  • category_id為文章與分類關(guān)聯(lián)的分類id
  • views為文章的瀏覽量計數(shù)
  • status為文章的顯示狀態(tài),值為1的時候表示正常顯示,值為0的是,表示是草稿,不在前臺顯示,值為99的時候,表示這篇文章已刪除,不在前臺顯示,留存是為了以后查驗
  • created_time表示文章發(fā)布時間,存的是時間戳
  • deleted_time表示文章的刪除時間,記錄這篇文章是什么時候刪除的存的同樣是時間戳

文章內(nèi)容表article_data表結(jié)構(gòu)

CREATE TABLE `article_data` (
  `article_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `content` longtext DEFAULT NULL,
  PRIMARY KEY (`article_id`),
  CONSTRAINT `fk_articles_article_data` FOREIGN KEY (`article_id`) REFERENCES `articles` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

設(shè)計文章表和文章內(nèi)容表分開來存放,主要是因為文章內(nèi)容字段往往會有很多內(nèi)容,而大內(nèi)容在mysql搜索中,會拖慢搜索時間,往往內(nèi)容在列表顯示的時候,并不需要展示出來,所以分開存放可以讓文章列表展示的時候,不需要讀取文章內(nèi)容,提高展示時間,減少內(nèi)存消耗。分開存放也不影響具體文章展示效果。
文章內(nèi)容表比較簡單,它只有2個字段

  • article_id 為文章id,關(guān)聯(lián)文章表的id
  • content 為文章內(nèi)容,采用longtext格式存儲,可以存儲40億字節(jié)的數(shù)據(jù),不用擔(dān)心文章寫長一點就無法保存的問題。

文章分類表categories表結(jié)構(gòu)

CREATE TABLE `categories` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(250) NOT NULL DEFAULT '',
  `description` varchar(250) NOT NULL DEFAULT '',
  `content` longtext DEFAULT NULL,
  `parent_id` int(10) unsigned NOT NULL DEFAULT 0,
  `status` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `created_time` int(11) NOT NULL DEFAULT 0,
  `updated_time` int(11) NOT NULL DEFAULT 0,
  `deleted_time` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_created_time` (`created_time`),
  KEY `idx_updated_time` (`updated_time`),
  KEY `idx_parent_id` (`parent_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

文章分類表用來存儲文章分類,設(shè)置了8個字段,他們分別是:

  • id為分類id
  • title為分類名稱
  • description為分類簡介
  • content為分類內(nèi)容
  • parent_id為分類的上級分類id
  • status為分類的狀態(tài),值為1的時候表示正常顯示,值為0的是,表示是草稿,不在前臺顯示,值為99的時候,表示這個分類已刪除,不在前臺顯示,留存是為了以后查驗
  • created_time表示分類的發(fā)布時間,存的是時間戳
  • deleted_time表示分類的刪除時間,記錄這個分類是什么時候刪除的存的同樣是時間戳
    這里設(shè)計預(yù)留了一些字段,為以后擴展需要需要。分類簡介、分類內(nèi)容、分類上級id可能暫時用不到,后期用到再使用。

文章圖片表attachments表結(jié)構(gòu)

CREATE TABLE `attachments` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `file_name` varchar(100) NOT NULL DEFAULT '',
  `file_location` varchar(250) NOT NULL DEFAULT '',
  `file_size` bigint(20) unsigned NOT NULL DEFAULT 0,
  `file_md5` varchar(32) NOT NULL DEFAULT '',
  `width` int(10) unsigned NOT NULL DEFAULT 0,
  `height` int(10) unsigned NOT NULL DEFAULT 0,
  `status` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `created_time` int(11) NOT NULL DEFAULT 0,
  `updated_time` int(11) NOT NULL DEFAULT 0,
  `deleted_time` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY `file_md5` (`file_md5`),
  KEY `idx_status` (`status`),
  KEY `idx_created_time` (`created_time`),
  KEY `idx_updated_time` (`updated_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

文章圖片表用來存儲發(fā)布文章上傳的圖片信息。它有10個字段。

  • id為圖片入庫自增id
  • file_name為圖片文件名
  • file_location為圖片的存儲路徑
  • file_size為圖片的大小
  • file_md5為圖片的MD5值,用來判斷圖片是否已經(jīng)上傳過,重復(fù)的圖片可以跳過上傳和存儲入庫步驟
  • width為圖片的寬度
  • height為圖片的高度
  • status為圖片的狀態(tài),值為1的時候表示正常顯示,值為0的是,表示是草稿,不在前臺顯示,值為99的時候,表示這篇文章已刪除,不在前臺顯示,留存是為了以后查驗
  • created_time表示圖片的發(fā)布時間,存的是時間戳
  • deleted_time表示圖片的刪除時間,記錄這個圖片是什么時候刪除的存的同樣是時間戳

博客管理員表admins表結(jié)構(gòu)

CREATE TABLE `admins` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(16) NOT NULL DEFAULT '',
  `password` varchar(128) NOT NULL DEFAULT '',
  `status` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `created_time` int(11) NOT NULL DEFAULT 0,
  `updated_time` int(11) NOT NULL DEFAULT 0,
  `deleted_time` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_user_name` (`user_name`),
  KEY `idx_status` (`status`),
  KEY `idx_created_time` (`created_time`),
  KEY `idx_updated_time` (`updated_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

博客管理員表用來存儲博客管理員的賬號和密碼。理論上支持多管理員使用。

  • id為管理員id
  • user_name為管理員名稱
  • password為管理員密碼,這個密碼不是明文的,它是一串加密過的字符串,數(shù)據(jù)庫是不保存明文密碼的。驗證密碼的時候,通過將提交的密碼加密,然后對2個加密的密碼做比對來驗證密碼是否正確。
  • status為管理員的狀態(tài),值為1的時候表示正常顯示,值為0的時候,表示該用戶已禁用,值為99的時候,已刪除
  • created_time表示管理員的添加時間,存的是時間戳
  • deleted_time表示管理員的刪除時間,記錄這個管理員是什么時候刪除的存的同樣是時間戳

至此數(shù)據(jù)庫設(shè)計完成了,詳細到每一個字段的意思和作用。我們將上面設(shè)計的數(shù)據(jù)結(jié)果信息導(dǎo)入到數(shù)據(jù)庫就得到了可用的數(shù)據(jù)庫了。接下來,我們將根據(jù)博客的需要,來選擇開發(fā)的語言和技術(shù)了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容