根據前面的構思信息,結合思惟導圖、設計稿,咱們就能夠設計數據庫了:
咱們須要建立5張表,分別是:文章表(articles)、文章內容表(article_data)、文章分類表(categories)、文章圖片表(attachments)、博客管理員表(admins)。
接着給每張表設計須要的字段: mysql
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
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個字段數據庫
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可能暫時用不到,後期用到再使用。加密
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
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;
博客管理員表用來存儲博客管理員的帳號和密碼。理論上支持多管理員使用。設計
至此數據庫設計完成了,詳細到每個字段的意思和做用。咱們將上面設計的數據結果信息導入到數據庫就獲得了可用的數據庫了。接下來,咱們將根據博客的須要,來選擇開發的語言和技術了。code