將構思轉成計算機可識別的設計,根據構思爲個人博客設計數據庫

根據前面的構思信息,結合思惟導圖、設計稿,咱們就能夠設計數據庫了:
咱們須要建立5張表,分別是:文章表(articles)、文章內容表(article_data)、文章分類表(categories)、文章圖片表(attachments)、博客管理員表(admins)。
接着給每張表設計須要的字段:
數據庫mysql

文章表articles表結構:

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,
  `deleted_time` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_updated_time` (`created_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;

設計的文章表用來存儲博客文章信息,有9個字段,分別對應字段的中文意思。sql

  • id爲文章的自增id
  • title爲文章的標題
  • keywords爲文章的關鍵詞
  • description爲文章的簡介
  • category_id爲文章與分類關聯的分類id
  • views爲文章的瀏覽量計數
  • status爲文章的顯示狀態,值爲1的時候表示正常顯示,值爲0的是,表示是草稿,不在前臺顯示,值爲99的時候,表示這篇文章已刪除,不在前臺顯示,留存是爲了之後查驗
  • created_time表示文章發佈時間,存的是時間戳
  • deleted_time表示文章的刪除時間,記錄這篇文章是何時刪除的存的一樣是時間戳

文章內容表article_data表結構

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;

設計文章表和文章內容表分開來存放,主要是由於文章內容字段每每會有不少內容,而大內容在mysql搜索中,會拖慢搜索時間,每每內容在列表顯示的時候,並不須要展現出來,因此分開存放可讓文章列表展現的時候,不須要讀取文章內容,提升展現時間,減小內存消耗。分開存放也不影響具體文章展現效果。
文章內容表比較簡單,它只有2個字段數據庫

  • article_id 爲文章id,關聯文章表的id
  • content 爲文章內容,採用longtext格式存儲,能夠存儲40億字節的數據,不用擔憂文章寫長一點就沒法保存的問題。

文章分類表categories表結構

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,
  `deleted_time` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_created_time` (`created_time`),
  KEY `idx_updated_time` (`created_time`),
  KEY `idx_parent_id` (`parent_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

文章分類表用來存儲文章分類,設置了8個字段,他們分別是:數據庫設計

  • id爲分類id
  • title爲分類名稱
  • description爲分類簡介
  • content爲分類內容
  • parent_id爲分類的上級分類id
  • status爲分類的狀態,值爲1的時候表示正常顯示,值爲0的是,表示是草稿,不在前臺顯示,值爲99的時候,表示這個分類已刪除,不在前臺顯示,留存是爲了之後查驗
  • created_time表示分類的發佈時間,存的是時間戳
  • deleted_time表示分類的刪除時間,記錄這個分類是何時刪除的存的一樣是時間戳

這裏設計預留了一些字段,爲之後擴展須要須要。分類簡介、分類內容、分類上級id可能暫時用不到,後期用到再使用。加密

文章圖片表attachments表結構

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,
  `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` (`created_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

文章圖片表用來存儲發佈文章上傳的圖片信息。它有10個字段。spa

  • id爲圖片入庫自增id
  • file_name爲圖片文件名
  • file_location爲圖片的存儲路徑
  • file_size爲圖片的大小
  • file_md5爲圖片的MD5值,用來判斷圖片是否已經上傳過,重複的圖片能夠跳過上傳和存儲入庫步驟
  • width爲圖片的寬度
  • height爲圖片的高度
  • status爲圖片的狀態,值爲1的時候表示正常顯示,值爲0的是,表示是草稿,不在前臺顯示,值爲99的時候,表示這篇文章已刪除,不在前臺顯示,留存是爲了之後查驗
  • created_time表示圖片的發佈時間,存的是時間戳
  • deleted_time表示圖片的刪除時間,記錄這個圖片是何時刪除的存的一樣是時間戳

博客管理員表admins表結構

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,
  `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` (`created_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

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

  • id爲管理員id
  • user_name爲管理員名稱
  • password爲管理員密碼,這個密碼不是明文的,它是一串加密過的字符串,數據庫是不保存明文密碼的。驗證密碼的時候,經過將提交的密碼加密,而後對2個加密的密碼作比對來驗證密碼是否正確。
  • status爲管理員的狀態,值爲1的時候表示正常顯示,值爲0的時候,表示該用戶已禁用,值爲99的時候,已刪除
  • created_time表示管理員的添加時間,存的是時間戳
  • deleted_time表示管理員的刪除時間,記錄這個管理員是何時刪除的存的一樣是時間戳

至此數據庫設計完成了,詳細到每個字段的意思和做用。咱們將上面設計的數據結果信息導入到數據庫就獲得了可用的數據庫了。接下來,咱們將根據博客的須要,來選擇開發的語言和技術了。code

相關文章
相關標籤/搜索