分析論壇資料庫設計&分析,分析論壇資料庫
1,資料庫設計
論壇資料庫設計還是挺有意思的,按照商務邏輯進行拆分的資料庫設計。
首先,如果是一個部落格就一個post表記可以了。然後考慮到論壇資料量比較大,所以在設計上有最佳化。
論壇把資料庫分成3個資料表,這樣在訪問不同頁面的時候都查詢很快。
資料庫表參考discuz 資料庫設計:
只是挑了些相關欄位,沒有把所有欄位列出了。
--論壇板塊表CREATE TABLE forum ( fid mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` char(50) NOT NULL DEFAULT '', `status` tinyint(1) NOT NULL DEFAULT '0', threads mediumint(8) unsigned NOT NULL DEFAULT '0', posts mediumint(8) unsigned NOT NULL DEFAULT '0', todayposts mediumint(8) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (fid))ENGINE=InnoDB DEFAULT CHARSET=utf8;--論壇文章CREATE TABLE `thread` ( `tid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `fid` mediumint(8) unsigned NOT NULL DEFAULT '0', `author` char(15) NOT NULL DEFAULT '', `authorid` mediumint(8) unsigned NOT NULL DEFAULT '0', `subject` char(80) NOT NULL DEFAULT '', `dateline` int(10) unsigned NOT NULL DEFAULT '0', `views` int(10) unsigned NOT NULL DEFAULT '0', `replies` mediumint(8) unsigned NOT NULL DEFAULT '0', `attachment` tinyint(1) NOT NULL DEFAULT '0', `closed` mediumint(8) unsigned NOT NULL DEFAULT '0', `status` smallint(6) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`tid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;--論壇文章內容CREATE TABLE post ( pid int(10) unsigned NOT NULL AUTO_INCREMENT, fid mediumint(8) unsigned NOT NULL DEFAULT '0', tid mediumint(8) unsigned NOT NULL DEFAULT '0', `first` tinyint(1) NOT NULL DEFAULT '0', author varchar(15) NOT NULL DEFAULT '', authorid mediumint(8) unsigned NOT NULL DEFAULT '0', `subject` varchar(80) NOT NULL DEFAULT '', dateline int(10) unsigned NOT NULL DEFAULT '0', message mediumtext NOT NULL, useip varchar(15) NOT NULL DEFAULT '' PRIMARY KEY (tid,pid)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2,具體分析
從頁面來分析,按照使用者訪問路徑分析。
首先使用者訪問論壇首頁,這個地方會直接查詢forum表。
裡面儲存了論壇板塊資訊,主題數量,貼文量。
比如一個騎行網站論壇:http://www.517318.com/ (隨便找的)
考慮到效率,在forum表中儲存了一些冗餘資訊,計數的資訊直接記錄到了這張表裡面。
然後進入主題頁面
這裡查詢了下thread表,thread表也做了資料冗餘。
當使用者發帖的適合會建立一個thread表,只存標題數量,再建立一個post表,post裡具體的內容。
如果是發帖,則thread表和post表都插入資料。
如果是回帖,則只記錄post表同時,同時記錄thread id。
只有第一個是發帖,其他的都是回帖。
3,總結
本文的原文串連是: http://blog.csdn.net/freewebsys/article/details/47343257 未經博主允許不得轉載。
論壇資料庫設計通過3張表,分開放不同資料,得到3種頁面查詢速度都很快。
這對於我們的系統設計很有啟發,類似的情況還有部落格資料庫設計。
把部落格的標題存成一張表,部落格的內容存成一張表,資料分開後,兩種情況查詢都得到最佳化。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。